python - 使用空字典作为默认参数的最 Pythonic 方式是什么?

标签 python

使用 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/

相关文章:

python - BeautifulSoup,你要把我的 HTML 放在哪里?

python - 如何在 python 2.7.3 中更改文本颜色

python - 下载期间使用 Requests.response 从文件中读取数据

python - 如何在一条不和谐消息中发送 for 循环的结果?

python - Django 的 FilteredSelectMultiple 小部件仅在登录时才起作用

python - 避免向 Django 模型添加重复条目的有效方法

python高阶函数: generic functions calls with parameter list

javascript - 抓取需要您向下滚动的网站

python 功能来解析包含表的 csv 文件

python - SSL 连接错误 : SSL certificate validation failure (2026) (SQLDriverConnect) pyodbc?