Python中常见的Pythonic写法有哪些

Python中常见的Pythonic写法有哪些

小编给大家分享一下Python中常见的Pythonic写法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

0. 程序必须先让人读懂,然后才能让计算机执行。

“Programs must be written for people to read, and only incidentally for machines to execute.”

Python中常见的Pythonic写法有哪些

1. 交换赋值

##不推荐
temp=a
a=b
b=a

##推荐
a,b=b,a#先生成一个元组(tuple)对象,然后unpack

2. Unpacking

##不推荐
l=['David','Pythonista','+1-514-555-1234']
first_name=l[]
last_name=l[1]
phone_number=l[2]

##推荐
l=['David','Pythonista','+1-514-555-1234']
first_name,last_name,phone_number=l
#Python3Only
first,*middle,last=another_list

3. 使用操作符in

##不推荐
iffruit=="apple"orfruit=="orange"orfruit=="berry":
#多次判断

##推荐
iffruitin["apple","orange","berry"]:
#使用in更加简洁

4. 字符串操作

##不推荐
colors=['red','blue','green','yellow']

result=''
forsincolors:
result+=s#每次赋值都丢弃以前的字符串对象,生成一个新对象

##推荐
colors=['red','blue','green','yellow']
result=''.join(colors)#没有额外的内存分配

5. 字典键值列表

##不推荐
forkeyinmy_dict.keys():
#my_dict[key]...

##推荐
forkeyinmy_dict:
#my_dict[key]...

#只有当循环中需要更改key值的情况下,我们需要使用my_dict.keys()
#生成静态的键值列表。

6. 字典键值判断

##不推荐
ifmy_dict.has_key(key):
#...dosomethingwithd[key]

##推荐
ifkeyinmy_dict:
#...dosomethingwithd[key]

7. 字典 get 和 setdefault 方法

##不推荐
navs={}
for(portfolio,equity,position)indata:
ifportfolionotinnavs:
navs[portfolio]=
navs[portfolio]+=position*prices[equity]
##推荐
navs={}
for(portfolio,equity,position)indata:
#使用get方法
navs[portfolio]=navs.get(portfolio,)+position*prices[equity]
#或者使用setdefault方法
navs.setdefault(portfolio,)
navs[portfolio]+=position*prices[equity]

8. 判断真伪

##不推荐
ifx==True:
#....
iflen(items)!=:
#...
ifitems!=[]:
#...

##推荐
ifx:
#....
ifitems:
#...

9. 遍历列表以及索引

##不推荐
items='zeroonetwothree'.split()
#method1
i=
foriteminitems:
printi,item
i+=1
#method2
foriinrange(len(items)):
printi,items[i]

##推荐
items='zeroonetwothree'.split()
fori,iteminenumerate(items):
printi,item

10. 列表推导

##不推荐
new_list=[]
foritemina_list:
ifcondition(item):
new_list.append(fn(item))

##推荐
new_list=[fn(item)foritemina_listifcondition(item)]

11. 列表推导-嵌套

##不推荐
forsub_listinnested_list:
iflist_condition(sub_list):
foriteminsub_list:
ifitem_condition(item):
#dosomething...
##推荐
gen=(itemforslinnested_listiflist_condition(sl)\
foriteminslifitem_condition(item))
foritemingen:
#dosomething...

12. 循环嵌套

##不推荐
forxinx_list:
foryiny_list:
forzinz_list:
#dosomethingforx&y

##推荐
fromitertoolsimportproduct
forx,y,zinproduct(x_list,y_list,z_list):
#dosomethingforx,y,z

13. 尽量使用生成器代替列表

##不推荐
defmy_range(n):
i=
result=[]
whilei<n:
result.append(fn(i))
i+=1
returnresult#返回列表

##推荐
defmy_range(n):
i=
result=[]
whilei<n:
yieldfn(i)#使用生成器代替列表
i+=1
*尽量用生成器代替列表,除非必须用到列表特有的函数。

14. 中间结果尽量使用imap/ifilter代替map/filter

##不推荐
reduce(rf,filter(ff,map(mf,a_list)))

##推荐
fromitertoolsimportifilter,imap
reduce(rf,ifilter(ff,imap(mf,a_list)))
*lazyevaluation会带来更高的内存使用效率,特别是当处理大数据操作的时候。

15. 使用any/all函数

##不推荐
found=False
foritemina_list:
ifcondition(item):
found=True
break
iffound:
#dosomethingiffound...

##推荐
ifany(condition(item)foritemina_list):
#dosomethingiffound...

16. 属性(property)

##不推荐
classClock(object):
def__init__(self):
self.__hour=1
defsetHour(self,hour):
if25>hour>:self.__hour=hour
else:raiseBadHourException
defgetHour(self):
returnself.__hour

##推荐
classClock(object):
def__init__(self):
self.__hour=1
def__setHour(self,hour):
if25>hour>:self.__hour=hour
else:raiseBadHourException
def__getHour(self):
returnself.__hour
hour=property(__getHour,__setHour)

17. 使用 with 处理文件打开

##不推荐
f=open("some_file.txt")
try:
data=f.read()
#其他文件操作..
finally:
f.close()

##推荐
withopen("some_file.txt")asf:
data=f.read()
#其他文件操作...

18. 使用 with 忽视异常(仅限Python 3)

##不推荐
try:
os.remove("somefile.txt")
exceptOSError:
pass

##推荐
fromcontextlibimportignored#Python3only

withignored(OSError):
os.remove("somefile.txt")

19. 使用 with 处理加锁

##不推荐
importthreading
lock=threading.Lock()

lock.acquire()
try:
#互斥操作...
finally:
lock.release()

##推荐
importthreading
lock=threading.Lock()

withlock:
#互斥操作...

以上是“Python中常见的Pythonic写法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-12-28 22:18:47
收藏
分享
海报
0 条评论
46
上一篇:SPSS数据分析的主要步骤是什么 下一篇:Python中有哪些NLP库
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码