最近在氪码的过程中遇到一个很有意思的函数写法:
前提,有如下7个函数:
1.cut_left_phoning
2.cut_right_phoning
3.cut_drinking
4.cut_smoking
5.cut_bigcut
6.cut_left_eyes
7.cut_right_eyes
现有如下需求:
判断action_num值.
当值为1时,执行函数cut_left_phoning
当值为2时,执行函数cut_right_phoning
当值为3时,执行函数cut_drinking
当值为4时,执行函数cut_smoking
当值为5时,执行函数cut_bigcut
当值为6时,执行函数cut_left_eyes
当值为7时,执行函数cut_right_eyes
遇到这种情况时,我们通常的操作方法是:
if action_num == 1:
cut_left_phoning(image_name, img, output_path, size, box, landmarks)
elif action_num == 2:
cut_right_phoning(image_name, img, output_path, size, box, landmarks)
elif action_num == 3:
cut_drinking(image_name, img, output_path, size, box, landmarks)
elif action_num == 4:
cut_smoking(image_name, img, output_path, size, box, landmarks)
elif action_num == 5:
cut_bigcut(image_name, img, output_path, size, box, landmarks)
elif action_num == 6:
cut_eyes(image_name, img, output_path, size, box, landmarks)
elif action_num == 7:
cut_eyes(image_name, img, output_path, size, box, landmarks)
使用多个if判断action_num的值然后再执行函数。
但是现在有个一个更简单的办法:
CUT_FUNCTIONS = [None, cut_left_phoning, cut_right_phoning, cut_drinking, cut_smoking, cut_bigcut, cut_left_eyes, cut_right_eyes]
CUT_FUNCTIONS[action_num](image_name, img, output_path, size, box, landmarks)
将7个函数存储为一个列表,然后直接判断action_num在列表中映射的函数执行相关函数。
此方法要求:
1. 子函数已经具备
2.子函数的参数完全相同