参考自b站
1. 变量的交换(Swapping Variables)
交换a和b的变量
方法一:比较简单及繁琐,可读性也较差。
a = 1
b = 2
temp = a # 定义一个临时变量
a = b
b = temp
方法二:好像仅在python中成立
a = 1
b = 2
a, b = b, a
2. 字符串格式化(String Formatting)
在程序中组合和拼接字符串,我们一般使用“+”的形式,但是如果字符串较多的话,则会现得代码比较杂乱且可读性大大的降低,而且当我们连接int或者float数据类型的时候还会涉及到数据类型的转换。
例如:
name = 'Ross'
contry = 'China'
age = '27'
print("Hi, I'm " + name + ". I'm from " + contry + ". And I'm " + str(age) + ".")
通常用python中的“%”进行格式化语法。
name = 'Ross'
contry = 'China'
age = 27
print("Hi, I'm %s. I'm from %s. And I'm %d" % (name, contry, age))
# 也可以
print("Hi, I'm {}. I'm from {}. And I'm {}".format(name, contry, age)) # 这种方法的好处就是在重复替换的时候会很方便
print("Hi, I'm {0}. Yes, I'm {0}".format(name)) # 在{}中写入被替换参数的索引
# 在python3.6版本以上多了f-string的方法
print(f"Hi, I'm {name}. I'm from {contry}. And I'm {age + 1 - 1}") # {}就是一次新的运算,一个表达式,甚至可以是函数的返回值。
3. yield语法(Yield Statement)
以斐波那契数列为例
def fibonacci(n):
a, b = 0, 1
nums = []
for _ in range(n):
nums.append(a)
a, b = b, a+b
return nums
# 如果我们要显示nums中的十个数
for i in nums:
print(i)
# 接下来我们可以修改fibonacci()函数来使用python中的yeild语法。
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a # 是一个生成器,注意和return的区分。可print。表示每当计算出一个元素,立即讲这个元素给送出去。
a, b = b, a+b
return None
for i in fibonacci(10):
print(i)
# 使用yield的好处就是我们并不需要等待整个列表都生产后再来一个一个的输出。
# yield和return的区别在于,当你的函数yield一个数值后,函数并不会立马停止运算,而是会继续的执行下去,yield的优势在于一些非常耗时的操作。
4.列表解析式(List Comprehension)
例如将列表中的每个元素变为大写
fruit = ['apple', 'pear', 'pineapple', 'orange', 'banana']
# 方法一
for i in range(len(fruit))/l
fruit[i] = fruit[i].upper()
# 方法二:列表解析式,更为方便简洁
fruit = [x.upper() for x in fruit]
列表解析式还有另外一个应用,就是筛选或过滤掉列表中的元素
例如选取fruit列表中首字母为a的元素
fruit = ['apple', 'pear', 'orange', 'banana', 'afex']
#方法一:
filtered_fruit = []
for f in fruit:
if f.startswith('a'):
filtered_fruit.append(f)
# 方法二:最关键的在于后面的if语句,这段代码会筛选出我们所需要的元素
fruit = [x for f in fruit if f.startswith('a')]
# 这样理解:新的列表由x组成,为x来自于fruit列表中符合首字母为a的元素
5. Enumerate函数(Enumarate Function)
遍历并获取对应元素的索引值
fruit = ['apple', 'pear', 'orange', 'banana', 'grape']
for i, f in enumerate(fruit):
print(i, f) # 先返回索引,再返回对应的元素
Enumerate的延申
6.1 反向遍历(Looping Backwards)
fruit = ['apple', 'pear', 'orange', 'grape']
for i, f in enumerate(reversed(fruit)):
print(i, f)
6.2 按顺序遍历(Looping in Sorted Order)
如果输出的循序希望按照元素字典中的循序,也就是说名字以‘a’开头的元素排在最前面。
fruit = ['apple', 'pear', 'orange', 'grape']
for i, f in enumerate(sorted(fruit)):
print(i, f)
7. 字典的合并操作(Dictionary Merging)
例如将两个字典合并成一个字典
a = {'he': 111, 'paul': 222, 'gong': 444}
b = {'gigi': 555 , 'bingo': 666 , 'male': 777}
# 方法一:
c = {}
for key, value in a.items():
c[key] = value
for key, value in b.items():
c[key] = value
# 方法二:**在python中叫做解包unpacking,
c = {**a, **b}
# 也就是说这里的**a和**b相当于是将两个字典中的内容直接写到了这里,但是将字典改为列表却不管用,也许这种方法只适用于字典合并吧。
8. 三元运算符(Ternary Operator)
我们经常会根据某一条件的不同,将某一变量设置成不同的值。
score = int(input('输入你得分数:'))
if score > 60:
s = 'pass'
else:
s = 'fail'
# 其实代码变成如下的会更加更美观
s = 'pass' if sroce > 60 else 'fail'
# 这里的...if...else成为python中的三元运算符,
# 当if后面条件满足时表达式会输出前面这个值,不满足时会输出后面的值
9. 序列解包(Sequense Unpacking)
例如将一个字符串中的字母解析出来
name = 'San Zhang'
str_ls = name.split() # 分割成一个列表,默认是按照空格分开,也可自定义,例如name.split(',')
first_name = str_ls[0]
last_name = str_ls[1]
# 更简洁一点
first_name, last_name = name.split() # 序列解包,后面的可为list,tuple,range...因为他们都代表一系列元素,也就是序列
10. With语句(With Statement)
用于读取文件的内容。
方法一:
但在完成文件的操作后,一定不要忘记关闭文档,否则python将一直占用这个文件的系统资源,直到程序的完全退出。 如果不关闭可能造成系统资源被吃光,致使程序的崩溃。
f = open('somefile.txt', 'r')
f.read()
f.close()
方法二:
而用with打开文件,就不需要手动关闭文档了。当with语句后的代码执行完毕后,这个文件就会自动的被python关闭。
with open('somefile', 'r') as f:
f.read()