编写高质量Python代码的59个有效方法 第20条:用None来描述具有动态默认参数

先上代码:

import datetime, time
def log(message, when=datetime.datetime.now()):
    print(message, when)

log('hello once')
time.sleep(2)
log('hello twice')
>>>
hello once 2018-09-19 20:47:35.700265
hello twice 2018-09-19 20:47:35.700265
[Finished in 2.2s]

解释:
参数的默认值,会在每个模块加载进来时求出,而很多模块都是在程序启动时加载的。包含这段代码的模块一旦加载进来,参数的默认值就固定了。解决方法如题所示:

import datetime, time
def log(message, when=None):
	if when == None:
		when = datetime.datetime.now()
	print(message, when)

log('hello once')
time.sleep(2)
log('hello twice')
>>>
hello once 2018-09-20 14:16:28.560857
hello twice 2018-09-20 14:16:30.561830
[Finished in 2.2s]

要点

  • 对于以动态值作为默认值的关键字参数来说,应把形式上的默认值写为None,并在函数的文档字符串里面描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值