其实,可变默认参数和不可变默认参数放在这里讨论并没太大的价值,就像其他语言中所谓的值传递还是引用传递一样,不只会对默认参数造成影响。
五、最佳实践
不可变的默认参数的多次调用不会造成任何影响,可变默认参数的多次调用的结果不符合预期。那么在使用可变默认参数时,就不能只在函数定义时初始化一次,而应该在每次调用时初始化。
最佳实践是定义函数时指定可变默认参数的值为None,在函数体内部重新绑定默认参数的值。以下是对上面的两个可变默认参数示例最佳实践的应用:
def good_append(new_item, a_list = None): if a_list is None: a_list = [] a_list.append(new_item) return a_list print(good_append('1')) print(good_append('2')) print(good_append('c', ['a', 'b'])) import datetime as dt from time import sleep def log_time(msg, time = None): if time is None: time = dt.datetime.now() sleep(1) print("%s: %s" % (time.isoformat(), msg)) log_time('msg 1') log_time('msg 2') log_time('msg 3')更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx