使用条件语句设置python变量

时间:2018-08-05 01:01:32

标签: python

我碰到了这段代码

ax = ax or plt.gca()

这里是第29行

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

此表达式如何工作?

3 个答案:

答案 0 :(得分:4)

ax将假设orax之间的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()的求值将导致后者的返回值为axNone不满足该表达式,因此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()