【问题标题】:List parameter not working inside function列表参数在函数内部不起作用
【发布时间】:2019-05-21 07:51:27
【问题描述】:

假设我有 4 个空变量和 2 个列表:

v1 = ""
v2 = ""
v3 = ""
v4 = ""

list_1 = ['2', '7', '18', '3']
list_2 = ['75', '8', '0', '13']

现在我想创建一个函数,该函数将使用列表作为参数为空变量赋值:

def assigner(list_a):
    for item in list_a:
      v1 = list_a[0]
      v2 = list_a[1]
      v3 = list_a[2]
      v4 = list_a[3]

所以,我调用了该函数,然后尝试使用一个变量来检查是否已根据列表分配了新值。但我看到的只是''。这里有什么问题?

   assigner(list_1)
   print(v2)
   >>> ''

【问题讨论】:

    标签: python-2.7 list function parameters


    【解决方案1】:

    assigner 中定义的v1, ..., v4 是该函数的本地函数,不会影响在它之外定义的函数。任何半体面的 IDE 都会显示警告,这些局部变量会影响同名的全局变量。

    不相关,但该循环没有用处。

    这里使用一个函数是多余的,你可以解包列表:

    v1, v2, v3, v4 = ['2', '7', '18', '3']
    

    如果你坚持使用函数(或者如果你需要一个函数,即有一些逻辑而不是简单地赋值),请确保return函数中的变量:

    # no need to define v1, ..., v4 outside
    
    def assigner(list_a):
        v1 = list_a[0]
        v2 = list_a[1]
        v3 = list_a[2]
        v4 = list_a[3]   
        # some magic logic
        return v1, v2, v3, v4
    
    v1, v2, v3, v4 = assigner(list_1)
    

    有些人会建议实际使用 global 变量,但 9/10 次这将是一个糟糕的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多