相关疑难解决方法(0)

使用pop(),list [-1]和+ =时,python中的求值顺序是什么?

a = [1, 2, 3]
a[-1] += a.pop()
Run Code Online (Sandbox Code Playgroud)

这导致了[1, 6].

a = [1, 2, 3]
a[0] += a.pop()
Run Code Online (Sandbox Code Playgroud)

这导致了[4, 2].什么评估顺序给出了这两个结果?

python list operator-precedence indices

39
推荐指数
4
解决办法
3120
查看次数

依赖Python函数参数评估顺序是否安全?

假设在Python中从左到右计算函数参数是否安全?

参考说明它发生的方式,但也许有一些方法来改变这个可能会破坏我的代码的顺序.

我想要做的是为函数调用添加时间戳:

l = []
l.append(f(), time.time())
Run Code Online (Sandbox Code Playgroud)

我知道我可以按顺序评估参数:

l = []
res = f()
t = time.time()
l.append(res, t)
Run Code Online (Sandbox Code Playgroud)

但它看起来不那么优雅,所以如果我可以依赖它,我更喜欢第一种方式.

python arguments operator-precedence

27
推荐指数
2
解决办法
3241
查看次数

如何证明参数评估在Python中"从左到右"?

例如,在JavaScript中我们可以编写这样的程序:

var a = 1;
testFunction(++a, ++a, a);
function testFunction(x, y, z){
      document.writeln("<br />x = " + x);
      document.writeln("<br />y = " + y);
      document.writeln("<br />z = " + z);
}
Run Code Online (Sandbox Code Playgroud)

我们会得到一个输出:

x = 2
y = 3
z = 3
Run Code Online (Sandbox Code Playgroud)

这意味着在JavaScript中从左到右真正地评估参数.在C中我们会得到输出

x = 3
y = 3
z = 3
Run Code Online (Sandbox Code Playgroud)

我想知道我们是否可以在Python中做同样的事情,或者它是不可能的,因为它是价值参考语言的传递?

我做了一个简单的程序,但我不认为这证明了什么:

x = 2
def f(x, y, z):
    print(x, y, z)

f(x*2, x*2, x**2)
print(x)
Run Code Online (Sandbox Code Playgroud)
4 4 4
2
Run Code Online (Sandbox Code Playgroud)

当我调用它时,Python不会让我在函数参数中做任何新的赋值(例如f(x=4, x, x)或类似的东西).

python parameter-passing operator-precedence

8
推荐指数
1
解决办法
1232
查看次数