python如何用方括号定义带有可选参数的函数?

python如何用方括号定义带有可选参数的函数?,python,Python,我经常发现一些函数被定义为openname[,mode[,buffering]],我知道这意味着可选参数。 Python文档说它是模块级函数。当我尝试用这种风格定义函数时,总是失败。 例如 def f[a[,b]]:打印'123' 不起作用。 有人能告诉我模块级是什么意思吗?我如何定义这种风格的函数 这就是你要找的吗 >>> def abc(a=None,b=None): ... if a is not None: print a ... if b is not None:

我经常发现一些函数被定义为openname[,mode[,buffering]],我知道这意味着可选参数。 Python文档说它是模块级函数。当我尝试用这种风格定义函数时,总是失败。 例如 def f[a[,b]]:打印'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()
>>> 

到目前为止,我还没有得到预期的答案。最初,当我看到这种表达方式openname[,mode[,buffering]]时,我真的想知道这是什么意思。这显然意味着可选参数。在那一刻,我发现它可能是一种不同于普通方法的方法,比如fa,b,c=None,d='balabala',用可选参数定义函数,但不只是告诉我们它是可选参数。写这篇文章的好处是可以帮助我们使用可选参数,但没有默认值,所以我认为这是一种定义可选参数更清晰、更简单的方法。 我真正想知道的是两件事:1。如果我们可以使用此方法定义可选参数,目前无2。如果有人能解释一下模块级函数的含义,那就太好了? 我真的很感谢以上的回答和评论!非常感谢。如果我们可以使用此方法定义可选参数,则目前没有

方括号表示法不是python语法,它是Backus Naur形式-它只是一个文档标准

模块级函数是在包含_main _的模块中定义的函数-这与在类A方法中定义的函数不同。
我想你是在谈论文档表示,就像它是为,也许文档更清晰?这是关于可选参数的,比如def fa=None,b=None请参见此答案。方括号表示法不是代码,它是一种描述语言语法的方法,称为Backus Naur form。它广泛用于许多语言的文档,而不仅仅是python。这种风格似乎没有真正的编码,所以文档表示只是表示,它并不表示真正的代码?完全正确!现在您的目标是什么,编写一个接受可选参数的函数?你知道实现这一点的一些方法吗?在这种情况下,将“无”等同于“假”不是一个好主意。如果a或b的值为0或空字符串怎么办也有其危险性。测试not None可能会更好,就像not a is None:About is None vs.==None:,@cdarke与None这样的单例比较应该始终使用is或is运算符,而不是相等运算符。谢谢,我们学习和生活。默认情况下,python使用内存引用来检查不同于原语的对象实例是否相等。但是,python中的运算符可以被覆盖,例如_eq__。这意味着a和b不能保证是一个简单的参考检查。它可能尝试访问None实例中的字段,然后出错。另一方面,is关键字只会执行引用测试-删除潜在错误。由于操作更简单,它的性能也会更快1。如果我们可以用这种方式定义可选参数,目前没有-用哪种方式?你是说用方括号表示法吗?正如我试图解释的,这不是python语法,而是Backus Naur表单——它只是一个文档标准。2.模块级函数是在包含_main _的模块中定义的函数-这与在类A方法中定义的函数不同。谢谢。你可以写下这个作为答案,我会接受的。