我碰到了这段代码
ax = ax or plt.gca()
这里是第29行
https://github.com/Santosh-Gupta/adjustText/blob/master/adjustText/init.py
此表达式如何工作?
答案 0 :(得分:4)
ax
将假设or
和ax
之间的plt.gca()
操作的结果
有关详细信息,请参见Wikipedia。
您可以将第29行理解为向ax
提供后备值的一种方式,
如果ax
作为函数参数传递(因此不是None
),则传递的值将分配给ax
,
否则(ax
为None)plt.gca()
将分配给ax
因为None OR plt.gca()
的结果是plt.gca()
它将返回的任何内容。
您可以将第29行显示为:ax = ax if ax is not None else plt.gca()
答案 1 :(得分:0)
在您引用的代码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
。如果使用None
参数的非ax
值调用函数,则该行无效,因为右边表达式的求值停止在or
处,即已经满足于其左操作数不是None
。
如果没有将ax
参数传递给该函数,或者将其显式设置为None
,则对ax or plt.gca()
的求值将导致后者的返回值为ax
, None
不满足该表达式,因此or
之后的其余部分必须覆盖该表达式。 matplotlib
's documentation表示在这种情况下,在第29行被调用的方法将确保返回一个非空对象。
长话短说,or
运算符不仅适用于布尔操作数,而且对None
和非None
值的作用方式与{{ 1}}和False
。
答案 2 :(得分:0)
如果第一个操作数的值为UNION
,则表达式的值为第一个操作数:
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()
为ax
,则表达式的值为第二个操作数None
。
plt.gca()