如何解决使用 None 作为默认参数时遇到问题
我想了解 None
作为默认参数的工作原理。我有一个有 4 个参数的函数,第一个是非默认的,然后是 3 个设置为 =None
的参数。
函数:send(name,website=None,to_email=None,verbose=False)
调用函数:response = send(name,to_email=email,verbose=True)
我的问题是,如果我删除 "to_email="
并将其保留为 email
,在调用该函数时,会发生错误,指出 to_email
是 None
。它不知道为 to_email
参数传递了电子邮件(因为它是我传递的第二个参数)?为什么我必须在参数 email_to=email
时明确说 email_to=None
?
这是我的有效代码:
def send(name,verbose=False):
assert to_email != None
if website != None:
msg = format_msg(my_name=name,my_website=website)
else:
msg = format_msg(my_name=name)
if verbose:
print(name,website,to_email)
# send the message
send_mail(text=msg,to_emails=[to_email],html=None)
if __name__ == "__main__":
print(sys.argv)
name = "UnkNown"
if len(sys.argv) > 1:
name = sys.argv[1]
email = None
if len(sys.argv) > 2:
email = sys.argv[2]
response = send(name,verbose=True)
print(response)
解决方法
未命名参数按照它们在函数定义中出现的顺序分配给参数。所以如果你写
send(name,email,verbose=True)
email
参数被分配给 website
参数,因为它是函数定义中的第二个参数。 to_email
参数获取其默认值 None
。
如果你想跳过任何参数,你必须使用命名参数。
如果您希望能够按照您尝试的方式调用它,则需要对参数重新排序:
def send(name,to_email=None,website=None,verbose=False):
现在 to_email
是第二个参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。