十大常用Python编程技巧
前言
保持一些良好的编程习惯,可以让我们写出更清晰,更优雅,更易读,更赏心悦目的代码
1. 变量的交换
如果我们需要交换变量a和b中的内容,通常我们可以定义一个临时变量,先将变量a的值赋值给临时变量temp,再将变量b的值赋值给变量a,最后将临时变量temp中的值赋值给变量b,完成两个变量值得交换。
代码实现:
a = 6
b = 8
temp = a
a = b
b = temp
这段代码在Python中其实可以被改成这样
a = 6
b = 8
a, b = b, a
2. 字符串格式化
通常在程序中我们需要组合或者拼接字符串的话,我们可以用加号(+)来做字符串的连接。
代码实现:
time = '2020年8月9日'
print('今天是' + time)
如果只是做两个字符串的拼接,这种方法可以简单实现,但是如果多个字符串进行连接时,使用这种方法就会使程序显得非常杂乱并且不易阅读。而且,当我们在连接整数据的时候,还需要进行类型转换,否则程序报错。例如:
name = '小美'
age = 21
print('我的名字是' + name + '今年' + str(age) + '岁') # 要将age变量进行类型转换,否则程序报错
在Python中可以利用格式字符占位的方式进行代替,利用Python中的百分号语法来格式化字符串,%s代表这里的内容将被替换成一个字符串,%d代表这里的内容将被代替为一个十进制的数字,多个变量用元组形式进行填补
代码实现:
name = '小美'
age = 21
print('我的名字是%s 今年%d岁' % (name, age)) # 普通字符串与变量之间用%间隔
我们还可以利用Python中的format()函数和花括号语法,format()在这里是字符串对象的一个方法,调用它会返回被格式化过后的新字符串,而花括号中的内容会被最终替换成format)函数中传入的各个参数
代码实现:
name = '小美'
age = 21
print('我的名字是{} 今年{}岁' .format(name, age)) # 注意format方法名前用.进行分隔
使用场景:
如果你有重复的需要被替换的内容,你可以在花括号中写入被替换参数的索引,因此这里的这两个花括号都会被替换成同一个内容
代码实现:
name = '小美'
age = 21
print('我的名字是{0}我的名字是{0} 年龄是{1}' .format(name, age)) # 注意format方法名前用.进行分隔 若一个{}中有索引,其余{}也要有索引
如果你使用的是Python 3.6以上的版本,最简单的写法f-string,我们只需要在字符串开头写一个f,花括号中的内容就会被自动的替换成指定表达式的值,由于这里可以填写任意的表达式,所以甚至可以调用一个函数返回一个数值,并替换在字符串中
代码实现:
name = '小美'
age = 21
print(f'我的名字是{name} 年龄是{age + 1}') # 注意花括号中的内容为表达式
3. Yield语法
代码演示:
def demo(n):
a = 0
b = 1
for i in range(n):
yield a
a, b = b, a + b
for i in demo(10):
print(i)
yield表示在函数中每当我们计算出一个元素,就立马将这个元素给送出去,也就是说,这里外面的for中就会立即输出这个数,因此使用yield的好处是我们并不需要等待整个列表都生成完毕后,再一个个的输出,yield在英文中的意思是产出,它跟retunn的区别是当函数yield一个数值以后,函数并不会马上返回,而会继续执行下去,yield的优势在于一些非常耗时的操作。
4. 列表解析式
例如我们需要把一个列表中的小写字母字符转换成大写字符,通常会用for in 遍历整个列表,将内容进行转换
代码实现:
color = ['red', 'pink', 'black', 'blue', 'yellow']
for i in range(len(color)):
color[i] = color[i].upper()
其实这里可以使用列表解析式的方法
代码实现:
color = ['red', 'pink', 'black', 'blue', 'yellow']
color = [x.upper() for x in color]
print(color)
后面的这个方括号语法实际上是在构造一个新的列表,并把它赋值给之前的这个color变量,方括号里的后半部分实际上是在告诉Python我需要枚举color变量中的所有元素,而其中的每个元素的名字叫做x,而方括号里的前半部分x.upper()则是将这里的每个字符串x转换成大写。
列表解析式其实还有另外一个应用。筛选或者过滤列表中的元素
代码实现:
color = ['red', 'pink', 'black', 'blue', 'yellow']
filtered_color = [x for x in color if x.startswith('b')]
print(filtered_color)
我们可以这样理解这行代码的含义:新的列表由x构成,而x是挑选自之前的color列表,并且需要满足if语包中定义的条件
5. Enumerate函数
在遍历列表时,如果我们希望同时得到每一个元素在列表中对应的索引值,我们可以使用一个叫做enumerate()的函数
代码实现:
color = ['red', 'pink', 'black', 'blue', 'yellow']
for i, k in enumerate(color):
print(i, k)
enumerate()函数会在每一次循环的过程中提供两个参数,第一个i代表列表元素的索引值,第二个x代表列表中元素的内容
6.1反向遍历
其实只需要在遍历元素时候加入reversed()函数就可以实现反向遍历
代码实现:
color = ['red', 'pink', 'black', 'blue', 'yellow']
for i, k in enumerate(reversed(color)):
print(i, k)
6.2按顺序遍历
如果我们希望输出的元素是按照名字的字典顺序,也就是说名字以a开头的排在最前面,以z开头的排在最后面,这里我们可以使用到Python中的一个内置函数。
sorted()函数会返回一个新的并经过排序后的列表
代码实现:
color = ['red', 'pink', 'black', 'blue', 'yellow']
for i, k in enumerate(sorted(color)):
print(i, k)
7.字典的合并操作
a ={"admin ": "123456", "xiaoming": "110100"}
b = {"atu": "10056", "xiaomei": " 66666"}
C = {**a, **b}
这两个星号在Python中叫做解包unpacking,也就是说这里的**a和**b相当是将字典a和b中的内容直接填写到了这里
8.三元运算符
score = 90
x = 'pass' if score > 60 else 'fail'
print(x)
这里的…if…else称为Python中的三元运算符,当if后面的条件满足时,表达式会输出前面的值,当条件不满足时,表达式会输出后面的值
9.序列解包
例如name = ‘Li Si’ 里面存储了李四的姓和名,如果我们想单独提取出他的姓和名,并把他们分别存储到不同的变量中,我们可以利用字符串对象的split()方法, 把这个字符串按空格分割成多个字符串
代码实现:
name = ‘Li Si’
first_ name, last_ name = name.split()
我们直接将split()函数返回的列表中的元素赋值给furst_name和last_name, 中间以逗号的形式隔开, 这个操作在Python中被称作序列解包, 这里的“序列”其实并不一定需要是列表
10. with语句
with open('student.txt', 'r') as file :
content = file.read()
这样写的话,就不再需要手动的调用close()函数了,当with语句之后的代码执行完毕之后,这个文件就会自动被Python关闭