如何访问作为参数发送的列表以在函数内部运行?
def my_fun(mylist):
mylist[0]=a
mylist[1]=b
mylist[2]=c
mylist[3]=d
e=a+b
f=c+d
return (e,f))
val = [1,2,3,4]
my_fun(val)
NameError:name' a'未定义
答案 0 :(得分:0)
您不希望将列表索引分配给变量(mylist [0] = a),反之亦然(a = mylist [0]),以便在列表作为传递列表传递时存储值参数。
def my_fun(mylist):
a = mylist[0]
b = mylist[1]
c = mylist[2]
d = mylist[3]
e=a+b
f=c+d
return (e,f)
def main():
val = [1,2,3,4]
x = my_fun(val)
print(x)
main()
答案 1 :(得分:0)
您正在寻找的是globals()
范围字典。 Python有2个函数locals()
,它们在范围内返回局部变量字典,而globals()
返回范围外的全局变量。这两个函数都返回dict
,该值在执行过程中会发生变化。因此,您可以在代码期间进行更改,检查更改,甚至人为更改。
假设您具有这种类型的代码:
a = 4;
b = 3;
c = 5;
d = 2;
# version 1
def my_fun(mylist):
global a,b,c,d; # mentioning them as global variables
mylist[0]=a
mylist[1]=b
mylist[2]=c
mylist[3]=d
e=a+b
f=c+d
return (e,f)
通过声明global a,b,c,d
,将它们暂时放置在全局名称空间中。这样,您可以从函数内部访问全局变量。
# or version 2
def my_fun2(mylist):
mylist[0]=globals()['a']
mylist[1]=globals()['b']
mylist[2]=globals()['c']
mylist[3]=globals()['d']
e=globals()['a']+globals()['b']
f=globals()['c']+globals()['d']
return (e,f)
通过调用globals()
并调用变量名 ['a']
,您可以直接访问全局名称空间,并且可以像任何字典一样随意更改它。但是要小心,更改以__
开始和结束(下划线)的变量[如__name__
可能会使您的代码混乱,有时甚至会导致解释器混乱。因此,请随时跟踪您要更改的内容以及要更改的内容。
#version 3
def my_fun3(mylist):
mylist[0]=globals()['a']
mylist[1]=globals()['b']
mylist[2]=globals()['c']
mylist[3]=globals()['d']
# changing of the global variables.
globals()['a'] = mylist[0]+mylist[1];
globals()['b'] = mylist[2]+mylist[3];
请谨慎使用此信息,并在提交代码之前先在解释器(IDE)中对其进行测试。
要获取有关函数的更多信息(名称,参数名称,常量等),您可以执行下一步:
>>def a():return 0
>>a.__code__ #grabs code object
>>a.__code__.co_name # gets the name of the function you can search
有关可以从__code__
对象调用的内容的更多信息是dir(f_name.__code__)
,在这种情况下, f_name 是a
。