Python:(**)的关联性未按预期运行

Python:(**)的关联性未按预期运行,python,Python,我有以下代码: from __future__ import print_function a = lambda i=1: print('Line 1') or i if i else 1 b = lambda j=1: print('Line 2') or j if j else 2 c = lambda k=1: print('Line 3') or k if k else 3 d = lambda l=1: print('Line 4') or l if l else 4 q = a(

我有以下代码:

from __future__ import print_function

a = lambda i=1: print('Line 1') or i if i else 1
b = lambda j=1: print('Line 2') or j if j else 2
c = lambda k=1: print('Line 3') or k if k else 3
d = lambda l=1: print('Line 4') or l if l else 4

q = a(True)**b(True)**c(True)**d(True)
运算符
**
是右关联的。因此,当解析器/解释器遍历
q
中给出的字符串时,它应该调用
d
,然后调用
c
,然后。。。最后
a
。对吗?没有

它打印: 第1行 第2行 第3行 第4行

开始这一切的原因是,我认为我可以想出一种非常聪明的方法来滥用运算符的关联性,以便在相同的连续行上向后打印字符串,

因此,
**
运算符序列的操作数将从左到右求值

语言规范中有以下注释:

因此,在幂运算符和一元运算符的非偶合序列中,运算符从右向左求值(这不限制操作数的求值顺序):
-1**2
导致
-1

请注意有关操作数求值顺序的部分。因此Python对
a**b**c
的计算如下:

t1 = a
t2 = b
t3 = c
t4 = t2 ** t3
t5 = t1 ** t4
t5
是表达式的值。

因此,
**
运算符序列的操作数将从左到右求值

语言规范中有以下注释:

因此,在幂运算符和一元运算符的非偶合序列中,运算符从右向左求值(这不限制操作数的求值顺序):
-1**2
导致
-1

请注意有关操作数求值顺序的部分。因此Python对
a**b**c
的计算如下:

t1 = a
t2 = b
t3 = c
t4 = t2 ** t3
t5 = t1 ** t4
t5
是表达式的值。

借用

在幂运算符和一元运算符的非偶数序列中 操作符从右向左求值(这不限制 操作数的求值顺序

这里有一些可以做你想做的事情-

from __future__ import print_function

print_list = [
    lambda: print('Line 1') ,
    lambda: print('Line 2') ,
    lambda: print('Line 3') ,
    lambda: print('Line 4') ,
    ]

_ = [f() for f in print_list[::-1]]
借用

在幂运算符和一元运算符的非偶数序列中 操作符从右向左求值(这不限制 操作数的求值顺序

这里有一些可以做你想做的事情-

from __future__ import print_function

print_list = [
    lambda: print('Line 1') ,
    lambda: print('Line 2') ,
    lambda: print('Line 3') ,
    lambda: print('Line 4') ,
    ]

_ = [f() for f in print_list[::-1]]

它是右关联的,即
x**y**z==x**(y**z)
。您不知道的是,
x**y
中的左侧总是在右侧之前求值。现在,问题是什么?哦!将来,是否有一份文件显示了这种比较?我查找了它,但找不到确切的来源。它是右关联的,即
x**y**z==x**(y**z)
。您不知道的是,
x**y
中的左侧总是在右侧之前求值。现在,问题是什么?哦!将来,是否有一份文件显示了这种比较?我查找了它,但找不到确切的源代码。“Python没有指定计算二进制运算符的操作数的顺序”-。它没有做的是将运算符的优先级或关联性与求值顺序联系起来。我在谷歌搜索中找不到这一点。谢谢你的链接。我修改了我的答案,“Python没有指定计算二进制运算符的操作数的顺序”-。它没有做的是将运算符的优先级或关联性与求值顺序联系起来。我在谷歌搜索中找不到这一点。谢谢你的链接。我已经修改了我的答案。