python - 惯用的 python,管理函数中的默认参数

标签 python arguments default idioms

我经常遇到大多数人在这样的函数或方法中管理默认参数值:

def foo(L=None):
  if L is None:
    L = []

但是我看到其他人在做类似的事情:

def foo(L=None):
  L = L or []

我不知道我是否遗漏了什么,但是,为什么大多数人使用第一种方法而不是第二种方法?它们是一样的吗?,似乎第二个更清晰,更短。

最佳答案

它们不相等。 第一种方法准确检查给定的 arg L 是否为 None。 第二次检查,L 以 python 方式为真。在 python 中,如果您检查条件列表,规则如下:

  1. List为空,则为False
  2. 否则为真

那么上述方法之间有什么区别呢?比较这段代码。

首先:

def foo(L=None):
    if L is None:
        L = []
    L.append('x')
    return L

>>> my_list = []
>>> foo(my_list)
>>> my_list
['x']

第二个:

def foo(L=None):
    L = L or []
    L.append('x')
    return L

>>> my_list = []
>>> foo(my_list)
>>> my_list
[]

所以首先没有创建新列表,它使用给定的列表。但是第二个创建了新的。

关于python - 惯用的 python,管理函数中的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386627/

相关文章:

python - 哪些基于 python 的 ajax 推送服务器适合使用

jquery - 通过 jQuery.Ajax 将多个项目发送到 MVC Controller

python - optional 参数 Python

python - GEKKO if3 变量在优化中给出意想不到的结果

带代理的 Python httplib.HTTPSConnection

python - 1064、 "You have an error in your SQL syntax;..."Python MySQL

c# - 更改继承的 .net 控件上属性的默认值

python - Argparse 中的异常

MySQL:唯一,但默认为 NULL - 通过创建表允许。允许插入 1 个以上的 NULL。为什么?

c++ - 为什么在定义析构函数时编译器不再添加默认移动构造函数和赋值?