【发布时间】:2014-09-02 10:12:53
【问题描述】:
我有一个带有可选参数user_device=None 的函数create_group。如果为user_device 提供了非None 值,我希望字典targeting_spec 包含键值对"user_device": user_device,如果没有提供非None 值,我不希望targeting_spec 包含这个键值对。
我现在怎么做:
def create_group(..., user_device=None, ...):
...
targeting_spec = {
...
}
if user_device:
targeting_spec["user_device"] = user_device
...
这是一种公认的方式吗?如果不是,那是什么?我问是因为这似乎是 Python 喜欢优雅地解决的类型。
【问题讨论】:
-
这不会将
parameters[user_device]设置为user_device,如果user_device在非None的布尔上下文中评估为False,例如空字符串@987654333 @,一个空列表或元组,等等。如果您不想要这种行为,请将您的支票更改为if user_device is not None。 -
这种做法似乎没有什么问题。尽管您可以将其作为
None输入parameters。只要您考虑到它是None,无论哪种方式都应该可以正常工作。 -
哦,好点子。事实证明,如果它是我仍然不希望在 target_spec 中使用 user_device 的任何东西,所以我的陈述“如果提供了非无值......”在技术上并不准确,因为也不需要像“”或 [] 这样的东西由我,(如无)。我将编辑并修复我的变量名称以匹配描述。
-
实际上我会选择非None,因此将检查更改为
if user_device is not None:,但这是我之前没有考虑到的有效问题。 -
如果你能做类似
{'key1': value1, 'key2': value2 if value2, 'key3': value3}的事情就好了
标签: python dictionary nonetype