python how to define function with optional parameters by square brackets?
我经常会找到一些定义为open(name[, mode[, buffering]])的函数,我知道它意味着可选参数。python文档说它是模块级函数。当我试图用这种样式定义函数时,它总是失败的。例如江户十一〔一〕号不工作。有人能告诉我模块级是什么意思吗?我如何用这种样式定义函数?
- 我想你是在谈论医生的代表性,就像是对python2,也许python3医生更清楚?它是关于可选参数的,比如def f(a=None, b=None)。
- 看到这个带有可选参数的函数的答案了吗?.
- 方括号符号不是代码,它是一种描述语言语法的方法,称为巴科斯-诺尔形式。它广泛用于多种语言的文档,而不仅仅是Python。en.wikipedia.org/wiki/augmented_backus-naur_表单
- 这种样式似乎没有真正的编码,所以文档表示只是表示,而不表示真正的代码?
- 确切地!现在,编写接受可选参数的函数的目标是什么?你知道实现这一目标的一些方法吗?
- 至于你关于"模块级"在你所读内容中的含义的问题,很难说不知道上下文是什么,但请放心,它与你真正想要知道的内容完全无关(如何允许函数接受可选提供的参数)。(一般的描述可能是模块级代码——和模块级函数——出现在模块内部,但可能没有帮助)
- 这个问题肯定是重复的吗?但我找不到合适的问题和匹配的答案。(是的,我看到了@jq发布的链接。但是,在用可选参数定义函数时,不要使用*args参数!这不是20世纪80年代)。这个答案解决了另一个问题。
"1。如果我们可以用这种方式定义可选参数(目前没有)"
方括号符号不是python语法,它是backus naur形式-它只是一个文档标准。
模块级函数是模块中定义的函数(包括__main__)—这与类(方法)中定义的函数不同。
到目前为止,我还没有得到预期的答案。最初,当我看到open(name[, mode[, buffering]])的这种表达方式时,我真的想知道这是什么意思。这显然意味着可选参数。在那一刻,我发现用可选参数定义函数可能是一种不同的方法(不同于像f(a,b,c=None,d='balabala')),但不仅告诉我们它是可选参数。这篇文章的好处可以帮助我们使用可选参数,但没有默认值,所以我认为这是一种更清晰、更简单的定义可选参数的方法。我真正想知道的是两件事:1.如果我们可以用这种方式定义可选参数(目前没有)2。如果有人能解释模块级功能意味着什么,那就太好了。我非常感谢以上的回答和评论!谢谢
- "1。如果我们可以用这种方式定义可选参数(目前没有)"-用哪种方式?你的意思是使用方括号符号吗?正如我试图解释的,这不是python语法,而是backus naur形式——它只是一个文档标准。2。模块级函数是模块中定义的函数(包括__main__)—这与类(方法)中定义的函数不同。
- 谢谢您。你可以写这个作为答案,我接受。
这就是你要找的吗?
1 2 3 4 5 6 7 8 9 10 11
| >>> 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()
>>> |
- 在这种情况下,将None与False等同起来不是一个好主意。如果a或b的值为0或""(空字符串),该怎么办?
- !=也有其危险性。非None的测试可能比if not a is None:更好。
- @cdarke blimey即时评论。如果你能告诉我为什么!= None是危险的,我很乐意再次改变它。
- 关于is None与== None:stackoverflow.com/questions/14247373/…,stackoverflow.com/questions/2209755/python-operation-vs-is-n‌&8203;ot,python.org/dev/peps/pep-0290/无测试,python.org/dev/peps/pep-0008/编程建议
- @cMarke"像"没有"这样的单子比较应该总是用"是"或"不是",永远不要用相等运算符。"谢谢你,我们生活和学习。
- 默认情况下,python使用内存引用检查Object实例(不同于原语)的相等性。但是,可以覆盖python中的运算符,如__eq__。这意味着,a和b不能保证是一个简单的参考检查。它可能会尝试访问None实例中的字段,然后出错。另一方面,is关键字只会做一个引用测试——消除潜在的错误。(由于操作简单,它的执行速度也更快)
- Java世界中的一个类似情况是,EDCOX1 OR 18引用进行引用测试,而EDCOX1 OR 19将进行自定义比较。这使得EDOCX1·18是爪哇中EDOCX1和21检查的首选选择,就像EDOCX1 17Ω是Python中首选的方式一样。