零根底python入门教程:python666.cn
各人好,欢送来到 Crossin的编程教室 !
Python 里有个小彩蛋:
在 Python Shell 里输入 import this
那段话被称做“ Python 之禅”( The Zen of Python),它列举了一些 Python 所推崇的理念,好比:
漂亮胜于丑恶
明白胜于隐晦
简单胜于复杂
可读性很重要
不要忽略错误
面临不确按时, 回绝揣测
如今做好过不做,但自觉脱手不如不做
若是你的实现很难说清晰,那是个坏设法;反之亦然
漂亮胜于丑恶
明白胜于隐晦
展开全文
简单胜于复杂
可读性很重要
不要忽略错误
面临不确按时, 回绝揣测
如今做好过不做,但自觉脱手不如不做
若是你的实现很难说清晰,那是个坏设法;反之亦然
当你学完根底,能够写点代码的时候,可能经常觉得本身的实现很别扭。有经历的法式员会一眼看出你的代码出自一个初学者之手。那就是我们经常说的,代码不敷 pythonic。
所谓 pythonic,我觉得包罗两方面:一是代码的气概 契合 Python 的特点,能合理利用 Python 的“语法糖”;二是代码 简洁漂亮,不变性高,可读性好,便于敬服和修改。所谓“Python 之禅”其实不仅限于 Python,良多理念是编程普适的。
好比来实现对一个列表中元素的遍历拜候,我见过良多次有人那么写:
fori inrange(len(lst)):
print(lst[i])
如许的同窗很可能是之前有过 C/C++ 或 Java 的经历。那么写功用上没问题,但不敷简洁,不敷 pythonic。更好的实现体例:
fori inlst:
print(i)
那种不影响功用,但能简化法式、进步可读性的语法,我们称之为“ 语法糖”( Syntactic sugar)。Python 中类似的例子还有很多,来举几个:
1、交换两个变量的值,通俗写法:
temp = a
a = b
b = temp
pythonic 写法:
a, b = b, a
2、类似的解包(unpacking)用法还能够实现多个返回值的函数。通俗写法:
deffunc(a, b):
result = [b, a]
returnresult
r = func(a, b)
x = r[ 0]
y = r[ 1]
pythonic 写法:
deffunc(a, b):
returnb, a
x, y = func(a, b)
3、读写文件,通俗写法:
f = open( 'filename.txt')
text = f.read
print(text)
f.close
pythonic 写法:
withopen( 'filename.txt') asf:
forline inf:
print(line)
with 的益处是即便出错,也会帮你封闭文件。
4、拼接字符串,通俗写法:
letters = ['h', 'e', 'l', 'l', 'o']
s = ''
for l in letters:
s += l
print(s)
pythonic 写法:
print(''.join(letters))
5、关于前面遍历列表的例子,若是你想带上索引,能够那么写:
fori, elem inenumerate(lst):
print(i, elem)
遍历字典项:
forkey, value indct.items:
print(key, value)
6、取出列表中大于 0 的元素,生成新列表。通俗写法:
new_lst = []
fori inlst:
ifi 0:
new_lst.append(i)
pythonic 写法:
new_lst = [i fori inlst ifi 0]
那个被称为“ 列表解析式”( List comprehension,中文翻译说法有良多),能够说长短常 pythonic 的一个用法了。
更进一步,若是数据量很大,而你对新列表仅仅是遍历操做,其实不需要一个列表对象,能够接纳 生成器:
new_lst = (i fori inlst ifi 0)
fori innew_lst:
print(i)
如许会更节省资本,提拔施行效率。
7、判断一个值能否为True、能否为空列表、能否是None,通俗写法:
ifx == True:
pass
iflen(y) == 0:
pass
ifz == None:
pass
pythonic 写法:
ifx:
pass
ifnoty:
pass
ifz isNone:
pass
8、根据键名获取字典中对应的值,通俗写法:
value = dct[key]
如许的问题在于,若是 key 不存在,代码就报错跳出。于是你不能不增加更多的判断。
pythonic 写法:
value = dct.get(key, 0)
改用 get 办法,不存在时会得到 None,或者指定的默认值(那里是 0)。
篇幅所限,以上仅仅是一些比力具有代表性的例子。凡是事要有度,过火逃求 pythonic 的写法也可能招致代码的可读性下降。好比有人喜好把良多功用写在一个语句中,那反倒不 pythonic 了。所以,我们需要有一些设想的原则,但又没必要拘泥于详细的形式,不然就钻入牛角尖了。
那么关于进修者来说,若何才气写出更 pythonic 的代码呢?说到底仍是个经历积累的过程,菜鸟不成能看本书、上个课就一夜酿成老鸟,但只要对峙得够久就能够。我那边给几个定见:
别的,关于代码自己, Python 有一套书写标准,叫做 PEP8。里面约定了良多细节,好比哪里该空格、正文怎么写、什么处所该换行、若何定名等等。网上搜一下就能找到,还有中文版,务必找时间看一看。
最初,留2个小功课:
碰运气能不克不及写出你认为 pythonic 的代码,欢送在留言平分享。
感激转发和点赞的列位~
给将来的法式猿
如需领会 付费精品课程及 教学 答疑办事
请在 Crossin的编程教室内回复: 666