当前位置: 首页 > 后端技术 > Python

爱它!这18个Python高效编程技巧真香!

时间:2023-03-26 17:13:09 Python

初识Python语言,上学时就觉得python满足了对编程语言的所有要求。python语言高效的编程技巧,让我们这些大学四年被迫学习c或c++的人兴奋不已,终于松了一口气。高级语言,这个都做不到,谈什么?01交换变量>>>a=3>>>b=6这种情况下,如果要在C++中交换变量,就必须有一个空变量。但是python不需要,一行就可以了,大家看清楚>>>a,b=b,a>>>print(a)>>>6>>>ptint(b)>>>502字典推导(字典推导式)和集合推导式(Setcomprehensions)大多数Python程序员都知道并使用过列表推导式(listcomprehensions)。如果您不熟悉列表理解的概念-列表理解是一种更短、更简洁的创建列表的方法。>>>some_list=[1,2,3,4,5]>>>another_list=[x+1forxinsome_list]>>>another_list[2,3,4,5,6]从python3.1开始,我们可以使用相同的语法来创建集合和字典:>>>#SetComprehensions>>>some_list=[1,2,3,4,5,2,5,1,4,8]>>>even_set={xforxinsome_listifx%2==0}>>>even_setset([8,2,4])>>>#DictComprehensions>>>d={x:x%2==0forxinrange(1,11)}>>>d{1:假,2:真,3:假,4:真,5:假,6:真,7:假,8:真,9:假,10:真}在第一个示例中,我们基于some_list创建了一个具有唯一元素的集合,该集合仅包含偶数。在字典表的例子中,我们创建了一个key,key是1到10之间的一个不重复的整数,value是一个布尔值,表示key是否为偶数。这里值得注意的另一件事是集合的文字符号。我们可以这样简单地创建一个集合:>>>my_set={1,2,1,2,3,4}>>>my_setset([1,2,3,4])而无需使用内置函数set().03计数时使用Counter来计数对象这听起来很明显,但经常被遗忘。计数对于大多数程序员来说是一项非常常见的任务,并且在大多数情况下不是很有挑战性-这里有一些方法可以更轻松地完成这项任务。Python的collections类库中内置了一个dict类的子类,专门用来做这种事情:>>>fromcollectionsimportCounter>>>c=Counter('helloworld')>>>cCounter({'l':3,'o':2,'':1,'e':1,'d':1,'h':1,'r':1,'w':1})>>>c.most_common(2)[('l',3),('o',2)]04漂亮的打印出来JSONJSON是一种非常好的数据序列化形式,被各种API和web服务使用大量使用。使用python内置的json处理,可以让json字符串具有一定的可读性,但是遇到大数据时,就表现为一长条连续的线,人眼很难看清。为了让JSON数据更加友好,我们可以使用缩进参数来输出漂亮的JSON。这在交互式编程或登录控制台时特别有用:>>>importjson>>>print(json.dumps(data))#Noindention{"status":"OK","count":2,"results“:[{“年龄”:27,“姓名”:“奥兹”,“乳糖不耐受”:真},{“年龄”:29,“姓名”:“乔”,“乳糖不耐受”:假}]}>>>print(json.dumps(data,indent=2))#缩进{"status":"OK","count":2,"results":[{"age":27,"name":"Oz","lactose_intolerant":true},{"age":29,"name":"Joe","lactose_intolerant":false}]}同样的,使用内置的pprint模块,你也可以打印其他任何东西输出更漂亮。05解决FizzBu??zz前段时间,JeffAtwood推广了一个简单的编程练习,叫做FizzBu??zz。问题引用如下:编写一个程序,打印从1到100的数字。3的倍数打印“Fizz”以替换此数字,5的倍数打印“Buzz”,它打印“FizzBu??zz”的倍数3和5。这是解决此问题的一个简短而有趣的方法:forxinrange(1,101):print"fizz"[x%3*len('fizz')::]+"buzz"[x%5*len('buzz')::]orx06ifstatementinlineprint"Hello"ifTrueelse"World">>>Hello07Connection当绑定两个不同类型的对象时,下面的最后一种方法很酷。nfc=["包装工队","49人队"]afc=["乌鸦队","爱国者队"]printnfc+afc>>>['包装工队','49人队','乌鸦队','爱国者队']printstr(1)+"world">>>1worldprint`1`+"world">>>1worldprint1,"world">>>1worldprintnfc,1>>>['Packers','49ers']108数值比较这是我见过这么好的快捷方式的少数语言之一x=2if3>x>1:printx>>>2if10:printx>>>209同时迭代两个列表nfc=["Packers","49ers"]afc=["Ravens","Patriots"]forteama,teambinzip(nfc,afc):printteama+"vs."+teamb>>>Packersvs.Ravens>>>49ersvs.Patriots10listiterationwithindexteams=["Packers","49ers","Ravens","Patriots"]forindex,teaminenumerate(teams):printindex,team>>>0Packers>>>149人队>>>2乌鸦队>>>3Patriots11列表推导已知一个列表,我们可以选择偶数列表方法:numbers=[1,2,3,4,5,6]even=[]fornumberinnumbers:ifnumber%2==0:even.append(number)转化为:numbers=[1,2,3,4,5,6]even=[numberfornumberinnumbersifnumber%2==0]12字典推导类似于列表推导,字典可以做同样的工作:teams=["Packers","49ers","Ravens","Patriots"]print{key:valueforvalue,keyinenumerate(teams)}>>>{'49ers':1,'Ravens':2,'Patriots':3,'Packers':0}13初始化列表项的值=[0]*3printitems>>>[0,0,0]14将列表转换为字符串teams=["Packers","49ers","Ravens","Patriots"]print",".join(teams)>>>'Packers,49ers,Ravens,Patriots'15从我识别的字典中获取元素try/except代码又不优雅,不过这里有一个简单的方法,尝试在字典中查找key,如果没有找到对应的value,就会使用第二个参数作为它的变量值data={'user':1,'name':'Max','three':4}try:is_admin=data['admin']exceptKeyError:is_admin=False替换为data={'user':1,'name':'Max','three':4}is_admin=data.get('admin',False)16获取列表的子集有时候,你只需要列表中的一些元素,这里有一些getlistsub-sets设置方法。x=[1,2,3,4,5,6]#前3张打印x[:3]>>>[1,2,3]#中间4张打印x[1:5]>>>[2,3,4,5]#最后3条打印x[3:]>>>[4,5,6]#奇数项打印x[::2]>>>[1,3,5]#偶数numberItemprintx[1::2]>>>[2,4,6]除了python内置的数据类型,collection模块还包括一些特殊的用例,Counter在某些场合非常实用。如果你参加过今年的FacebookHackerCup,你甚至可以发现他的实用性。fromcollectionsimportCounterprintCounter("hello")>>>Counter({'l':2,'h':1,'e':1,'o':1})17迭代工具同collections库,还有一个叫itertools的库,确实可以高效的解决某些问题。一个用例是查找所有组合,它可以告诉您一组中元素的所有不可能组合fromitertoolsimportcombinationsteams=["Packers","49ers","Ravens","Patriots"]forgameincombinations(teams,2):printgame>>>('Packers','49ers')>>>('Packers','Ravens')>>>('Packers','Patriots')>>>('49ers','Ravens')>>>('49ers','Patriots')>>>('Ravens','Patriots')18False==True这是一个比较实用的技术很有意思的东西,在python中,True和False都是全局变量,所以:False=TrueifFalse:print"Hello"else:print"World">>>Hello以上就是本次分享的全部内容,如果觉得文章还不错,欢迎关注:Python编程学习圈,每日干货分享,发送“J”还能领取大量学习资料。或者去编程学习网了解更多编程技术知识。