假设您有以下代码来定义这个简单的函数:
def a(x,y,b):
z=[x,y]
c=b*2
return c我希望使用值z[0]作为参数b的输入来调用此函数。如果我尝试以以下方式调用该函数:
a(x,y,z[0])我得到一个错误,因为变量'z‘是在函数内部定义的,直到函数运行时才存在。
我认为当一个函数被调用时,python会简单地将插入的输入替换为函数内部的相关参数,以执行所需的计算,而不依赖于输入变量的预先存在。我的意思是,例如,在我的函数中,如果我插入作为输入的z[0],我会期望python简单地接受数字z,并将它们复制到函数中,代替b,然后通过接受数组z的第一个元素来执行乘法。
我用函数的期望输出一步一步地做了一个例子来澄清这个问题:在定义了上面描述的函数之后,我用这些输入调用它
a(2,3,z[0])下面是该函数的执行步骤:
1)它计算数组z=[2,3]
2)它计算c=z[0]*2,即c=2*2
3)它返回c=4
但是,第2)步不会发生,因为变量z是在函数内部创建的。我想问的是,在函数本身执行期间,是否有办法让函数“复制”函数内部的输入数字z[0],而不是参数b,这样python就不会将z[0]视为不存在的变量,而是将其视为替换b的一段简单代码。
发布于 2020-05-09 06:08:11
太可怕了,但我开始觉得这就是你想要的。但是不要这样做。真的。
def a(x,y,b):
z=[x,y]
c=eval(b)*2
return c
r = a(2,3,'z[0]')
print(r)如果您对这种方法的工作原理感到好奇,那么它会延迟表达式z[0]的计算,直到在函数的作用域中定义z之后,而不是在调用者的作用域中无法计算它。
https://stackoverflow.com/questions/61687191
复制相似问题