导读:
Python可以说是代码近5年来增长速度最快、应用最广泛的更赏,并且是心悦世界范围内最受欢迎的编程语言之一;
今天,我来给大家讲讲10个我个人觉得非常实用,目介但并不是技巧所有人都知道的Python编程技巧;
保持这些良好的编程习惯,可以让我们写出更清晰、代码更优雅、更赏更易读、心悦更加赏心悦目的目介代码;
Python语言在设计之初,其实就有在考虑他语法的技巧简洁性和可读性;
可能有人听说过Python之禅(Zen of Python);
这其实是Tim Peter在Python中留下的一个彩蛋;
如果你进入Python,输入Import this,代码你会看到作者留下的更赏一条条编程建议,其中列出的心悦这20条规则,就是目介在告诉你Python程序编写的指导方针;

另外,不知道大家有没有听说过Pythonic这个词,技巧他其实也是指的是Python具有独特风格、站群服务器简洁而优雅的代码;
最后,甚至在Python语言的提案PEP8中,也定义了一条条让代码更清晰、更简洁的代码规范;

这里我筛选出10个重要的技巧,这里就用实例一一讲解一些吧:
一、变量的交换
a = 1 b = 2 如果我们需要交换a 和 b中的内容 我们通常可以定义一个临是变量tmp tmp = a a = b b = tmp先将a 的内容存放在其中,然后将a 设置成b,再将b 设置成这个临时的变量;
不过上面这段代码其实在Python中可以被改写成这样:这样的话,程序的可读性就提高了很多;
a = 1 b = 2 a, bb = b, a二、字符串的格式化
name = "Chan" print("Hi, Im" + name)通常我们在程序中需要组合或拼接字符串的话,我们用加号来做字符串的连接,如果做两个字符串的连接,这样做其实并没有什么问题,但如果字符串比较多的话,类似这种情况:
name = "Chan" country = "China" age = 23 print("Hi, Im " + name + ". Im from " + country + ". And Im " + str(age) + "."这样的程序就会显得非常的杂乱并且不易阅读;而且,服务器托管当我们在连接整形数据的时候,还需要进行类型的转化,不然程序会报错。
其实,我们可以把程序写成这个样子,利用Python的百分号语法来格式化字符串,其中%s代表这里会被替代成一个字符串,%d表示这里会被替换成一个替换成一个十进制,最后面括号内里的内容表示会被替换的内容:
name = "Chan" country = "China" age = 23 print("Hi, Im %s. Im from %s. And Im %d." % (name,country,age))虽然程序写成这样已经好看很多了,但是我们在这里还可以做的更好一些,我们可以利用python中的format函数和花括号语法,把程序写成下面这样:
花括号里面的内容会被替换成format函数中传入的各个参数;
name = "Chan" country = "China" age = 23 print("Hi, Im {}. Im from {}. And Im {}.".format (name,country,age))花括号里面的内容会被替换成format函数中传入的各个参数,使用这个函数好处是:
你可以在花括号中写入被替代的索引,同个索引的地方会被替换成同一个内容,像下面这样:
name = "Chan" print("Hi, Im . And Im .".format (name)) 结果:Hi, Im Chan. And Im Chan最后一种,也是我最喜欢的,叫做f-string,我们只需要在字符串开头写一个f,花括号中的企商汇内容就会被自动替换成指定表达式的值,注意是表达式:
name = "Chan" country = "China" age = 23 print(f"Hi, Im {name}. Im from {country}. And Im {age+1}."三、Python中Yield语法
比如在这里,我们定义了一个fibonacci()函数,来列举斐波那契数列的前n位:0、1、1、2、3、5...
def fibonacci(n): a = 0 b = 1 nums = [] for _ in range(n): nums.appends(a) a, bb = b, a+b return nums for i in fibonacci(10): print(i)我们可以修改这个fibonacci()函数来使用Python中的yield语法:
首先把append改写成yield;
然后删除num列表;
这样程序会和以上是一样的,yield a表示,每当我们计算出一个元素,就立马将这个元素送出去;并不需要等整个列表生成后再输出;yield的优势是在一些非常耗时的操作,及时输出;
def fibonacci(n): a = 0 b = 1 for _ in range(n): yield a a, bb = b, a+b return nums for i in fibonacci(10): print(i)四、列表解析式
比如我们有一系列水果的名字,存放在fruit列表里,如果我们希望把列表的内容都改成大写,我们可以有很多种办法:
fruit = ["apple", "pear", "orange", "banana"] 第一种: for i in range(len(fruit)): fruit[i] = fruit[i].upper() 更简单的语法: fruit = [x.upper for x in fruit]方括号中for后面内容是告诉python,我们需要枚举fruit变量中的所有元素,而其中每个元素名称叫做x,前半部分则是将x大写upper().
做个练习,评论区可以说说这段代码是什么意思:
fruit = ["apple", "pear", "orange", "banana"] new_fruit = [x for x in fruit if x.startwith("a")]五:Enumerate函数
使用4的例子,我们希望按顺序输出一个列表中的所有元素,我们可以使用下面方式:
fruit = ["apple", "pear", "orange", "banana"] for x in fruit: print(x)如果我们希望得到每个值对用的索引值,比如apple是0,orange是2,我们可以使用Enumerate函数,把程序改成这样:
fruit = ["apple", "pear", "orange", "banana"] for i,x in enumerate(fruit): print(i,x) i是索引值,x是内容值六、反向遍历
如果我们希望对列表从后往前依次输出,那么应该怎么做呢?
其实只要加入reversed函数就可以了:
fruit = ["apple", "pear", "orange", "banana"] for i,x in enumerate(reversed(fruit)): print(i,x)希望水果元素按照字母顺序输出,使用sorted函数:
fruit = ["apple", "pear", "orange", "banana"] for i,x in enumerate(sorted(fruit)): print(i,x)七、字典的合并操作
比如我们有两个字典,存放不同用户的用户名和密码,可以写一个程序,将两个字典合并:
a = {"ross":"123456","xiaoming":"xiao123"} b = {"lili":"11111","nana":"123456"} c = {} for k in a : c[k] = a[k] for k in b: c[k] = b[k]我们可以将程序改写成:
a = {"ross":"123456","xiaoming":"xiao123"} b = {"lili":"11111","nana":"123456"} c = {**a, **b}两个**号在python中称为解包unpacking,意为将a和b的内容都直接放入c中;
八、三元运算符:
我们经常会根据条件,将变量设置成不同的值:
if score > 60: s = "pass" else: s = "fail"其实可以直接改成:
s = "pass" if score > 60 else "fail"这里的if...else称为Python中的三元运算符;
九、序列解包
我们定义一个变量,存储名字的名和姓,如果我们想要单独提取他们的姓和名,并存入不同变量,我们最简单的办法就是使用split()函数:
Name = "Xiao Chen" str_list = name.split() first_name = str_list[0] last_name = str_list[1]其实这段代码可以被改写成:
Name = "Xiao Chen" first_name,last_name = name.split()我们直接将split()函数返回列表中的元素赋给first_name和last_name,这个操作在python中就被称为序列解包,这里的序列不一定是列表,可以是元组,甚至是range;
十、With语句
如果我们想打开某个文件,我们可以使用open函数,打开并读取文件;
读取后不要忘记关闭文件,如果不关闭,Python将一直占用这个文件的资源,直到程序退出为止;
f = open("suchfils.txt", "r") s = f.read() f.close()对于小脚本来说,这不是什么大事,但是,对于一个长时间在服务器运行的程序,系统资源很可能被吃光,系统程序就会崩溃;所以更好的习惯是使用Python的with语句,将程序改写成:
with open("suchfils.txt", "r") as f: s = f.read()这样的话,就不用调用close函数了,执行完,文件就会自动关闭;
今天主要讲了Python的一些小技巧,有兴趣可以一起交流~
(责任编辑:系统运维)