选择最佳策略:简单的方式和globals()
promos = [fidelity_promo, bulk_item_promo, large_order_promo] ➊ def best_promo(order): ➋ """选择可用的最佳折扣 """ return max(promo(order) for promo in promos) ➌
globals()
返回一个字典,表示当前的全局符号表。这个符号表始终针对当前 模块(对函数或方法来说,是指定义它们的模块,而不是调用它们的模 块)。
promos = [globals()[name] for name in globals() ➊ if name.endswith('_promo') ➋ and name != 'best_promo'] ➌ def best_promo(order): """选择可用的最佳折扣 """ return max(promo(order) for promo in promos) ➍
❶ 迭代 globals() 返回字典中的各个 name。
❷ 只选择以 _promo 结尾的名称。
❸ 过滤掉 best_promo 自身,防止无限递归。
❹ best_promo 内部的代码没有变化。
人生就是要不断折腾