почему эта ошибка произошла, когда аргумент находится в области действия функции f ()? - PullRequest
0 голосов
/ 21 апреля 2020
def f(a, *arguments):
    for arg in arguments:
        print(arg)
    return arg
f(5)

Ошибка:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    f(5)
  File "test.py", line 5, in f
    return arg
UnboundLocalError: local variable 'arg' referenced before assignment

если вы измените функцию f () следующим образом

def f(a, *arguments):
    for arg in range(1,4):
        print(arg)
    return arg
f(5)

, то получится следующее:

1
2
3

теперь arg является глобальным в функции. Почему это произошло?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020
def f(a, *arguments):
    for arg in arguments:
        print(arg)
    return arg


f(5)

Так как * arguments пусто, вы никогда не введете l oop. Таким образом, когда вы достигаете return(arg), переменная все еще не определена. Попробуйте позвонить по номеру f(5, [1, 2, 3]), и вы увидите нечто большее, чем ваши ожидания.

0 голосов
/ 21 апреля 2020

@ Ответ чернослива подходит для вашего вопроса. Вы все еще можете вернуть что-то, даже если arguments пусто. Вы можете сделать это, добавив проверку длины аргументов.

def f(a, *arguments):
    if len(arguments):
        for arg in arguments:
            print(arg)
        return arg # will return last element in arguments always
    return -1 # will return default value here

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