作为一门优秀的脚本语言,Python在语法层面提供了很多好玩又实用的语法,俗称语法糖
,正确的使用这些技巧能让代码看起来更优雅,更Pythonic,这里列举几个。
#!/usr/bin/env python3
def main():
animals = ['cat','dog','bird','pig']
if "dog" in animals:
print("dog在列表里")
else:
print("dog不在列表里")
if __name__ == '__main__':
main()
以上代码明显代码行数比较多,可以简化为如下写法
#!/usr/bin/env python3
def main():
animals = ['cat','dog','bird','pig']
print("dog在列表里") if "dog" in animals else print("dog不在列表里")
if __name__ == '__main__':
main()
先看一段代码:
#!/usr/bin/env python3
def main():
flag = False
animals = ['cat','dog','bird','pig']
for o in animals:
if o == "dog":
flag = True
break
if flag == True:
print("dog在列表里")
if __name__ == '__main__':
main()
代码很简单,需要使用for循环执行一段逻辑,如果命中某个条件,则使用一个变量flag做下标记,并且终止for循环,循环结束之后,判断flag是否等于True来执行另一段逻辑。这种场景,借助了一个额外的变量,比较啰嗦,在Python里有个更优雅的写法。
#!/usr/bin/env python3
def main():
animals = ['cat','dog','bird','pig']
for o in animals:
if o == "dog":
break
else:
print("dog不在列表里")
if __name__ == '__main__':
main()
这段代码的意思就是,for循环执行过程中,如果遇到了break语句,则退出for循环之后,就不再执行else部分的代码。
打开文件,遍历文件,然后再关闭文件句柄,我们一般会这么写
#!/usr/bin/env python3
def main():
f = open("a.txt")
try:
for line in f:
print(line)
finally:
f.close()
if __name__ '__main__':
main()
上述写法需要自己去调用close方法,保证句柄被正常释放。
使用python中的with方法,就不用显示的去调用close了,并且即使中间出现异常,也可以。
#!/usr/bin/env python3
def main():
with open("a.txt") as f:
for line in f:
print(line)
if __name__ '__main__':
main()
注意:实际上with方法并不是帮你调用了close方法,而是调用了with返回对象的
__exit__()
方法。
如果一个类实现了close()方法,就可以借助with和contextlib.closing()帮你自动调用close函数。
#!/usr/bin/env python3
import contextlib
class Request(object):
def __init__(self):
pass
def do(self):
print("do something")
def close(self):
print("close")
def main():
with contextlib.closing(Request()) as r:
r.do()
if __name__ == '__main__':
main()
不定期更新中…