Pythonic是开发者们在写python代码过程中总结的编程习惯 , 崇尚优雅、明确、简单 。就好比中文笔画 , 有先后顺序 , 最符合文字书写的习惯 。
因为是习惯 , 不是江湖规则 , 所以你大可不必遵守pythonic , 但如果你想成为python高手 , 最好是养成这个习惯 。
对比其他语言我们能直观看出pythonic风格的特点 , 比如写一个简单循环 。
在JAVA里这样的:
【Pythonic风格代码有什么好处?附12个代码实例】for index in (index; index < items.length ; index++) { item = items[index]; ... now do something }尝试用python来写循环 , 则非常简洁易懂:
for item in items: item.perform_action()想要更加pythonic , 用生成器表达式来写循环:
(item.some_attribute for item in items)这样的写法其实已经接近自然语言 , 一眼能看出代码意思 。
如果你在Python IDE中输入import python , 则会看到下面一首诗:

文章插图
美胜于丑 , 简胜于繁 , 这就是Python哲学 。
有一本书《effctive python》里面讲到蛮多pythonic的写法 , 下面列出一些常见的代码 。
1、用列表推导式来取代map、filtermap、filter需要编写额外的lambda函数 , 用起来比较复杂 , 而且效率也不高 。
列表推导式则非常简洁 , 通过循环创建列表 。
# 任务:找到列表中可以被2整除的数 , 并作二次方运算 。# 非pythonic方法a = [1,2,3,4,5,6,7,8,9,10]result = map(lambda x: x**2 ,filter(lambda x: x%2==0,a))# pythonic方法a = [1,2,3,4,5,6,7,8,9,10]result = [x**2 for x in a if x%2==0]2、用生成器表达式来代替数据量较大的列表推导列表推导式虽然简洁 , 但是不适合大数据量的生成 , 因为可能会把内存占满 。这时就要用到生成器表达式 , 它返回生成器 , 基本不占用内存 。# 任务:对十亿条数据进行求平方根操作# 非pythonic方法a = [1,2,3,4,5,6,7,8,9,10] # 假装这里有十亿个数字result = [x**0.5 for x in a]# pythonic方法a = [1,2,3,4,5,6,7,8,9,10]# 假装这里有十亿个数字result = (x**0.5 for x in a)3、尽量使用enumerateenumerate可以把迭代器包装成生成器 , 每次遍历时 , 会同时列出数据和数据下标 。# 任务:打印列表中每个元素的索引# 非pythonic方法a = ['Apple','banana','orange']for i in range(len(a)): print(a[i],':',i)# pythonic方法a = ['apple','banana','orange']for i,j in enumerate(a): print(i,':',j)4、使用with方法处理文件with语句提供一个有效的机制 , 让代码更简练 , 同时在异常产生时 , 清理工作更简单 。# 任务:读取一个txt文件# 非pythonic方法f = open("some_file.txt")try: data = f.read() # 其他文件操作..finally: f.close()# pythonic方法with open("some_file.txt") as f: data = f.read() # 其他文件操作...5、使用map函数zip() 函数用于将可迭代的对象作为参数 , 将对象中对应的元素打包成一个个元组 , 然后返回由这些元组组成的可迭代对象 。# 任务:对比两个列表相同索引位置元素的大小 , 输出较大值# 非pythonic方法a = [1,5,7]b = [2,4,6]for i in range(len(a)): if a[i] > b[i]: print(a[i]) else: print(b[i])# pythonic方法a = [1,5,7]b = [2,4,6]for i,j in zip(a,b): if i > j: print(i) else: print(j)
推荐阅读
- css加载loading效果的片段
- Google公布程序员一天代码量!你猜对了么?
- 微软开放AI安全风险评估工具Counterfit源代码
- 教你一段代码实现批量重命名
- 两个方法干掉代码中那些复杂的if-else
- 500的图甲方竟然给了3500!新国潮风格甲方最爱
- 今年初冬最时尚的穿搭女?春季穿搭女
- 穿衣搭配|女人的穿衣风格:“时尚不落幕,经典永相随”
- 介绍一个Python 包,几行代码可实现 OCR 文本识别
- 如何使用Limelighter生成伪造代码签名
