You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中None的含义是什么?为何赋值None后代码仍正常执行?

解答你的Python参数与布尔判断困惑

嘿,我来帮你拆解清楚这个问题里的两个关键点,你就能明白为什么代码会这样运行啦!

1. 参数默认值只在「没传对应参数」时生效

你定义函数时给name、first_name、last_name设的默认值None,只有在调用函数没有传递该参数的时候才会被使用。但看你的调用代码:

unpacker(**{'last_name': 'Ee', 'first_name': 'Elgene'})

这里的**是Python的字典解包操作符,它会把字典里的键值对直接转换成函数的关键字参数。换句话说,这行代码完全等价于:

unpacker(first_name='Elgene', last_name='Ee')

这时候first_name和last_name拿到的是你传递的非空字符串,而不是默认的None!

同样,packer的调用:

packer(name='Elgene', num=42, spanish_inquisition=None)

你明确给name传了'Elgene',所以name用的是这个值,不是默认的None;剩下的num和spanish_inquisition被**kwargs收集成字典,所以打印kwargs会输出{'num': 42, 'spanish_inquisition': None}。

2. 布尔判断里的「真值」与「假值」

你疑惑为什么布尔判断没返回False,这是因为Python里的布尔判断规则:

  • 只有假值会被判定为False,比如None、空字符串''、数字0、空列表[]、空字典{}等。
  • 非空字符串、非零数字、非空容器等都是真值,会被判定为True。

在unpacker里,first_name是'Elgene',last_name是'Ee',都是非空字符串,所以if first_name and last_name的结果是True,自然会执行print('Hi {} {}'.format(first_name, last_name))这行代码,而不是输出Hi no name!。

如果我们换一种调用方式,比如不传first_name或者传空字符串:

unpacker(last_name='Ee')  # first_name用默认值None
unpacker(first_name='', last_name='Ee')  # first_name是空字符串

这时候if first_name and last_name就会返回False,执行else分支的输出。

内容的提问来源于stack exchange,提问作者Elgene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:59:08