Параметр функции сам по себе является локальной переменной для функции.
Итак, в def f(lst, lst1):
вы определяете две новые переменные с именами lst
и lst1
, которым присваиваются значения, которые вы называете функция с. Наименование переменных так же, как и переменные, которые вы передаете, не влияет на это. Фактически, хорошие Python редакторы, такие как PyCharm, будут предупреждать вас, когда вы будете делать это, вы «затеняете» глобальное.
Если вы измените список, назначенный lst1
, это изменится список, на который указывает глобальный (это тот же список), но если вы назначите что-то новое для lst1
, он больше не будет указывать на этот список, и вы не увидите изменения в глобальной переменной.
Например:
def change_and_assign(xs):
# adds 'b' to the list pointed to by local xs, but also global; it's the same list
xs.append('b')
# assigns a new list to the local, but doesn't modify global xs
xs = ['c']
xs = ['a']
change_and_assign(xs)
print(xs)
Будет напечатано ['a', 'b']
, а не ['c']
.
Вам следует либо вернуть значение, которое вы ищете, либо присвоить его глобальному значению, которое не не в тени (но я бы порекомендовал предыдущее):
def change_and_return_new(xs):
# same as before
xs.append('b')
# function will return the value and return value can be assigned
return ['c']
xs = ['a']
# assign return value to ys
ys = change_and_return_new(xs)
print(xs, ys)
def change_and_assign_global(xs):
# declare that zs should be a global
global zs
# same as before
xs.append('b')
# assign a new list to the global zs
zs = ['c']
xs = ['a']
# this will modify xs, but also create a global zs
change_and_assign_global(xs)
print(xs, zs)
Если вы не понимаете, что происходит, перечитайте и посмотрите, получите ли вы это, или посмотрите другую информацию о глобальном и локальном переменные и область видимости - это важно получить, если вы хотите написать Python код самостоятельно, без труда отследить ошибки.