1、大量的if-else结构采用字典key来匹配。
days = "Mon Tue Wed Thu Fri Sat Sun".split()
classes = "Eng Chi Mat Phy Che Res".split()
week_classes = dict(zip(days, classes))
def get_calss(day):
if day not in week_classes:
raise ValueError("Not a correct day")
else:
return week_classes.get(day)
print(get_calss("Sat"))
2、清楚的异常声明比含蓄的要好,不要图省事。
def get_num(num1, num2):
try:
result = num1/num2
except ZeroDivisionError:
print("不能被0整除")
return 0
except TypeError:
print("请检查输入的变量是否为整数")
raise
except Exception as e:
print("其他错误:{e}, 上抛错误")
raise
3、巧妙的利用yield来取代递归
注:含有yield的函数是一个生成器,多个生成器嵌套则用yield from。
import os
def find_files(root_dir="/user/", res=None):
if not res:
res = []
for f in os.listdir(root_dir):
file_path = os.path.join(root_dir, f)
if os.path.isfile(f):
res.append(file_path)
elif os.path.isdir(f):
find_files(file_path, res)
return res
优化后:
def get_files(folder):
for item in os.listdir(folder):
file_path = os.path.join(folder, item)
if os.path.isfile(item):
yield file_path
elif os.path.isdir(item):
yield from find_files(item)
root_dir = "/user/"
print(list(get_files(root_dir)))