原文来自Crossin的编程教室: https://mp.weixin.qq.com/s/efdz4pRVliKASurmLogMIw
1,交换两个变量的写法:
普通:temp = a
a = b
b = temp
pythonic: a, b = b, a
2,类似的解包(unpacking)用法还可以实现多个返回值的函数
普通:
def func(a,b):
result = [b, a]
return result
r = func(a, b)
x = r[0]
y = r[1]
pythonic的写法:
def func(a, b):
return b, a
x, y = func(a, b)
3, 读文件,
f = open('filename.txt')
text = f.read()
print(text)
f.close()
pythonic 写法:
with open('filename.txt')
for line in f:
print(line)
with的好处是即使出错,也会帮你关闭文件。
4,拼接字符串,普通写法:
letters = ['h', 'e', 'l', 'l', 'o']
s = ''
for l in letters:
s += l
print(s)
pythonic 写法:
print(''.join(letters))
5, 关于前面遍历列表的例子,如果你想带上索引,可以这么写:
for i, elem in enumerate(lst):
print(i, elem)
for key, value in dct.items():
print(key, value)
6, 取出列表中大于0的元素,生成新列表。普通写法:
new_lst = []
for i in lst:
if i > 0:
new_list.append(i)
pythonic写法:
new_lst = [i for i in lst if i > 0]
这个被称为“列表解析式”(List comprehension,中文翻译说法有很多),可以说是非常 pythonic 的一个用法了。
更进一步,如果数据量很大,而你对新列表仅仅是遍历操作,并不需要一个列表对象,可以采用生成器:
new_lst = (i for i in lst if i > 0)
for i in new_lst:
print(i)
7、判断一个值是否为True、是否为空列表、是否是None,普通写法:
if x == True:
pass
if len(y) == 0:
pass
if z == None:
pass
pythonic 写法:
if x:
pass
if not y:
pass
if z is None:
pass
8、根据键名获取字典中对应的值,普通写法:
value = dct[key]
这样的问题在于,如果 key
不存在,代码就报错跳出。于是你不得不增加更多的判断。
pythonic 写法:
value = dct.get(key, 0)
改用 get
方法,不存在时会得到 None,或者指定的默认值(这里是 0)。
总之学习之路漫长,多写, 多看, 多搜