如何访问列表将参数传递给函数内部的函数?

时间:2017-07-10 12:12:48

标签: python python-3.4

如何访问作为参数发送的列表以在函数内部运行?

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'未定义

2 个答案:

答案 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