使用条件语句设置python变量

2024-05-29 10:30:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了这行代码

ax = ax or plt.gca()

这里是29号线

https://github.com/Santosh-Gupta/adjustText/blob/master/adjustText/init.py

这个表达式到底是如何工作的?你知道吗


Tags: or代码httpsgithubmastercominitplt
3条回答

如果第一个操作数的计算结果为True,则表达式的计算结果为第一个操作数:

>>> True or "second"
True

>>> "first" or "second"
"first"

如果第一个操作数的计算结果为False,则表达式的计算结果为第二个操作数:

>>> False or "second"
"second"

>>> 0 or "second"
"second"

>>> None or "second"
"second"

以下是一些计算结果与False相同的值:

False
0
None
""
[]
{}    

所以,在这一行:

ax or plt.gca()

如果axNone,则表达式的计算结果是第二个操作数plt.gca()。你知道吗

>>> None or plt.gca()
plt.gca()

ax将假定axplt.gca()
的结果之间的or运算的结果 详见Wikipedia。你知道吗

解释

您可以将第29行理解为向ax提供回退值的一种方法,
如果ax作为函数参数传递(因此它不是None),传递的值将分配给ax
否则(ax为无)plt.gca()将分配给ax
因为None OR plt.gca()的结果是plt.gca()它将返回的任何东西。你知道吗

第29行是:ax = ax if ax is not None else plt.gca()

在所引用代码的line 29范围内,ax是默认为None的函数参数。你知道吗

def get_text_position(text, ax=None): #28
    ax = ax or plt.gca()              #29
    [...]                             #30

ax or plt.gca()赋值给ax是为了确保ax的值对于函数作用域的其余部分不是None。如果使用ax参数的非None值调用函数,则该行没有任何效果,因为对右侧表达式的求值将在or处停止,因为左侧操作数不是None已经满足了这一要求。 如果没有ax参数被传递给函数,或者如果它被显式设置为None,则对ax or plt.gca()的求值会导致后者的返回值,因为ax,即None,不满足表达式,因此or后面的余数必须覆盖它。^{}'s documentation表示在本例中第29行调用的方法将确保返回none-null对象。你知道吗

长话短说,or运算符不仅适用于布尔操作数,而且适用于None和非None值,就像它适用于FalseTrue一样。你知道吗

相关问题 更多 >

    热门问题