Python是一门非常灵活的语言,很多语法是其他语言所没有的,特别是对于那些从C、Java等语言转Python的人来说,很容易跟上C、Java等语言都是用来写Python的。对于初学者来说,如果对Python语言的理解不够透彻,就会写出非常冗余的代码。本文主要介绍几个简单的技巧,让你写出更Pythonic的Python代码。变量交换Pythonic表示法a,b=b,通用表示法tmp=a;一=b;b=tmp;循环区间元素#生成器和列表节省更多内存#range(start,end,step)#[start,end)包括开始但不包括结束foriinrange(1,1000,2)#python3foriinrange(6)#python3foriinxrange(6)#python2在Python2中,有range和xrange两种写法,xrange是生成器写法更节省内存。Python3中的range等同于Python2中的xrange。生成器只有在使用的时候才会动态生成,而且只能使用一次,比如range(1000000)。在Python2中,会在内存中生成100万个元素的列表,而在Python3中,不会生成列表,而是Generator,占用内存非常少。如果你还在使用Python2,建议使用xrange而不是rangeJavafor(inti=start;i>>type(fib(3))>>>fornuminfib(3):...print(num)。..112defodd():print('step1')yield1print('step2')yield3print('step3')yield5gen=odd()print(next(gen))print(next(gen))print(next(gen))indexPythonic写法num_list=[1,4,9]fori,valinenumerate(num_list):print(i,'-->',val)正常写法num_list=[1,4,9]foriinrange(len(num_list))print(i,'-->',num_list[i])显然,Pythonic的写法更加直观和优雅。StringconcatenationPythonicnotationnames=['Tom','Jack','Sam']','.join(names)普通记法names='Tom'+'Jack'+'Sam'每个+操作都会生成一个新的Strings造成内存浪费,而join在整个过程中只会生成一个字符串对象文件打开和关闭Pythonic写法#Writing2withopen('a.txt')asf:data=f.read()普通写法f=open('a.txt')try:data=f.read()finally:f.close()使用with,Python会自动管理文件流的打开和关闭,无需手动操作。列表操作Pythonicwritingfromcollectionsimportdequenames=deque(['c','d','e'])names.popleft()names.appendleft('b')names.append('f')#names=>deque(['b','d','e','f'])commonnotationnames=list['c','d','e']names.pop(0)names.insert(0,'b')names.append('f')list也可以使用pop(0)删除第一个元素,但是list在内存中是顺序存储的,删除第一个元素会导致后面的所有元素向前移动,效率很低,插入类似。如果有很多删除和插入,请避免在开头使用列表。解构赋值Pythonic写法student=['Tom',18,'male']name,age,gender=studentprint(name,age,gender)#Tom18malenum_list=[100,19,20,98]first,*left_num_list,last=num_listprint(first,left_num_list,last)#100[19,20]98student=[['Tom',(98,96,100)],['Jack',(98,96,100)]]for姓名,(first,second,third)instudent:print(name,first,second,third)student={'name':'Tom','age':18}#python3fork,vinstudent.items():print('k','-->',v)#python2fork,vinstudent.iteritems():print('k','-->',v)字典类似,在Python2中,字典的items方法将返回一个列表,当字典很大时,这可能会非常占用内存。iteritems方法返回一个生成器。Python3中没有iteritems,items相当于Python2的iteritems。如果你使用的是Python2,请使用iteritems而不是itemsderivationPythonic写法#generate1-100oddodd=[iforiinrange(1,100)ifi%2==1]#seta,bgotoone数,求和大于100的所有组合result=[(x,y)forxina_setforyinb_setifx+y>100]普通写法#生成1-100的奇数result=[]foriinrange(100):ifi%2==1:result.append(i)#将a和b分别设置为一个数,找出和大于100的所有组合result=[]forxina_set:foryinb_set:ifx+y>100:result.append((x,y))本次分享到此结束~如果对你有帮助,记得在离开前点个赞~感谢阅读。