例如:
def my_function(arg_1=None, arg_2=0):
determination = arg_1 or arg_2 or 'no arguments given!'
print(determination)
return determination
当不带参数调用时,上述函数将打印并返回 'no arguments given!'
Python为什么要这样做?如何最好地利用这一功能?
or
”表达式对赋值的作用:我们有时会在Python中看到这样的示例,以三元赋值代替条件表达式(实际上,这有助于启发该语言添加条件语句)。
x = a or b
如果bool(a)
返回False
,则x
分配值为b
这是一个条件表达式的示例,该条件表达式可以完成相同的任务,但可能不那么神秘。
def my_function(arg_1=None, arg_2=0):
determination = arg_1 if arg_1 else arg_2 if arg_2 else 'no arguments given!'
print(determination)
return determination
过多重复此语法被认为是不好的样式,否则单行就可以了。缺点是,它
是 一个有点重复。
or
表达方式基本情况,x or y
返回x
如果bool(x)
求值True
,否则它计算y
,(见供参考的文档)。因此,一系列or
表达式具有返回计算的第一个项目True
或最后一个项目的效果。
例如
'' or [] or 'apple' or () or set(['banana'])
返回'apple'
,第一个评估为的项目True
,以及
'' or [] or ()
返回()
,即使它的值为False
。
and
使用为了便于比较,x and y
回报率x
,如果bool(x)
计算结果为False
,否则返回y
。
and
当您考虑到条件and
序列中的所有条件都需要评估True
以使控制流沿着该路径前进时,以这种方式工作是有意义的,并且当您遇到一个条件序列时,继续评估那些项目是没有意义的那就是False
。
and
用于分配的实用程序并不像using那样明显or
,但在历史上曾被用于三元分配。也就是说,在此更清晰直接的构造可用之前:
a = x if condition else y
与布尔运算符形成的等效项是:
a = condition and x or z # don't do this!
尽管其含义是基于对Pythonand
和or
评估的全面理解而得出的,但其可读性不及三元条件,因此最好完全避免。
必须谨慎使用布尔表达式进行赋值。
绝对不要将其and
用于分配,这很容易引起错误,很容易混淆。样式专家会发现or
for赋值的使用不太可取(比更冗长的三元if
条件else
),但是我发现它在专业的Python社区中是如此普遍,以至于它是惯用的。
如果您选择使用它,请谨慎行事,要理解到final元素(无论达到什么值)将始终返回而不管其评估如何,因此,final元素可能应该是一个 文字
,这样您就知道您拥有一个很好的默认后备为您的变量。
我正在编写一个安全系统,拒绝未经授权的用户访问。 它按预期授予授权用户访问权限,但也允许未经授权的用户进入! 为什么会发生这种情况?我已经明确声明,只有当等于Kevin、Jon或Inbar时,才允许访问。我也尝试过相反的逻辑,,但结果是一样的。 注意:这个问题旨在作为这个非常常见的问题的规范重复目标。还有另一个热门问题如何针对单个值测试多个变量?这有同样的基本问题,但比较目标是相反的。这个问题不应
我有以下功能: 此代码给出了
这部分是学术性的,就我的目的而言,我只需要四舍五入到小数点后两位;但我很想知道发生了什么会产生两种略有不同的结果。 这是我编写的测试,将其缩小到最简单的实现: 但它失败了,输出如下: 有谁能详细解释一下是什么原因导致 我在一个答案中寻找的一些要点是:精度损失在哪里?哪种方法是首选的,为什么?哪一个实际上是正确的?(在纯数学中,不可能两者都是对的。也许两者都是错的?)对于这些算术运算,有没有更好的解
问题内容: Python文档明确指出了调用。但是似乎在许多情况下,情况恰恰相反。它何时何地发生的原因在哪里记录,如何确定我的对象或方法将被调用。 编辑:只是为了澄清,我知道在优选中调用,但是我不清楚为什么优先于调用,而后者是文档状态将发生的原因。 编辑:从马克·迪金森的答案和评论中,它看起来像是: 丰富的比较替代 是它自己的,以它的(以及类似的,等等) 如果左对象是内置类或新样式类,而右对象是其子
问题内容: 我将如何在SELECT查询中反转此路径: 为了 其中/是定界符,并且在一行中可以有许多定界符 问题答案: 最简单的方法可能是编写一个存储的pl / sql函数,但是可以单独使用SQL(Oracle)来完成。 这将分解子路径中的路径: 然后,我们使用来重构反向路径:
问题内容: 做这个: 意思是这样的: 如果是这样,我对Dive Into Python中的示例5.14 完全感到困惑。密钥如何既等于“名称”又等于项目?另一方面,“和项目”是否只是问项目是否作为变量存在? 问题答案: 意味着。 请记住,这有几种可能。例如将评估为。