假设我有一个乘法表达式,有许多被乘数(小表达式)
expression = a*b*c*d*....*w
Run Code Online (Sandbox Code Playgroud)
其中例如c是(x-1),d是(y**2-16),k是(x y-60)..... x,y是数字
,我知道c,d,k, j也许为零
我写这个表达式的顺序对于更快的评估很重要吗?
写c d k j 更好 ....*w或python会评估所有表达式,无论我写的顺序如何?
C不保证任何评估顺序所以如下语句f(g1()+g2(), g3(), g4())可能会执行g1(),g2(),g3(),和g4()以任意顺序(虽然f()会后,所有的人都被执行)
那Python怎么样?我对Python 2.7的实验表明,它似乎是从左到右的评估顺序,但我想知道是否指定了这种情况.
测试程序:
def somefunc(prolog, epilog):
print prolog
def f(a, b, *args):
print epilog
return f
def f(text):
print text
return 1
somefunc('f1','f2')(f('hey'),f('ho'),f('hahaha'),f('tweedledee')+f('tweedledum'))
Run Code Online (Sandbox Code Playgroud)
打印
f1
hey
ho
hahaha
tweedledee
tweedledum
f2
Run Code Online (Sandbox Code Playgroud) 对于带有多个参数的print(),我认为它会逐一评估它们.但是,以下代码
a = [1, 2, 3, 4]
print(a, a[:], a.pop(), a, a[:])
Run Code Online (Sandbox Code Playgroud)
版画
[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我以为蟒蛇将评估a第一,然后a[:],然后a.pop(),再a和a[:]再次,这将打印
[1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
那究竟是如何运作的呢?
在我尝试回答这个问题之前,我一直假设参数是按照我们输入它们的方式从左到右计算的。例如我们有一些方法:
def foo(a,b,c)
Run Code Online (Sandbox Code Playgroud)
有没有办法随着时间的推移监视 Ruby 程序中的变量定义和值?如果调用foo 0,1,2如何证明变量按以下顺序赋值?
时间 0: a = 0
时间一: b = 1
时间2: c = 2
我意识到我的例子是微不足道的,因为我有相同类型的参数,a, b, c但是当你引入默认参数、关键字参数和数组参数时,它可能会变得混乱。如果没有人知道答案,我将不胜感激有关如何确定答案的建议。
基本上相当于this的 Ruby 。