我经常看到一些函数的定义方式像这样:open(name[, mode[, buffering]])
,我知道它表示可选参数。
Python文档说它是模块级别的函数。但当我尝试用这种风格定义一个函数时,总是失败。
例如:
def f([a[,b]]): print('123')
不起作用。
有人能告诉我模块级别意味着什么,以及如何用这种风格定义函数吗?
我经常看到一些函数的定义方式像这样:open(name[, mode[, buffering]])
,我知道它表示可选参数。
Python文档说它是模块级别的函数。但当我尝试用这种风格定义一个函数时,总是失败。
例如:
def f([a[,b]]): print('123')
不起作用。
有人能告诉我模块级别意味着什么,以及如何用这种风格定义函数吗?
>>> def abc(a=None,b=None):
... if a is not None: print a
... if b is not None: print b
...
>>> abc("a")
a
>>> abc("a","b")
a
b
>>> abc()
>>>
!=
has its dangers as well. Test for not None
might be better as if not a is None:
- cdarkeis None
和 == None
:https://dev59.com/X2Yq5IYBdhLWcg3wui_F,https://dev59.com/6HE95IYBdhLWcg3wrPwn,https://www.python.org/dev/peps/pep-0290/#testing-for-none,https://www.python.org/dev/peps/pep-0008/#programming-recommendations - jeremyeObject
实例的相等性(与原始类型不同)。但是,在Python中可以重写运算符,例如__eq__
。这意味着a
和b
不能保证只进行简单的引用检查。它可能尝试访问None
实例内部的字段并出现错误。另一方面,is
关键字仅进行引用测试-消除了潜在的错误。(由于操作更简单,因此也会更快地执行) - flakes==
进行引用测试,而.equals
将执行自定义比较。这使得==
成为Java中首选的null
检查选择,就像is
是Python中首选的选择一样。 - flakes"如果我们可以使用这种方式定义可选参数(目前不行)"
方括号表示法不是Python语法,它是Backus-Naur形式——仅用于文档标准。
模块级函数是在模块中定义的函数(包括__main__
),这与在类内部定义的函数(方法)相对应。
def f(a=None, b=None)
。 - PRMoureu*args
参数!这不是20世纪80年代)。那个答案解决了另一个问题。 - alexis