使用 x={}
形式的默认参数通常无法在 Python 中实现预期目的,因为默认参数是在定义而不是调用函数时绑定(bind)的。
惯例似乎是使用 x=None
将可变对象设置为默认参数,然后检查 x is None
以在调用函数时分配正确的默认值。
因此,如果我想将 x
转换为默认为空的字典,我会使用如下内容:
def f(x=None):
x = dict(x) if x is not None else {}
但是,由于 dict
可以采用任何可迭代对象,我也可以编写这个更简洁的版本:
def f(x=()):
x = dict(x)
哪些是“正确”的方法?
最佳答案
惯用 风格是不转换为dict
;这样,某人就可以使用实现正确映射方法的任何对象。
所以,最pythonic的方法是使用:
def f(x=None):
if x is None:
x = {}
然后只使用映射方法。
因此,您通常不应将参数转换为字典。您声明您的 API 接受一个映射对象,并期望调用者进行转换。
同时接受 dict
和可迭代对象的唯一原因是当您希望支持允许重复键的有序键值对时,例如 urllib.urlencode
function .在这种情况下,dict
无法保留该信息,并且该方法不会将可迭代对象转换为字典,而是将字典用作可迭代对象。
关于python - 使用空字典作为默认参数的最 Pythonic 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796199/