Python中常见的Pythonic写法有哪些
Python中常见的Pythonic写法有哪些
小编给大家分享一下Python中常见的Pythonic写法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
0. 程序必须先让人读懂,然后才能让计算机执行。
“Programs must be written for people to read, and only incidentally for machines to execute.”
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写法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...