看到一些提高效率的代码片段,纪录了一下
0. 序列解包
x, y, z = 1, 2, 3 # 并行赋值
x, y = y, x # 快速交换
value = (1, 2, 3)
x, y, z = value # 序列解包,x = 1…… 可类推
1. 循环中的 else 子句
通常,在循环中使用 break 是因为你「发现」了什么或「出现」了什么情况。要在循环提前结束时采取某种措施很容易,但有时候你可能想在循环正常结束时才采取某种措施。如何判断循环是提前结束还是正常结束的呢?可在循环开始前定义一个布尔变量并将其设置 False ,再在跳出循环时将其设置为 True。这样就可在循环后面使用一条 if 语句来判断循环是否是提前结束的。
broke_out = False
for x in seq:
do_something(x)
if condition(x):
broke_out = True
break
do_something_else(x)
if not broke_out:
print(“I didn’t break out!”)
一种更简单的办法是在循环中添加一条 else 子句,它仅在没有调用 break 时才执行。继续前面讨论 break 时的示例。
from math import sqrt
for n in range(99, 81, -1):
root = sqrt(n)
if root == int(root):
print(n)
break
else:
print(“Didn’t find it!”)
2. 添加的保留字
pass # 什么也不做,用于判断语句中表示占位符
del # 删除,不常用由于 python 的回收机制,一般不常用
exec # 函数,可执行其中的语句,无返回值,例如:
exec("print('Hello, world!')")
# 输出 Hello, world!
eval # 函数,可执行其中的语句,有返回值,例如:
eval(input("Enter an arithmetic expression: "))
# Enter an arithmetic expression: 6 + 18 * 2
# 42
# 不仅执行了语句,而且还可以将输入的内容作为语句再执行
3. 函数的构建
当函数构建为 def test(*value)
时,value 为元组;当构建为 def test(**value)
时,value 为字典。
4. 类的定义
class Person:
def set_name(self, name):
self.name = name
def get_name(self):
return self.name
def greet(self):
print("Hello, world! I'm {}.".format(self.name))
这个类定义了三个方法,而在实例化一个类的时候,对象总会自动将自身作为第一个参数传入方法,即上面代码块的 self ,但是此变量名可自取,用 self 是因为形象的说明了第一个参数的作用。因此,这些函数也叫做关联的方法。