编写一个Converse程序,分别将作为获取程序命令行参数数传递的整型值转换为二进制、十六进制以及八进制数

为您推荐: 
本文来自互联网,由机器人自动采编,文章内容不代表本站观点,请读者自行辨别信息真伪,如有发现不适内容,请及时联系站长处理。相关文章推荐
#include/* Here's a helper function to get me around the problem of not
* having...
练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值。字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。
#include...
一个16进制字符串,可能是带负号的,也可能是非法的(g1234),把它转换为10进制整数输出。
public class HexToDecmal {
public static void...
将16进制字符串值转换为 in
今天,在review 一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟。
网上关于这个函数的资料大都来源于同份资料,linux库函数,...
php如何将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串!经过查找居然如此简单,一个函数就搞定了。
数据库脚本:
-- ---------------...
package com.oem.
import java.io.FileInputS
import java.io.IOE
public class Tes...
记录一下而已,不是多复杂的东西。不多说,直接代码
一.根据byte的二进制值,分别取高低的四位转换成16进制字符
String str = "我";
byte[] ba = str.g...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&figure&&img src=&/v2-ecab6c857b0_b.jpg& data-rawwidth=&1224& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&1224& data-original=&/v2-ecab6c857b0_r.jpg&&&/figure&&p&
从2015年转行程序员至今也有两年多了,当初自学的java却误打误撞进了python的坑,入职之后一天java也没有写过,或许这可以理解成缘分吧,哈哈!使用python工作久了,随手写一些小工具再所难免,不知不觉,我的工具包也增长到了几千行代码。其中有的函数依照别人的代码改写,也有的源于自己的灵感,我自认为还是挺好用的。现在统一规整后做成pip包,拿出来分享给大家使用。&/p&&p&
函数都很小巧,代码实现相对简单,风格比较自由,尽可能不依赖其它安装包,极个别的工具依赖一些特定的驱动程序,比如redis,kafka, psutil,如果自己的项目没有相关需求,那么可以将需要的方法,类复制放到自己的项目中,不必完全安装&a href=&/?target=https%3A///ShichaoMa/toolkit& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ShichaoMa/toolkit&i class=&icon-external&&&/i&&/a&。放心,我是不会追究版权的。&/p&&h2&正文开始&/h2&&p&&b&安装toolkity&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#python3测试有效
pip install toolkity
&/code&&/pre&&/div&&p&有朋友可能会想为什么不叫toolkit,我,也是那么想的。可是名字被别人占用了肿么办,只能在后面加个y,看起来正式而不失一点小俏皮。&/p&&figure&&img src=&/v2-98dce02017_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&662& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&/v2-98dce02017_r.jpg&&&/figure&&p&安装完毕,来跟我学习几个常用函数的使用方法吧。&/p&&ul&&li&&b&Timer &/b&简单好用的计时器&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&class Timer(object):
计时器,对于需要计时的代码进行with操作:
with Timer() as timer:
print(timer.cost)
def __init__(self, start=None):
self.start = start if start is not None else time.time()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.stop = time.time()
self.cost = self.stop - self.start
return exc_type is None
&/code&&/pre&&/div&&p&有时我们想对我们写的代码执行时间进行统计,通常我们会使用如下代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import time
start = time.time()
...# 我们的代码
end = time.time()
cost = end - start
&/code&&/pre&&/div&&p&现在有了timer,一切都变的简单啦&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 使用方法:
In [2]: from toolkit.managers import Timer
In [3]: with Timer() as timer:
num = 10**20
In [4]: print(timer.cost)
3.0625e-05
In [5]: print(timer.start)
In [6]: print(timer.stop)
&/code&&/pre&&/div&&p&同时,你还可以指定开始时间&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&In [9]: import time
In [10]: with Timer(start=time.time()-10) as timer:
num = 12**12
In [11]: timer.cost
Out[11]: 10.196
&/code&&/pre&&/div&&ul&&li&&b&ExceptContext &/b&异常捕获上下文&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&class ExceptContext(object):
异常捕获上下文
def test():
with ExceptContext(Exception, errback=lambda name, *args:print(name)):
raise Exception(&test. ..&)
def __init__(self, exception=Exception, func_name=None,
errback=lambda func_name, *args: traceback.print_exception(*args) is None,
finalback=lambda got_err: got_err):
:param exception: 指定要监控的异常
:param func_name: 可以选择提供当前所在函数的名称,回调函数会提交到函数,用于跟踪
:param errback: 提供一个回调函数,如果发生了指定异常,就调用该函数,该函数的返回值为True时不会继续抛出异常
:param finalback: finally要做的操作
self.errback = errback
self.finalback = finalback
self.exception = exception
self.got_err = False
self.func_name = func_name or _find_caller_name(is_func=True)
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
return_code = False
if isinstance(exc_val, self.exception):
self.got_err = True
return_code = self.errback(self.func_name, exc_type, exc_val, exc_tb)
self.finalback(self.got_err)
return return_code
&/code&&/pre&&/div&&p&通常我们想捕获异常时,会写如下代码&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&got_err = False
except ZeroDivisionError:
import traceback
traceback.print_exc()
got_err = True
print(got_err)
&/code&&/pre&&/div&&p&现在我们可以用ExceptContext简单实现&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&with ExceptContext(ZeroDivisionError, finalback=lambda got_err: print(got_err)):
&/code&&/pre&&/div&&p&其中ExceptContext接收4个参数&/p&&ol&&li&:param exception: 指定要监控的异常, 默认为Exception&/li&&li&:param func_name: 可以选择提供当前所在函数的名称,回调函数会提交到函数,用于跟踪,默认为None,自己判断调用函数名称&/li&&li&:param errback: 提供一个回调函数,如果发生了指定异常,就调用该函数,该函数的返回值为True时不会继续抛出异常 默认打出异常信息,返回True&/li&&li&:param finalback: finally要做的操作 默认返回是否发生异常。&/li&&/ol&&p&通过自定义errback,我们可以对异常做任何想要的操作。&/p&&ul&&li&&b&debugger &/b&debug小工具&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def debugger():
debug = eval(os.environ.get(&DEBUG&))
except Exception:
debug = False
d = pdb.Pdb()
d.set_trace( sys._getframe().f_back)
&/code&&/pre&&/div&&p&有时我们可能会使用pdb来调试,经常会发生的情况是,我们在测试环境下调试,部署到生产之后,发现pdb.set_trace()忘记删除,导致代码在生产系统中卡住,这就很尴尬了。使用debugger,同时在测试环境中加入export DEBUG=True,可以轻松避免上述情况&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import os
os.environ[&DEBUG&] = True
from toolkit import debugger
def fun():
debugger()
&/code&&/pre&&/div&&ul&&li&&b&duplicate &/b&保序去重函数&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def duplicate(iterable, keep=lambda x: x, key=lambda x: x, reverse=False):
:param iterable:
:param keep: 去重的同时要对element做的操作
:param key: 使用哪一部分去重
:param reverse: 是否反向去重
result = list()
duplicator = list()
if reverse:
iterable = reversed(iterable)
for i in iterable:
keep_field = keep(i)
key_words = key(i)
if key_words not in duplicator:
result.append(keep_field)
duplicator.append(key_words)
return list(reversed(result)) if reverse else result
&/code&&/pre&&/div&&p&我们经常会遇到去重问题,比如&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&In [2]: ls = [3,4,5,2,4,1]
In [3]: ls = list(set(ls))
In [4]: ls
Out[4]: [1, 2, 3, 4, 5]
&/code&&/pre&&/div&&p&上述列表中有2个4,我们想去掉多余的4,但是不想顺序乱掉,如果使用list(set(ls))的方式,顺序会乱掉,因此我们可以使用duplicate函数来做&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&In [5]: from toolkit import duplicate
In [6]: ls = [3, 4, 5, 2, 4, 1]
# 正序去重
In [7]: duplicate(ls)
Out[7]: [3, 4, 5, 2, 1]
# 逆序去重
In [8]: duplicate(ls, reverse=True)
Out[8]: [3, 5, 2, 4, 1]
# 指定规则去重
In [10]: ls = [{&a&: 3, &b&: 4}, {&a&:3, &b&: 5}]
In [11]: duplicate(ls, key=lambda x: x[&a&])
Out[11]: [{'a': 3, 'b': 4}]
# 去重后仅保留部分数据
In [12]: duplicate(ls, key=lambda x: x[&a&], keep=lambda x: x[&b&])
Out[12]: [4]
&/code&&/pre&&/div&&ul&&li&&b&chain_all &/b&连接多个可迭代对象&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def chain_all(iter):
连接多个序列或字典
:param iter:
iter = list(iter)
if not iter:
if isinstance(iter[0], dict):
result = {}
for i in iter:
result.update(i)
result = reduce(lambda x, y: list(x)+list(y), iter)
return result
&/code&&/pre&&/div&&p&以前我们都使用Itertools.chain.from_iterable,但是这个函数无法连接字典同时返回的是可迭代器对象。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&In [14]: chain_all([[1, 2], [1, 2]])
Out[14]: [1, 2, 1, 2]
In [15]: chain_all([{&a&: 1}, {&b&: 2}])
Out[15]: {'a': 1, 'b': 2}
&/code&&/pre&&/div&&ul&&li&&b&safely_json_loads &/b&安全的将字符串变成json对象&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 代码实现
def safely_json_loads(json_str, defaulttype=dict, escape=True):
返回安全的json类型
:param json_str: 要被loads的字符串
:param defaulttype: 若load失败希望得到的对象类型
:param escape: 是否将单引号变成双引号
if not json_str:
return defaulttype()
elif escape:
data = replace_quote(json_str)
return json.loads(data)
return json.loads(json_str)
&/code&&/pre&&/div&&p&对于空字符串,返回默认类型,对于使用单引号包裹的字符串,将其转换成双引号&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&In [17]: json_str = &&&{'a': 1, &b&: &i'm tom.&}&&&
In [18]: safely_json_loads(json_str)
Out[18]: {'a': 1, 'b': &i'm tom.&}
# 上面的i'm tom中的单引号不会被转成双引号
&/code&&/pre&&/div&&ul&&li&&b&format_html_string&/b& 格式化html&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def format_html_string(html):
格式化html, 去掉多余的字符,类,script等。
:param html:
trims = [(r'\n',''),
(r'\t', ''),
(r'\r', ''),
(r'\u2018', &'&),
(r'\u2019', &'&),
(r'\ufeff', ''),
(r'\u2022', &:&),
(r&&([a-z][a-z0-9]*)\ [^&]*&&, '&\g&1&&'),
(r'&\s*script[^&]*&[^&]*&\s*/\s*script\s*&', ''),
(r&&/?a.*?&&, '')]
return reduce(lambda string, replacement: re.sub(replacement[0], replacement[1], string), trims, html)
&/code&&/pre&&/div&&p&去掉多余的html属性&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&In [20]: format_html_string(&&div class='color'&&/div&&)
Out[20]: '&div&&/div&'
&/code&&/pre&&/div&&p&....&/p&&p&除以上工具以外,还有很多工具非常有用,由于例子相对复杂,就不一一举例了,可以多关注我的github, 如&a href=&/?target=https%3A///ShichaoMa/proxy_factory& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ShichaoMa/proxy_factory&i class=&icon-external&&&/i&&/a&项目,就有很多用例出现。&/p&&p&下面简单介绍一些其它工具&/p&&ul&&li&重试器,包装函数对指定异常进行重试&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def retry_wrapper(retry_times, exception=Exception, error_handler=None, interval=0.1):
函数重试装饰器
:param retry_times: 重试次数
:param exception: 需要重试的异常
:param error_handler: 出错时的回调函数
:param interval: 重试间隔时间
def out_wrapper(func):
@wraps(func)
def wrapper(*args, **kwargs):
while True:
return func(*args, **kwargs)
except exception as e:
count += 1
if error_handler:
result = error_handler(func.__name__, count, e, *args, **kwargs)
if result:
count -= 1
if count &= retry_times:
time.sleep(interval)
return wrapper
return out_wrapper
&/code&&/pre&&/div&&ul&&li&超时器,装饰函数并指定其超时时间&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def timeout(timeout_time, default):
Decorate a method so it is required to execute in a given time period,
or return a default value.
:param timeout_time:
:param default:
class DecoratorTimeout(Exception):
def timeout_function(f):
def f2(*args):
def timeout_handler(signum, frame):
raise DecoratorTimeout()
old_handler = signal.signal(signal.SIGALRM, timeout_handler)
# triger alarm in timeout_time seconds
signal.alarm(timeout_time)
retval = f(*args)
except DecoratorTimeout:
return default
signal.signal(signal.SIGALRM, old_handler)
signal.alarm(0)
return retval
return timeout_function
&/code&&/pre&&/div&&ul&&li&自实现groupby&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def groupby(it, key):
自实现groupby,itertool的groupby不能合并不连续但是相同的组, 且返回值是iter
:return: 字典对象
groups = dict()
for item in it:
groups.setdefault(key(item), []).append(item)
return groups
&/code&&/pre&&/div&&ul&&li&cookie解析&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def parse_cookie(string):
解析cookie
:param string:
results = re.findall('([^=]+)=([^\;]+);?\s?', string)
my_dict = {}
for item in results:
my_dict[item[0]] = item[1]
return my_dict
&/code&&/pre&&/div&&ul&&li&查找字符串函数和类&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def load_function(function_str):
返回字符串表示的函数对象
:param function_str: module1.module2.function
:return: function
mod_str, _sep, function_str = function_str.rpartition('.')
return getattr(load_module(mod_str), function_str)
load_class = load_function
&/code&&/pre&&/div&&ul&&li&查找字符串模块&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def load_module(module_str):
返回字符串表示的模块
:param module_str: os.path
:return: os.path
return __import__(module_str, fromlist=module_str.split(&.&)[-1])
&/code&&/pre&&/div&&ul&&li&获取可用端口&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def free_port():
Determines a free port using sockets.
free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
free_socket.bind(('0.0.0.0', 0))
free_socket.listen(5)
port = free_socket.getsockname()[1]
free_socket.close()
return port
&/code&&/pre&&/div&&ul&&li&线程安全装饰器&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def thread_safe(lock):
对指定函数进行线程安全包装,需要提供锁
:param lock: 锁
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
with lock:
return func(*args, **kwargs)
return wrapper
return decorate
&/code&&/pre&&/div&&ul&&li&慢保存或提交&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def call_later(callback, call_args=tuple(), immediately=True, interval=1):
应用场景:
被装饰的方法需要大量调用,随后需要调用保存方法,但是因为被装饰的方法访问量很高,而保存方法开销很大
所以设计在装饰方法持续调用一定间隔后,再调用保存方法。规定间隔内,无论调用多少次被装饰方法,保存方法只会
调用一次,除非immediately=True
:param callback: 随后需要调用的方法名
:param call_args: 随后需要调用的方法所需要的参数
:param immediately: 是否立即调用
:param interval: 调用间隔
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
self = args[0]
return func(*args, **kwargs)
if immediately:
getattr(self, callback)(*call_args)
now = time.time()
if now - self.__dict__.get(&last_call_time&, 0) & interval:
getattr(self, callback)(*call_args)
self.__dict__[&last_call_time&] = now
return wrapper
return decorate
&/code&&/pre&&/div&&ul&&li&类中的线程安全装饰器&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def thread_safe_for_method_in_class(func):
对类中的方法进行线程安全包装
:param func:
@wraps(func)
def wrapper(*args, **kwargs):
self = args[0]
self.lock.acquire()
return func(*args, **kwargs)
self.lock.release()
return wrapper
&/code&&/pre&&/div&&ul&&li&获取ip&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def get_ip():
获取局域网ip
netcard_info = []
info = psutil.net_if_addrs()
for k,v in info.items():
for item in v:
if item[0] == 2 and not item[1]=='127.0.0.1':
netcard_info.append((k,item[1]))
if netcard_info:
return netcard_info[0][1]
&/code&&/pre&&/div&&p&下面提供一些基础设施&/p&&ul&&li&common_stop_start_control :提供开,关,重启,状态等命令行服务&/li&&li&Singleton:单例元类&/li&&li&Logger:提供日志服务&/li&&li&SettingsWrapper: 提供配置信息服务&/li&&li&ParallelMonitor: 使用Singleton构建, 多线程多进程统一管理器&/li&&li&LoggingMonitor:内建Logger和Settings&/li&&li&Service: 继承自ParallelMonitor,LoggingMonitor并实现common_stop_start_control 接口。编写微服务专用基类。&/li&&li&ProxyPool:基于redis的代理池,继承自Logger &/li&&li&ItemConsumer:kafka消费者,继承自Service&/li&&li&ItemProducer:kafka生产者,继承自Service&/li&&li&RedisQueue:基于redis的队列&/li&&li&FifoDiskQueue:持久化 FIFO 队列&/li&&li&Translate:翻译器,继承自ProxyPool,安装即可用的翻译器见&a href=&/?target=https%3A///ShichaoMa/translate_html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ShichaoMa/translate_html&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&除以上工具之外,还有一些小工具,小函数,如果有兴趣的话,自己去源码里发现吧。&/p&&p&喜欢的可以给我点赞哦!&/p&&p&不懂的可以给我留言哦!&/p&&p&欢迎光临我的github 里面有十几个开源项目,总有一款适合你!&/p&&p&github: &a href=&/?target=https%3A///ShichaoMa& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ShichaoMa&i class=&icon-external&&&/i&&/a&&/p&&p&欢迎光临我的小博客,博客源码在github上有托管,一键安装,一键使用,博客中汇集了工作中常用问题的解决方案,希望能够为您提供帮助哦!&/p&&p&个人博客:&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&夏洛之枫的个人博客&i class=&icon-external&&&/i&&/a&&/p&&p&&/p&
从2015年转行程序员至今也有两年多了,当初自学的java却误打误撞进了python的坑,入职之后一天java也没有写过,或许这可以理解成缘分吧,哈哈!使用python工作久了,随手写一些小工具再所难免,不知不觉,我的工具包也增长到了几千行代码。其中有的函数依照…
&p&从最新的11月的编程排行来看,似乎只有 Python 的发展势头很强势,其他脚本语言都在逐渐走出前 20 名。对于初学编程和完成普通任务的我们来说,Python语言是&b&非常简单易用&/b&的。连Google都在大规模使用Python,你就不用担心学了会没用。所以,&/p&&p&为大家整理了一套全新的&b&学习路线图&/b&,希望对正在摸索中的同道中人解惑。&/p&&p&&br&&/p&&figure&&img src=&/v2-298fb3a5a5a9fcaf3aa564b7ba93d18c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&903& data-rawheight=&1598& class=&origin_image zh-lightbox-thumb& width=&903& data-original=&/v2-298fb3a5a5a9fcaf3aa564b7ba93d18c_r.jpg&&&/figure&&p&&br&&/p&&p&这套学习路线图从最初的基础到人工智能,学习&b&思路&/b&都非常的&b&清晰&/b&,也欢迎过来一起讨论,当然我也会把自己学习的学习心得和学习资料分享出来,共同帮助,共同进步~&/p&&p&&b&python基础资料:&/b&首选分享初学首选的教程:传智播客Python&b&基础视频&/b&的基础视频资料:链接: &a href=&///?target=https%3A///s/1kVveB6f& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1kVveB6&/span&&span class=&invisible&&f&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码: 6exu(该套是2017年Python零基础学习比较好用的课程,其中包含:教学课件+开发工具+环境配置)&/p&&p&主讲:Linux基础、Python基础相关的一些视频,python开发环境的构建,基础的数据类型,字符串如何处理等简单的入门级教程。&/p&&p&&b&人工智能python资料:&/b&想学习人工智能方面的一些资料,人工智能+Python基础视频:链接: &a href=&///?target=https%3A///s/1cCrVbS& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1cCrVbS&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 密码: mf89&/p&&p&最后,声明,感谢黑马程序员公开的基础班的教程。后期会不定期的更新一些学习资料~&/p&&p& &/p&&p&&b&给初学Python童鞋一些建议&/b&:刚开始学习Python的童鞋,我建议用&b&Linux操作系统学习&/b&,自带&b&Python解释器&/b&。学习Python的基础语法,编程最主要就是自学能力。看看Python的&b&API文档&/b&,养成好的自学能力。Python编写代码的速度非常的快,而且非常注重代码的可读性,就是很容易看懂。&/p&&p&代码一定要去敲的,遇到的不懂得代码,&b&多敲&/b&几遍,在这个过程中去理解,这些代码的逻辑性。可以去到网上找一些,Python学习视频去看一看。Python强大的功能在于它的科学计算,这就是他适合做&b&人工智能开发&/b&的关键。学习Python主要在于&b&练习&/b&,自己多写,自己练习写一写&b&demo&/b&。用Python去开发web,Python提供了一些好的框架,先从&b&Django学起&/b&,自己搭建一个简单的Pythonweb实例。&/p&&p&&b&Python的爬虫&/b&还是很厉害的,数据提取,这就是黑客的必会的语言。基本的爬虫原理要懂得,要了解&/p&&p&http协议,爬虫的知识很多,爬取速度多线程多进程消息队列,网页的解析,反爬虫等等。还是希望初学者&b&一步一个脚印,打好基础,学好Python。&/b&&/p&
从最新的11月的编程排行来看,似乎只有 Python 的发展势头很强势,其他脚本语言都在逐渐走出前 20 名。对于初学编程和完成普通任务的我们来说,Python语言是非常简单易用的。连Google都在大规模使用Python,你就不用担心学了会没用。所以,为大家整理了一套…
&figure&&img src=&/v2-ed165f7d60d9bf_b.jpg& data-rawwidth=&487& data-rawheight=&365& class=&origin_image zh-lightbox-thumb& width=&487& data-original=&/v2-ed165f7d60d9bf_r.jpg&&&/figure&&p&Python上手很容易, 基本有其他语言编程经验的人可以在1周内学会Python最基本的内容.&br&它们包括:&/p&&p&&br&1.常用内置类型(int, float, bool, bytes, str, list, dict, set)的使用.&br&2.分支if-else 循环while 迭代for的语法.&br&3.def定义函数, 调用函数.&/p&&p&&br&你再花1周学习些:&br&1.类&br&2.异常&/p&&p&&br&此时, 有些人就在简历中得意的自称&会&Python了.&br&但是学到如此程度, 在实际编程中会经常遇到挫折, 主要源自理解不够深入, 仅仅Python语法和API层面体验了一下.&/p&&p&&br&随意列举一些新手普遍存在的问题:&br&1.不了解Python对象模型, 变量名, 对象概念含混.&br&2.不了解可变对象和不可变对象, 尤其是int.&br&3.不了解切片意味着拷贝, 在循环中大量使用, 影响效率.&br&4.不了解切片是浅拷贝还是深拷贝.&br&5.遇到bytes和str(2.7中的str和unicode)就头晕.&br&6.经常在需要使用is的场景使用==.&br&7.不了解def是运行时执行语句, 并且是赋值语句.&br&8.类属性和实例属性混淆.&br&9.不了解在函数中修改可变对象参数会对调用者产生影响, 导致莫名其妙错误.&br&10.企图在函数中修改全局变量, 没有使用global, 而创建了本地变量.&br&11.以可变对象做函数默认参数.&/p&&p&拥有某项技能的程序员的价值, 可以用学习技能所需的成本来衡量.你用2周学习达到的这种程度, 对于企业就是没有价值的, 因为老板可以让一个公司里任意其他语言的程序员经过2-3周的学习就能达到你现在的程度.Python的简洁易用, 快速开发对项目有价值, 但这不是你的价值, 是Python的价值.所以提高自身价值, 也就是不让别人轻易追上你. 以极低的成本替代你.&/p&&p&你只能快跑, 进一步学习, Python语言层面还需要学习下面一些内容:&br&1.使用生成器, 迭代器&br&2.函数式编程, 匿名函数lambda, map, reduce, filter&br&3.列表解析, 字典解析, 集合解析, 生成器解析&br&4.运算符重载(&b&setattr&/b&, &b&getattr&/b&, &b&getitem&/b&, &b&gt&/b&, &b&lt&/b&...)&br&5.property, 描述符(&b&get&/b&, &b&set&/b&, &b&delete&/b&)&br&6.上下文管理器(&b&enter&/b&, &b&exit&/b&)&br&7.深入理解面向对象&/p&&p&上述都是语言层面的,属于内功.实战中当然也需要一些更为具体的外功, 训练外功可以从熟悉Python标准库开始, 这些模块能进入标准库说明他们足够好并且在实际项目中足够常用, 列举一些极为常用的:&br&1.正则表达式 re&br&2.迭代工具 itertools&br&3.常用数据结构 collections, heapq, array&br&4.处理二进制数据 struct&br&5.随机 random&br&6.系统调用 os&br&7.Python对象序列化 pickle&br&8.多进程多线程处理 threading, multiprocessing&br&9.网络 socket, urllib&br&10.系统参数 sys&/p&&p&无论练习内功或外功,结合实战都是最好的训练方式和检验手段, 可以根据个人情况以及喜好选择, 如:&br&1.使用django, flask开发网站.&br&2.开发网络爬虫或使用Python爬虫框架(如scrapy).&br&3.写一些自动化运维脚本, 定时读取某软件log, 出现异常自动发邮件.&br&4.使用selenium对网站进行测试.&br&5.使用Python开发树莓派小车(电机,传感器驱动).&br&6.使用Python开发Vim插件, 如在vim中做一个音乐播放器.&br&7.使用Python做算法题, 如leetcode.&br&8.opencv做图像识别.&br&9.使用numpy和pandas做数据处理.&br&10.使用机器学习库sklearn, tensorflow做应用.&br&11.使用PyQt编写桌面应用.&br&12.使用scipy, matplotlib做科学计算.&br&13.使用Python做渗透测试.&br&......&/p&&p&个人建议选择小项目进行实训, 有些新手上来就想定一个大目标, 做的时候很挫折, 往往半途而废.把小东西先实现, 然后优化. 接下来添加新功能, 慢慢迭代把小东西做大. 这样在做的时候,每实现一个小功能你都会有成就感, 激励继续前进.&/p&&p&可能经过比较漫长的一段时间, 你成为了一个熟练的Python应用程序员, 还有些高级话题可以继续学习:&br&1.装饰器&br&2.元类&br&这些高级话题在开发框架中经常使用, 它们可以帮你创建更灵活的代码.&/p&&p&通常自称一个月光速学了会Python的人基本都不是天才, 只是浮躁, 目标定的比较低而已.&br&不要太过急功近利, 慢慢玩, 精进.&br&如果你觉着编程有趣, 成长也就不再痛苦, 祝学习愉快.&/p&&p&&br&&/p&&p&作者: 程序员硕 &/p&&p&链接:&a href=&/?target=http%3A///article/15051& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/article/15051&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&来源:慕课网&/p&&p&本文原创发布于慕课网 ,转载请注明出处,谢谢合作!&/p&
Python上手很容易, 基本有其他语言编程经验的人可以在1周内学会Python最基本的内容. 它们包括: 1.常用内置类型(int, float, bool, bytes, str, list, dict, set)的使用. 2.分支if-else 循环while 迭代for的语法. 3.def定义函数, 调用函数. 你再花1周学习些:…
&p&Python 是一门简洁的语言,如果有其他语言的编程基础,那么看下这份15分钟的总结,覆盖了最常用的 Python 特性,就能快速上手了。当然,想要熟练的写程序,15分钟是远远不够的,还需多加练习和阅读文档。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# #号后面的全都是注释
# ==& 表示输出结果,注意,这个符号并不是代码的一部分,只是我在这里方便使用
# Python 使用缩进来标注代码块,只有相同缩进的代码才是属于同一个块的
&/code&&/pre&&/div&&h2&定义变量及普通运算&/h2&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# 变量不需要声明类型,直接定义&/span&
&span class=&n&&a&/span& &span class=&o&&=&/span& &span class=&mi&&5&/span&
&span class=&c1&&# 支持普通的数学运算&/span&
&span class=&n&&b&/span& &span class=&o&&=&/span& &span class=&n&&a&/span& &span class=&o&&*&/span& &span class=&mi&&3&/span&
&span class=&o&&==&&/span& &span class=&mi&&15&/span&
&span class=&c1&&# 使用双引号定义字符串&/span&
&span class=&n&&s1&/span& &span class=&o&&=&/span& &span class=&s2&&&hello, world!&&/span&
&span class=&c1&&# 单引号效果跟双引号是一样的&/span&
&span class=&n&&s2&/span& &span class=&o&&=&/span& &span class=&s1&&'hello, world!'&/span&
&span class=&n&&s1&/span& &span class=&o&&==&/span& &span class=&n&&s2&/span&
&span class=&o&&==&&/span& &span class=&bp&&True&/span&
&span class=&mi&&5&/span& &span class=&o&&/&/span& &span class=&mi&&3&/span& &span class=&o&&==&&/span& &span class=&mi&&1&/span&
&span class=&mf&&5.0&/span& &span class=&o&&/&/span& &span class=&mi&&3&/span& &span class=&o&&==&&/span& &span class=&mf&&1.6667&/span&
&span class=&mf&&5.0&/span& &span class=&o&&//&/span& &span class=&mf&&3.0&/span& &span class=&o&&==&&/span& &span class=&mf&&1.0&/span& &span class=&c1&&# 两个除号强制化整&/span&
&span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&mi&&3&/span& &span class=&o&&==&&/span& &span class=&mi&&6&/span&
&span class=&mi&&7&/span& &span class=&o&&%&/span& &span class=&mi&&3&/span& &span class=&o&&==&&/span& &span class=&mi&&1&/span& &span class=&c1&&# 求余数&/span&
&span class=&mi&&2&/span& &span class=&o&&**&/span& &span class=&mi&&3&/span& &span class=&o&&==&&/span& &span class=&mi&&8&/span& &span class=&c1&&# 指数&/span&
&span class=&bp&&True&/span& &span class=&ow&&and&/span& &span class=&bp&&False&/span& &span class=&o&&==&&/span& &span class=&bp&&False&/span&
&span class=&bp&&True&/span& &span class=&ow&&or&/span& &span class=&bp&&False&/span& &span class=&o&&==&&/span& &span class=&bp&&True&/span&
&span class=&ow&&not&/span& &span class=&bp&&True&/span& &span class=&o&&==&&/span& &span class=&bp&&False&/span&
&span class=&mi&&1&/span& &span class=&o&&==&/span& &span class=&mi&&2&/span& &span class=&o&&==&&/span& &span class=&bp&&False&/span&
&span class=&mi&&1&/span& &span class=&o&&!=&/span& &span class=&mi&&2&/span& &span class=&o&&==&&/span& &span class=&bp&&True&/span&
&span class=&mi&&1&/span& &span class=&o&&&=&/span& &span class=&mi&&2&/span& &span class=&o&&==&&/span& &span class=&bp&&True&/span&
&span class=&mi&&1&/span& &span class=&o&&&=&/span& &span class=&mi&&2&/span& &span class=&o&&==&&/span& &span class=&bp&&False&/span&
&span class=&mi&&1&/span& &span class=&o&&&&/span& &span class=&mi&&2&/span& &span class=&o&&&&/span& &span class=&mi&&3&/span& &span class=&o&&==&&/span& &span class=&bp&&True&/span&
&/code&&/pre&&/div&&h2&列表(有序的)&/h2&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&c1&&# Python 支持列表&/span&
&span class=&n&&l&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&]&/span&
&span class=&o&&==&&/span& &span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&]&/span&
&span class=&n&&l&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span& &span class=&c1&&# 索引&/span&
&span class=&o&&==&&/span& &span class=&mi&&1&/span&
&span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&l&/span&&span class=&p&&)&/span& &span class=&c1&&# 求长度&/span&
&span class=&o&&==&&/span& &span class=&mi&&5&/span&
&span class=&n&&l&/span&&span class=&p&&[&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span& &span class=&c1&&# 可以反向索引&/span&
&span class=&o&&==&&/span& &span class=&mi&&5&/span&
&span class=&n&&l&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:&/span&&span class=&mi&&3&/span&&span class=&p&&]&/span&
&span class=&o&&==&&/span& &span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&]&/span& &span class=&c1&&# 块索引,含头不含尾&/span&
&span class=&n&&l&/span& &span class=&o&&+&/span& &span class=&n&&l&/span& &span class=&c1&&# 列表可以相加&/span&
&span class=&o&&==&&/span& &span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&]&/span&
&span class=&n&&l&/span& &span class=&o&&=&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&10&/span&&span class=&p&&)&/span& &span class=&c1&&# range 用来自动生成一个范围内的列表&/span&
&span class=&o&&==&&/span& &span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&mi&&6&/span&&span class=&p&&,&/span& &span class=&mi&&7&/span&&span class=&p&&,&/span& &span class=&mi&&8&/span&&span class=&p&&,&/span& &span class=&mi&&9&/span&&span class=&p&&]&/span&
&span class=&n&&l&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&o&&*&/span&&span class=&n&&i&/span& &span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&)]&/span& &span class=&c1&&# 这个叫做 list comprehension&/span&
&span class=&o&&==&&/span& &span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&9&/span&&span class=&p&&,&/span& &span class=&mi&&16&/span&&span class=&p&&,&/span& &span class=&mi&&25&/span&&span class=&p&&,&/span& &span class=&mi&&36&/span&&span class=&p&&,&/span& &span class=&mi&&49&/span&&span class=&p&&,&/span& &span class=&mi&&64&/span&&span class=&p&&,&/span& &span class=&mi&&81&/span&&span class=&p&&]&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&l&/span&&span class=&p&&:&/span& &span class=&c1&&# 遍历列表&/span&
&span class=&nb&&print&/span&&span class=&p&&(&/span&&span class=&n&&i&/span&&span class=&p&&)&/span&
&span class=&o&&==&&/span& &span class=&mi&&1&/span&
&span class=&mi&&2&/span&
&span class=&mi&&3&/span&
&span class=&mi&&4&/span&
&span class=&mi&&5&/span&
&/code&&/pre&&/div&&h2&字符串&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&s = &hello&
s2 = 'world' # 两种等价的定义字符串方式
==& 'helloworld'
s = 'a b c d e f g'
s.split() # split 函数可以自动把字符串按某个字符拆成列表
==& ['a', 'b', 'c', 'd', 'e', 'f', 'g']
s = 'a|b|c'
s.split('|')
==& ['a', 'b', 'c']
'-'.join(['a', 'b', 'c'])
==& 'a-b-c' # join 是 split 的反向函数,把列表拼成字符串
&/code&&/pre&&/div&&h2&字典(无序的)&/h2&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&n&&d&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'a'&/span&&span class=&p&&:&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'b'&/span&&span class=&p&&:&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&s1&&'c'&/span&&span class=&p&&:&/span& &span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&],&/span& &span class=&mi&&1&/span&&span class=&p&&:&/span&&span class=&s1&&'a'&/span&&span class=&p&&}&/span&
&span class=&n&&d&/span&&span class=&p&&[&/span&&span class=&s1&&'a'&/span&&span class=&p&&]&/span&
&span class=&o&&==&&/span& &span class=&mi&&1&/span&
&span class=&n&&d&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span&
&span class=&o&&==&&/span& &span class=&s1&&'a'&/span&
&span class=&n&&d&/span&&span class=&o&&.&/span&&span class=&n&&keys&/span&&span class=&p&&()&/span&
&span class=&o&&=&&/span& &span class=&p&&[&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'c'&/span&&span class=&p&&,&/span& &span class=&s1&&'b'&/span&&span class=&p&&]&/span&
&span class=&nb&&list&/span&&span class=&p&&(&/span&&span class=&n&&d&/span&&span class=&o&&.&/span&&span class=&n&&iteritems&/span&&span class=&p&&())&/span&
&span class=&o&&=&&/span& &span class=&p&&[(&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&),&/span& &span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'a'&/span&&span class=&p&&),&/span& &span class=&p&&(&/span&&span class=&s1&&'c'&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&]),&/span& &span class=&p&&(&/span&&span class=&s1&&'b'&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&)]&/span&
&span class=&n&&d&/span&&span class=&p&&[&/span&&span class=&s1&&'name'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&s1&&'Jack'&/span& &span class=&c1&&# 可以在字典创建之后插入新的值&/span&
&/code&&/pre&&/div&&h2&条件控制&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&a = 5
if a == 5:
print('a equals 5')
elif a == 3:
print('a equals 3')
print('no equal')
&/code&&/pre&&/div&&h2&循环&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&for i in [1, 2, 3]:
l = ['Jack', 'Harry', 'Mary']
for i, name in enumerate(l):
print(i, name)
==& 0 Jack
while a == 1:
print('Hi')
&/code&&/pre&&/div&&h2&面向对象编程&/h2&&p&Python 带有面向对象的特性,可以定义类。相比于 c++ 的类,python 要简单很多。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&class Bird(object):
def __init__(self):
self.name = &Bird&
def fly(self):
print(self.name + & & + &flys&)
class Hawk(Bird): # 继承 Bird 类
def __init__(self):
super(Hawk, self).__init__() # 调用父类方法
self.subname = &Hawk&
def fly(self): # 重新定义一个自己的方法
print(self.name + & & + self.subname + & & + &flys&)
b = Bird()
==& Bird flys
h = Hawk()
==& Bird Hawk flys
&/code&&/pre&&/div&
Python 是一门简洁的语言,如果有其他语言的编程基础,那么看下这份15分钟的总结,覆盖了最常用的 Python 特性,就能快速上手了。当然,想要熟练的写程序,15分钟是远远不够的,还需多加练习和阅读文档。# #号后面的全都是注释
# ==& 表示输出结果,注意,…
&blockquote&&i&直到前一阵子出版社的人联系我,问我愿不愿意出书&br&我才意识到自己写这个专栏已经这么久了&br&最近也老人问我,怎么入门编程,要不要报班等等&br&我是从&b&零基础&/b&开始学习的,这里分享一下我的学习过程&/i&&/blockquote&&h2&&b&关于自学和培训班&/b&&/h2&&p&其实我没有什么资格来和大家讨论这个问题,&br&因为我也是刚刚入门而已,并不能指导性的告诉大家应该怎么样&br&我只是说一下自己的看法:&br&&b&自学,不用上培训班!!!&/b&&br&首先我自己是完全没有报培训班的,所以觉得也没这个必要&br&其次,如果你想将写代码作为自己的职业,那么&b&自学&/b&是必不可少的能力&br&如果什么都得让别人拉着你,那么是不是太被动了?&/p&&p&&br&&/p&&h2&&b&兴趣&/b&&/h2&&p&我没事喜欢逛知乎,有一段时间看到了这个问题:&br&&b&利用爬虫技术能做到哪些很酷很有趣很有用的事情&/b&: &a href=&///?target=http%3A//t.cn/RptGOPx& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RptGOPx&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&觉得回答的一个个炒鸡酷炫&br&就对爬虫产生了浓厚的兴趣,&br&于是就开始了我的一路摸爬滚打&/p&&h2&&b&文本资料&/b&&/h2&&p&想学写爬虫,Python的基础知识肯定得补起来&br&这里我推荐几本我觉得很棒的&b&入门书籍&/b&&br&最好按照&b&顺序&/b&阅读,难度是&b&由浅入深&/b&的&/p&&ul&&li&&b&父与子的编程之旅&/b&: &a href=&///?target=http%3A//t.cn/R7s2ME8& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/R7s2ME8&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&这本书说的都是一些基本的概念,告诉我们编程到底是怎么一回事,初步了解Python的世界。&/li&&li&&b&笨方法学Python&/b&: &a href=&///?target=http%3A//t.cn/Rie7W7L& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/Rie7W7L&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&这本书在知乎上都被推荐烂了,但是的确是一本不可多得的好书。但最后的部分对于零基础的人来说,跨越程度有点大,如果看不懂,可以暂时跳过&/li&&li&&b&菜鸟教程 Python3教程&/b& :&a href=&///?target=http%3A//t.cn/RqM5aF8& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RqM5aF8&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&从这里,就可以完整的掌握Python这门语言的基础语法、类型、函数、面向对象...&br&这里的内容都是最基本的解释,只能告诉你一个大概。但这就是目前的我们所需要的,因为太难的,真的看不懂(比如 线程锁 迭代器 生成器...)&/li&&li&&b&简明教程&/b&: &a href=&///?target=http%3A//t.cn/RMP60Nw& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RMP60Nw&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&这相对于菜鸟教程,更加的精炼和简介,也是非常的棒!&/li&&li&廖雪峰的Python3教程: &a href=&///?target=http%3A//t.cn/RK0qGu7& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RK0qGu7&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&相对于前面的教程来说,廖大的更加深入,我当初是直接看的廖大,看到后面云里雾里,所以完全零基础的小伙伴,还是先尝试其他比较简单的好一点。&/li&&/ul&&p&上面就是我推荐的一些入门的文本资料,&br&最后三个,可以按照自己的水平阅读学习&br&也不一非要按照我推荐的顺序,&br&当然,光看是没用的,上面的例子也要&b&跟着做&/b&才能有收获&/p&&h2&&b&视频慕课&/b&&/h2&&p&有的小伙伴可能一看书就犯困,&br&更喜欢直接一点的视频,&br&我当初是书和视频一起结合着看的&br&下面推荐我上的几门慕课:&/p&&ul&&li&&b&哈佛大学公开课:计算机科学cs50&/b&: &a href=&///?target=http%3A//t.cn/RwvcReG& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RwvcReG&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&这门课对于我这种文科生来说,简直是福音!!!通过这门课,你可以了解到计算机世界的基础,为你以后的学习打下良好的基础!没看过的同学一定要去看!&/li&&li&&b&中国大学慕课:Python语言程序设计&/b& &a href=&///?target=http%3A//t.cn/R6ELBBH& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/R6ELBBH&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&这门课录制的水平很高,还有对应的在线习题,学到最后还能有证书拿,每周同步进行的话也不会有太大的压力&br&我还把每周的习题上传到Github了: &a href=&///?target=https%3A///Ehco1996/PythonPractice& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/Ehco1996/Pyt&/span&&span class=&invisible&&honPractice&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/li&&li&&b&中国大学慕课: Python网络爬虫与信息提取:&/b& &a href=&///?target=http%3A//t.cn/R6phGd9& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/R6phGd9&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&上面那门慕课老师开设的爬虫课程,很棒很详细,我学习爬虫就是跟着这里入门的!&/li&&li&&b&中国大学慕课:用Python玩转数据:&/b& &a href=&///?target=http%3A//t.cn/RSN2yYR& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RSN2yYR&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&讲了一些用Python做数据分析的基本方法,老师很有意思,不过前面的章节还涉及到一些基础的部分,可以当做再复习一遍啦&/li&&li&&b&嵩天老师的其他Python课程&/b& : &a href=&///?target=http%3A//t.cn/RptquK8& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/RptquK8&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&这名老师开设了很多Python课程,各种方向的都有,&br&其实学到这里,可以多多尝试一下,发现自己喜欢的方向&br&看看嵩老师开设的课程:&/li&&/ul&&p&&br&&/p&&figure&&img src=&/v2-0ca2abcda8cbefaec19c249_b.png& data-caption=&& data-rawwidth=&985& data-rawheight=&757& class=&origin_image zh-lightbox-thumb& width=&985& data-original=&/v2-0ca2abcda8cbefaec19c249_r.png&&&/figure&&p&&br&&/p&&h2&&b&基础掌握之后?&/b&&/h2&&p&当你觉得你已经掌握了Python的基本用法,&br&这个时候就该尝试去『写』一些小项目了,&br&不一定要自己去创造,可以去github上看看有什么适合自己的项目,&br&fork一份到本地,看看别人的代码是怎么样的&br&别人为什么这样写...&br&自己模仿着能写出差不多的东西么?&br&具体可以参考这个知乎问题:&br&&b&Python 的练手项目有哪些值得推荐&/b&?&a href=&/question/& class=&internal&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/question/2937&/span&&span class=&invisible&&2574&/span&&span class=&ellipsis&&&/span&&/a&&/p&&h2&系统的学习爬虫?&/h2&&p&这里我就推荐三份资料&/p&&ul&&li&路人甲整理的:&b&一份Python爬虫电子书&/b&: &a href=&/p/& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/p/28&/span&&span class=&invisible&&865834&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&甲哥人炒鸡nice啊!但是可能最近工作比较忙~这份资料是他辛苦整理出来的,内容很丰富!&/li&&li&&b&崔庆才的爬虫教程&/b& &a href=&///?target=http%3A///1052.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/1052.htm&/span&&span class=&invisible&&l&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&这个博主也很nice,当初我学着入门的时候也在这里参考了很多资料!&/li&&li&我的 &b&从零开始写Python爬虫&/b& 专栏 &a href=&/Ehco-python& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/Ehco&/span&&span class=&invisible&&-python&/span&&span class=&ellipsis&&&/span&&/a&&br&容我自卖自夸一下,专栏里从基础到实战都有&br&最近也把所&b&有的文章链接&/b&都汇总到导言里了:&br&可以看这里: &a href=&/p/?refer=Ehco-python& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/p/26&/span&&span class=&invisible&&673214?refer=Ehco-python&/span&&span class=&ellipsis&&&/span&&/a&&/li&&/ul&&h2&&b&系统的学习Web?&/b&&/h2&&p&这里我推荐一个超级棒的Django教程:&/p&&ul&&li&&b&追梦人物的blog:&/b& &a href=&///?target=http%3A///post/2/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/post/2/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&我的blog就是跟着这个教程不断的完善,才有了现在的效果&/li&&/ul&&p&还有一份Python Web开发的知识清单:&/p&&ul&&li&&b&python web 入坑指南:&/b& &a href=&///?target=http%3A//python-web-guide.readthedocs.io/zh/latest/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&python-web-guide.readthedocs.io&/span&&span class=&invisible&&/zh/latest/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&这我还没看完,我准备利用最后这一年上学的时间来学习一下&/li&&/ul&&h2&剩下的?&/h2&&p&全得靠你自己啦&br&一起努力吧!&/p&&p&&br&&/p&&p&每天的学习记录都会 同步更新到:&br&微信公众号: findyourownway&br&&br&知乎专栏:&a href=&/Ehco-python& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/Ehco&/span&&span class=&invisible&&-python&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&blog : &a href=&///?target=http%3A//www.ehcoblog.ml/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&www.ehcoblog.ml&i class=&icon-external&&&/i&&/a&&br&&br&Github: &a href=&///?target=https%3A///Ehco1996/Python-crawler& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/Ehco1996/Pyt&/span&&span class=&invisible&&hon-crawler&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&
直到前一阵子出版社的人联系我,问我愿不愿意出书 我才意识到自己写这个专栏已经这么久了 最近也老人问我,怎么入门编程,要不要报班等等 我是从零基础开始学习的,这里分享一下我的学习过程关于自学和培训班其实我没有什么资格来和大家讨论这个问题, 因为…
&figure&&img src=&/v2-2b1c72ed9f59_b.jpg& data-rawwidth=&1717& data-rawheight=&898& class=&origin_image zh-lightbox-thumb& width=&1717& data-original=&/v2-2b1c72ed9f59_r.jpg&&&/figure&&p&&i&这篇文章是早两年首发其他论坛的,也在知乎回答用过。&br&&/i&&/p&&p&&i&原贴地址: &/i&&a href=&/?target=http%3A//cocode.cc/t/python-flask-sqlalchemy/1884/1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python+flask+SQLAlchemy 半年自学~跳槽成功~&i class=&icon-external&&&/i&&/a& &br&&/p&&p&&i&一直有读者私信我,说这篇文章很有帮助,所以我决定再抽取前篇的资料内容在专栏里。&/i&&/p&&p&&i&&br&&/i&&/p&&h2&&b&食用指南:&/b&&br&&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& 1. 没有师傅,没有钱,但是具有一定的计算机理论基础的,还有很多时间。
&/code&&/pre&&/div&&hr&&p&&b&下面是正文:&/b&&/p&&ul&&li&总体路线: Python+Pygame+Flask+SQLAlchemy&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&主要书籍:
笨方法学Python (电子版),
Python 核心编程(电子版),
Python基础教程(纸质版),
FlaskWeb开发:基于Python的Web应用开发实战(电子版)
&/code&&/pre&&/div&&ul&&li&主要的参考网站:&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&Assignments — Problem Solving with Algorithms and Data Structures
http://interactivepython.org/runestone/static/pythonds/index.html
SQLite – Python | w3cschool菜鸟教程
http://www.w3cschool.cc/sqlite/sqlite-python.html
Python / Python 编码风格指南中译版(Google SOC) | Elias的个人主页
/Python/PythonStyleGuide
Python 的神奇方法指南 - 开源中国社区
http://www.oschina.net/question/412
用Python和Pygame写游戏-从入门到精通(目录) | 目光博客
http://eyehere.net/2011/python-pygame-novice-professional-index/
欢迎进入Flask大型教程项目! — flask mega-tutorial 1.0 documentation
/flask-mega-tutorial/
欢迎使用 Flask — Flask 0.10.1 documentation
&/code&&/pre&&/div&&p&&br&&/p&&ul&&li&扩展包来源:&/li&&/ul&&p&&a href=&/?target=http%3A//www.lfd.uci.edu/%7Egohlke/pythonlibs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lfd.uci.edu/~gohlke/pyt&/span&&span class=&invisible&&honlibs/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&/?target=http%3A///winpy_libs& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/winpy_lib&/span&&span class=&invisible&&s&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&ul&&li&其他选读:&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&25本免费的Python电子书 - 博客 - 伯乐在线
9本免费的Python编程书 - 博客 - 伯乐在线
本人的github: /dodoru
里面可以看到我的很多练习代码还有我fork 来学习的代码。
很多地方有瑕疵,大家看看了解我当时的学习进度和水平就好,
(?﹏?),凭良心说,当时我的代码不是很好,所以并不是用来模仿学习的好对象。
&/code&&/pre&&/div&&p&&/p&&p&&/p&
这篇文章是早两年首发其他论坛的,也在知乎回答用过。 原贴地址:
一直有读者私信我,说这篇文章很有帮助,所以我决定再抽取前篇的资料内容在专栏里。 食用指南: 1. 没有师傅,没有钱,但是具有一定的计算机理…
&h2&&b&1. 总体来讲,找几本靠谱的书,由浅入深,边看边练。&/b&&/h2&&blockquote&我是从去年下半年开始学习Python / ML / CV,利用每天晚上22:00- 01:00的业余时间,每天进行,几乎很少间断。&/blockquote&&h2&&b&2. 以下是我自己训练Python的一些小经验。&/b&&/h2&&p&&b&2.1 基础入门&/b&&/p&&blockquote&当然是因工作需要而学,所以有倾向性,会以Data Analysis或者现在时髦的说法叫Data Science方向为主。&br&&br&01-《a byte of python 中文版》绝对入门级,扫盲,零基础的人都可以看。当时我大概花了三天撸完,照着敲了一遍代码。稍微有点感觉了。&br&&br&02- 看斯坦福的在线教程,入门级。&a href=&///?target=http%3A//cs231n.github.io/python-numpy-tutorial/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Numpy Tutorial&i class=&icon-external&&&/i&&/a&英文好的同学可以看看,这个教程我看的不多。主要是因为自己喜欢看纸质书。&br&&br&03-同时继续夯实python语言本身,建议看《Python Cookbook 中文版》,我也时不时的会看&/blockquote&&p&&b&2.2 以上基本概念弄熟练后。接下来看你要做什么了?选个方向。&/b&&/p&&ul&&li&1、&b&Web开发方向&/b&&/li&&/ul&&blockquote&那么建议看简单的框架flask,那么推荐《Flask Web开发:基于Python的Web应用开发实战》。(我只扫一眼目录,因主要方向不在此处)&/blockquote&&ul&&li&2、&b&数据分析方向&/b&&/li&&/ul&&blockquote&建议看《利用Python进行大数据分析》,非常棒!强烈建议看。主要讲Pandas库,讲数据分析。很多金融巨头,用Python进行数据分析。引用大神Kirat的话说,“&b&&i&它正在快速代替主流金融机构中使用的工具和语言,并成为事实上的标准&/i&&/b&”。我花了1个月左右时间,一个字一个字啃完。同时边敲代码。&/blockquote&&ul&&li&3、&b&科学计算方向&/b&&/li&&/ul&&blockquote&建议看《python_sci用python进行科学计算》。&/blockquote&&ul&&li&4、&b&AI的机器学习方向&/b&&/li&&/ul&&blockquote&建议看《Hands-on ML with Scikit-learn and TensorFlow》,还没有中文版,我在看。若有同学需要中文版,可以告知我,我视需求而定,是否将其翻译成中文版。&/blockquote&&ul&&li&5、&b&AI的计算机视觉方向&/b&&/li&&/ul&&blockquote&建议看《Python计算机视觉编程》,我还在看,虽然看得不多。&/blockquote&&ul&&li&6、&b&网络爬虫方向&/b&&/li&&/ul&&blockquote&这里不多作介绍。&/blockquote&&p&&b&2.3
夯实:若有同学对【数据分析方向】感兴趣&/b&&/p&&blockquote&这里强烈推荐Yupeng Jiang博士撰写的《三天搞定Python基本功》,只用三天时间可以了解Python数据分析的广度和所涉及的概念,是诚意之作,十分难得!因原文是用英文写成,给英国伦敦大学学院的本科生、研究生上课用的。我将其翻译成了中文,便于自己将来快速复习用。在征得jiang博士的同意后,分享给大家。链接:&/blockquote&&ul&&li&&a href=&///?target=https%3A///MurphyWan/Python-first-Practice/blob/master/README.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《三天搞定Python基础概念之第一天》Day1&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A///MurphyWan/Python-first-Practice/blob/master/D2_of_3Day_DoneWithPython.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《三天搞定Python基础概念之第二天》Day2&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A///MurphyWan/Python-first-Practice/blob/master/D3_of_3Day_DoneWithPython.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《三天搞定Python基础概念之第三天》 Day3&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&英文原版可见链接:&a href=&/p/& class=&internal&&三天搞定Python基本功&/a&&/p&&p&&b&2.4.
进阶:顺着【数据分析】这个方向,把金融类的数据分析搞透彻。&/b&&/p&&blockquote&在看完《利用Python进行数据分析》之后,强烈建议看《Python 金融大数据分析》一书。&/blockquote&&p&&br&&/p&&p&第一次在知乎上回复。说的不好,请见谅。&/p&&p&日晚&/p&
1. 总体来讲,找几本靠谱的书,由浅入深,边看边练。我是从去年下半年开始学习Python / ML / CV,利用每天晚上22:00- 01:00的业余时间,每天进行,几乎很少间断。2. 以下是我自己训练Python的一些小经验。2.1 基础入门当然是因工作需要而学,所以有倾向性,…
&figure&&img src=&/v2-466cd223ceed0f4479bcfdff84fde5ee_b.jpg& data-rawwidth=&1280& data-rawheight=&1024& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-466cd223ceed0f4479bcfdff84fde5ee_r.jpg&&&/figure&&p&今日文章来源:&a href=&/?target=https%3A//juejin.im/post/59bccd996fb9a00a& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python常用知识点一二&i class=&icon-external&&&/i&&/a&&/p&&h2&&b&写在前面&/b&&/h2&&blockquote&Python是一门解释型的、动态型的OOP语言,结识Python的这几年来,其语法的简洁、结构的条理性深刻的吸引了我。下面是我总结出来的一些Python常用知识点。&/blockquote&&h2&&b&列表碾平式&/b&&/h2&&p&需求: 将[[1,2],[3,4]] 转换为[1,2,3,4],具体实现有以下几种方法&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&test_list = [[1,2],[3,4]]
1. from itertools import chain
list(chain.from_iterable(test_list))
结果:[1, 2, 3, 4]
2. from itertools import chain
list(chain(*test_list))
结果:[1, 2, 3, 4]
3. sum(test_list, [])
结果:[1, 2, 3, 4]
4. [x for y in test_list for x in y]
结果:[1, 2, 3, 4]
5. 万能方法(递归)
func = lambda x: [y for t in x for y in func(t)] if type(x) is list else [x]
func(test_list)
结果:[1, 2, 3, 4]
&/code&&/pre&&/div&&p&PS: 项目中,难免会有类似的需求,对于结构嵌套一致的情况,上述的1,2,3,4方法都可以很好的解决(不建议用for循环嵌套的方式,那是最low的方法,没有之一);对于结构嵌套不一致的情况,第5种方法就派上了用场,其采用了递归的思想,堪称万能的方法,屡试不爽。项目中,大家可以根据实际应用场景来挑选最适合自己的方法。肚中有粮,心中不慌;大家可以把上述方法都记下来,以做到有的放矢。&/p&&h2&&b&三目操作符&/b&&/h2&&p&对于Python的三元表达式,想必大家对if else都不会感到陌生,但是对and or操作想必是另一种感觉了,不过大家对其他语言的? :应该不会陌生,没错,这次的主角and or就和? :有着异曲同工之妙。&/p&&p&代码参考:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&1 == 1 and 2 or 3
1 == 2 and 2 or 3
&/code&&/pre&&/div&&p&PS:习惯于if else的同学偶尔用下and or是不是会给人耳目一新的感觉。&/p&&h2&&b&and or 分开来用&/b&&/h2&&ul&&li&[x] and 用法如下:&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&1 and 2 and 3
1 and 2 and ''
'' and 2 and 0
PS:如果都为真则返回最后一个值,如果其中某些值为假,则返回第一个为假的值
&/code&&/pre&&/div&&ul&&li&[x] or 用法如下&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&1 or '' or 0
'' or 0 or []
PS:如果都为假返回最后一个值,如果其中某些值为真,则返回第一个为真的值
&/code&&/pre&&/div&&p&使用场景:在项目中我们经常会有这样的需求,在将一个字典更新之后还想要返回更新后的字典,这是我们就可以这样写:dic = dic1.update(dic2) or dic1&/p&&h2&&b&列表推导式&/b&&/h2&&p&需求:将[1,2,3]中的每一项都加1&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&good: [x+1 for x in [1,2,3]]
def add_list(goal_list):
tmp_list = []
for x in goal_list:
tmp_list.append(x+1)
&/code&&/pre&&/div&&p&PS: 列表推导式底层是用C实现的,其执行速度要比for循环快好多&/p&&h2&&b&vars() 用法&/b&&/h2&&p&代码参考:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&```
def func(a, b, c):
print vars()
执行func(1, 2, 3)
输出:{&a&:1,&b&:2,&c&:3}
PS: vars()的值为字典,其键值对来源于当前作用域的所有变量。
&/code&&/pre&&/div&&p&使用场景:在调用他人接口或方法时,需要将传入的参数打印以记录日志,此刻vars()便派上用场了。&/p&&h2&&b&偏函数之partial&/b&&/h2&&p&代码示例:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import functools
def add(a, b):
return a + b
plus3 = functools.partial(add, 3)
plus5 = functools.partial(add, 5)
&/code&&/pre&&/div&&p&实际使用心得:&/p&&blockquote&之前做对象存储的项目中,我需要同时去调用三个一样的接口(大部分参数一样)下面是我的部分代码,供大家参考&/blockquote&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&my_thread = functools.partial(myThread, dic, zone_id, start, end, customer_id)
my_thread1 = my_thread(&day&, &gets&, &2&)
my_thread1 = my_thread(&day&, &original_traffic&, &3&)
&/code&&/pre&&/div&&p&使用场景:&br&当我们需要同时去调用一个函数,并且发现大部分参数一致的时候,便可以采取上述方法,一来代码简洁,二来可读性高。&/p&&h2&&b&Python搭建简易服务&/b&&/h2&&ul&&li&Python搭建简易邮件服务器:python -m smtpd -n -c DebuggingServer localhost:1025&/li&&li&Python搭建简易web服务器:&/li&&ul&&li&Python2: python -m SimpleHTTPServer port&/li&&li&Python3: python -m http.server port&/li&&/ul&&li&Python搭建简易ftp服务&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&pip install pyftpdlib
python -m pyftpdlib -p 21
ftp://localhost:21
&/code&&/pre&&/div&&h2&&b&遍历字典&/b&&/h2&&p&在项目中遍历字典是很常见的需求,下面介绍下常用的方法并做下比较:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&dic = {'name': 'peter', 'age': 27}
1. for key, value in dic.items():
print key, value
2. for key, value in dic.iteritems():
print key, value
&/code&&/pre&&/div&&p&PS:&br&iteritems和items的区别在于iteritems采用了生成器的原理,只有在需要的时候才会把值生成,其之间的区别类似于range和 xrange;readline和 xreadline&/p&&h2&&b&内存管理&/b&&/h2&&p&Python的内存管理主要分为引用计数和垃圾回收机制两大部分,且看下面代码:&/p&&ul&&li&[ ] 内存分配:&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&a = 1
---------------------
&/code&&/pre&&/div&&p&PS: 在Python中,整数和短小的字符,Python都会缓存这些对象,以便重复使用。当我们创建多个等于1的引用时,实际上是让这些引用指向了同一个对象。&/p&&ul&&li&[ ] 引用计数:&/li&&/ul&&p&在Python中,所谓引用计数(reference count)是指所有指向该对象的引用的总数;&/p&&p&我们可以使用sys包中的getrefcount(),来查看某个对象的引用计数。需要注意的是,当使用该函数查看某个对象的引用计数时,实际上是临时创建了该对象的一个新的引用,所有使用getrefcount()所得到的结果,会比期望的值多1。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from sys import getrefcount
aa = 'test refcount' print(getrefcount(a))
print(getrefcount(a))
&/code&&/pre&&/div&&p&PS: 由于上述原因,两个getrefcount()将返回2和3,并不是期望的1和2.&/p&&ul&&li&[ ] 引用减少&/li&&/ul&&p&引用减少大致分为两类:&/p&&ul&&ul&&li&指向该对象的引用指向了其他对象&/li&&/ul&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from sys import getrefcount
aa = 'test refcount'
print(getrefcount(aa))
print(getrefcount(aa))
&/code&&/pre&&/div&&ul&&ul&&li&使用del关键字显示的删除某个引用&/li&&/ul&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from sys import getrefcount
aa = 'test refcount'
print(getrefcount(aa))
print(getrefcount(aa))
&/code&&/pre&&/div&&ul&&li&[ ] 垃圾回收&/li&&/ul&&p&不断的创建对象,如果不及时销毁的话,那Python的体积会越来越大,再大的内存也会有耗完的时候;不用像C语言那样,需要手动的去管理内存、Python已经帮我们做好了(Python的垃圾回收机制),你只需要去关心你的业务逻辑即可,其他的都交给Python来处理。&/p&&p&从原理上讲,当Python中某个对象的引用计数降为0时,该对象就应该被回收。但是频繁的启动垃圾回收机制毕竟是个很耗时的问题;因此Python只有在特定条件下(当Python中被分配对象和取消分配对象的次数之间的差值达到某个阈值时),Python会自动启动垃圾回收机制。&/p&&p&我们可以通过gc模块的get_threshold()方法,查看该阈值:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import gc
print(gc.get_threshold())
&/code&&/pre&&/div&&p&该方法会返回(700, 10, 10),后面的俩10是与分代回收相关的,稍后讲解。700便是垃圾回收机制启动的阈值。可以通过gc模块中的set_threshold()方法重新设定该值。&/p&&p&当然了,我们也可以手动启动垃圾回收机制,使用gc.collect()即可。&/p&&ul&&li&[ ] 分代回收&/li&&/ul&&p&Python同时采用了分代回收的机制,设想一下:存活越久的对象、越不可能是垃圾对象。程序在运行时,往往会产生大量的临时对象,程序结束之后,这些临时对象的生命周期也就随之告一段落。但有一些对象会被长期占用,垃圾回收机制在启动的时候会减少扫描到他们的频率。&/p&&p&Python将所有对象分为0,1,2三代。所有新创建的对象都是0代,当垃圾回收机制在启动多次0代机制并扫描到他们的时候,这些对象如果依然存活在内存的话,他们就会被归入下一代对象,以此类推。&/p&&p&刚才上面所提到的(700, 10, 10)三个参数后面的俩10所代表的意思是:每10次0代垃圾回收,会配合1次1代的垃圾回收;而每10次1代的垃圾回收会配合1次的2代垃圾回收。&/p&&p&当然我们同样可以使用set_threshold()来调整此策略的比例,比如对1代对象进行更频繁的扫描。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import gc
gc.set_threshold(700, 5, 10)
&/code&&/pre&&/div&&h2&&b&新式类、经典类&/b&&/h2&&ul&&li&[ ] 新式类: 显示的继承了object的类&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&class A(object):
class B(A):
class C(A):
class D(B, C):
if __name__ == '__main__':
print 'attr = ', d.attr
# attr = 3
&/code&&/pre&&/div&&ul&&li&[ ] 经典类:没有继承自object的类&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&class A():
class B(A):
class C(A):
class D(B, C):
if __name__ == '__main__':
print 'attr = ', d.attr
# attr = 1
&/code&&/pre&&/div&&p&PS: 通过以上代码的输出结果可以看出,新式类会广度搜索,也就是一层层的向上搜索;经典类是深度优先,即遇到一个超类点就向上搜索。&/p&&h2&&b&装饰器&/b&&/h2&&p&Python的装饰器被称为Python的语法糖,哪里需要粘哪里。&/p&&p&代码示例:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&@makeh1
@makeeitalic
def say():
return 'Peter'
我们希望输出结果为:&h1&&i&Peter&/i&&/h1&
&/code&&/pre&&/div&&p&去看看&a href=&/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fdocs.python.org%252F2%252Freference%252Fcompound_stmts.html%2523function& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&i class=&icon-external&&&/i&&/a&,答案就看下面:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def makeh1(func):
def wrp():
return &&h1&& + func() + &&/h1&&
return wrp
def makeeitalic(func):
def wrp():
return &&i&& + func() + &&/i&&
return wrp
@makeeitalic
def say():
return 'Hello Peter'
print say()
输出:&h1&&i&Hello Peter&/i&&/h1&
&/code&&/pre&&/div&&p&实际应用场景:&/p&&p&使用过django的小伙伴想必都用过login_required装饰器,但是如果用户没登录的话login_required会重定向到登录页面;在做web开发的过程中,我们会经常用&br&ajax异步提交数据到后台,这时如果再继续使用原有的login_required装饰器肯定是不行了(该装饰器不会重定向到登录页面,ajax也没有任何返回结果),下面我们改变下原有代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from django.shortcuts import HttpResponse
import json
def is_authenticat(func):
def wrp(req, **kwargs):
if req.user.is_authenticated():
return func(req, **kwargs)
json_str = {'status': 0, 'msg': u'请登录'}
return HttpResponse(json.dumps(json_str), content_type='application/json')
return wrp
&/code&&/pre&&/div&&p&上述代码便很好的解决了问题,也算是对Python装饰器的一个很好的使用场景。&/p&&h2&写在结语&/h2&&blockquote&Python的奥妙远不止于此&br&Python的深度还需要继续探索&br&以上就是平时工作中所总结出来的常用的知识点&br&希望对大家以后的工作会有所帮助&/blockquote&&p&——————————————————————&/p&&p&为了方便大家学习,我建立了一个马哥Python交流群,目前群内已经有2000多个小伙伴,学习寂寞的小伙伴不妨一起来玩~群号:&/p&&p&你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容: &/p&&p&&a href=&/?target=http%3A///73198.html%3FPython_wenzhang_zhihu_jinke_buronghushidepythonxiaojiqiao_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【超全整理】《Python自动化全能开发从入门到精通》笔记全放送&i class=&icon-external&&&/i&&/a&&/p&
今日文章来源:写在前面Python是一门解释型的、动态型的OOP语言,结识Python的这几年来,其语法的简洁、结构的条理性深刻的吸引了我。下面是我总结出来

我要回帖

更多关于 编写一个程序将 的文章

 

随机推荐