导读:Python可以说是近5年来发展最快、使用最广泛的,是世界上最流行的编程语言之一;今天,我将告诉大家10个我个人认为很实用,但不是每个人都知道的Python编程技巧;保持这些良好的编程习惯,可以让我们写出更清晰、更优雅、更易读、更赏心悦目的代码;Python语言实际上是为他设计的语法的简单性和可读性;有些人可能听说过Python之禅(ZenofPython);这实际上是TimPeter在Python中留下的彩蛋;如果你输入Python,输入Importthis,你会看到作者留下的编程建议,里面列出的20条规则,是在告诉你编写Python程序的准则;另外,不知道大家有没有听过Pythonic这个词,其实指的是Python简洁大方的代码,风格独特;最后,甚至在Python语言提案PEP8中,定义了使代码更清晰、更简洁的代码规范;这里我挑选了10个重要的技巧,这里我用一些例子来一一说明:1.变量交换a=1b=2如果我们需要交换a和b的内容,通常可以定义一个临时变量tmptmp=aa=bb=tmp将a的内容存入其中,然后将a设置为b,再将b设置为这个临时变量;但上面的代码其实可以用Python改写如下:这样一来,程序的可读性就大大提高了;a=1b=2a,bb=b,a2.字符串格式化name="Chan"print("Hi,I'm"+name)通常我们在程序中需要进行字符串的组合或者拼接,我们使用加号做字符串连接,如果做两个字符串的连接,其实这样做是没有问题的,但是如果字符串很多,就会这样:name="Chan"country="China"age=23print("Hi,I'm"+name+".I'mfrom"+country+".AndI'm"+str(age)+"."这样的程序会显得很乱,难以阅读;而且,当我们连接在整形数据的时候,还需要进行类型转换,否则程序会报错,其实我们可以这样写程序,使用使用Python的百分号语法来格式化字符串,其中%s表示这个将被替换为一个字符串,%d表示这个将被替换为一个小数,最后括号中的内容表示将被替换的内容:name="Chan"country="China"age=23print("Hi,I'm%s.I'mfrom%s.AndI'm%d."%(name,country,age))虽然这个程序这样写看起来好多了,但我们可以在这里做得更好。我们可以使用python中的格式化函数和花括号语法来编写程序如下:花括号中的内容将替换为格式化函数传入的每个参数;name="Chan"country="China"age=23print("Hi,I'm{}.I'mfrom{}.AndI'm{}.".format(name,country,age))里面的内容花括号将替换为格式函数中传递的参数。使用这个函数的好处是:可以在花括号中写上被替换的索引,相同的索引会被相同的Content替换,像下面这样:name="Chan"print("Hi,I'm{0}.AndI'm{0}.".format(name))result:Hi,I'mChan.AndI'mChan最后一个也是我最喜欢的,叫做f-string。我们只需要在字符串的开头写一个f,花括号中的内容就会自动替换为指定表达式的值。注意表达式:name="Chan"country="China"age=23print(f"Hi,I'm{name}.I'mfrom{country}.AndI'm{age+1}."三、产量Python语法例如这里,我们定义了一个fibonacci()函数来枚举斐波那契数列的前n位:0,1,1,2,3,5...defbonacci(n):a=0b=1nums=[]for_inrange(n):nums.appends(a)a,bb=b,a+breturnnumsforiinfibonacci(10):print(i)我们可以修改这个fibonacci()函数以使用Python中的yield语法:首先将append重写为yield;然后删除num列表;这样程序就和上面一样了,yield的意思是每当我们计算出一个元素,就立即把这个元素送出去;无需等待整个列表生成后再输出;yield的好处是对于一些非常耗时的操作可以及时输出;defbonacci(n):a=0b=1for_inrange(n):yieldaa,bb=b,a+breturnnumsforiinfibonacci(10):print(i)4.列表分析公式比如我们在fruit中存储了一系列的水果名称列表。如果我们想把列表的内容改成大写,我们有很多种方法:fruit=["apple","pear","orange","banana"]第一种:foriinrange(len(fruit)):fruit[i]=fruit[i].upper()更简单的语法:fruit=[x.upperforxinfruit]方括号中for后面的内容是告诉python我们需要枚举fruit变量中的所有元素,并且每个元素的名字叫做x,前半部分是将x大写()。作为练习,大家可以在评论区说说这段代码的含义:fruit=["apple","pear","orange","banana"]new_fruit=[xforxinfruitifx.startwith("a")]五:Enumerate函数用例4,我们要按顺序输出一个列表中的所有元素。我们可以使用如下方法:fruit=["apple","pear","orange","banana"]forxinfruit:print(x)如果我们想得到每个值对使用的索引值,比如apple是0,橙色为2,我们可以用Enumerate函数把程序改成这样:fruit=["apple","pear","orange","banana"]fori,xinenumerate(fruit):print(i,x)i是索引值,x是内容值6.反向遍历如果我们要从后向前输出列表,所以我该怎么做?其实只要加上反转函数即可:fruit=["apple","pear","orange","banana"]fori,xinenumerate(reversed(fruit)):print(i,x)希望fruit元素是按字母顺序输出,使用sorted函数:fruit=["apple","pear","orange","banana"]fori,xinenumerate(sorted(fruit)):print(i,x)VII.字典比如我们有两个字典,里面存放着不同用户的用户名和密码,我们可以写一个程序把两个字典合并:a={"ross":"123456","xiaoming":"xiao123"}b={"lili":"11111","nana":"123456"}c={}forkina:c[k]=a[k]forkinb:c[k]=b[k]我们可以重写编程为:a={"ross":"123456","xiaoming":"xiao123"}b={"lili":"11111","nana":"123456"}c={**a,**b}两个A**数在python中叫unpacking解包,就是把a和b的内容直接放到c中;八、三元运算符:我们经常根据条件给变量设置不同的值:ifscore>60:s="pass"else:s="fail"其实可以直接改成:s="pass"ifscore>60else"fail"这里的if...else在Python中叫做三元运算符;9.序列拆包我们定义一个变量来存放名字的名字和姓氏,如果我们想把他们的名字和姓氏分别提取出来存放在不同的变量中,我们最简单的方法就是使用split()函数:name="XiaoChen"str_list=name.split()first_name=str_list[0]last_name=str_list[1]其实这段代码可以改写为:Name="XiaoChen"first_name,last_name=name.split()我们直接将split()函数返回的列表中的元素分配给first_name和last_name。这个操作在python中叫做序列拆包,这里的序列不一定是列表,可以是元组,甚至是范围;10、with语句如果我们想打开某个文件,可以使用open函数来打开并读取该文件;阅读后不要忘记关闭文件。如果不关闭,Python会占用这个文件的资源,直到程序退出;f=open("suchfils.txt","r")s=f.read()f.close()对于小脚本来说,这没什么大不了的,但是对于一个在服务器上运行很长时间的程序来说,系统资源很可能被吃光,系统程序崩溃;所以更好的习惯是使用Python的with语句,将程序重写为:withopen("suchfils.txt","r")asf:s=f.read()这种情况下就不需要调用close函数.执行后,文件会自动关闭;今天主要讲讲Python的一些小技巧,有兴趣的可以一起交流~
