Параметр списка не работает внутри функции - PullRequest
0 голосов
/ 20 декабря 2018

Допустим, у меня 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)
   >>> ''

1 Ответ

0 голосов
/ 20 декабря 2018

v1, ..., v4, определенные внутри assigner, являются локальными для этой функции и не влияют на те, которые были определены вне ее.Любая полуприличная 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 раз это было бы плохим предложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...