Аннотация функции в python 3 получает имя, не определенное ошибку

Я пытаюсь использовать функции аннотации типа python3.

Вот некоторые игрушечные функции без аннотации:

def fa(func, *args):
    return func(*args)
def fb(x:str):
    return x + " returned."
fa(fb, "Newton")

Эти работают нормально. Но как только я добавляю аннотацию для fa, все идет наперекосяк:

def fa(func:function, *args):
    return func(*args)
def fb(x:str):
    return x + " returned."
fa(fb, "Newton")

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/site-packages/IPython/core/interactiveshell.py", line 2883, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-17-193b74f82e47>", line 1, in <module>
    def fa(func:function, *args):
NameError: name 'function' is not defined

Почему это происходит и как я могу обойти это?


person qed    schedule 13.12.2014    source источник


Ответы (2)


Как сообщается в сообщении об ошибке, имя function не определено. Если вы хотите подсказку как функцию, поместите ее в кавычки:

def fa(func: 'function', *args):
person jonrsharpe    schedule 13.12.2014
comment
...так как имя str является определенным, оно является встроенным. - person jonrsharpe; 13.12.2014
comment
Функция не является встроенной? Но тип (fa) - это функция - person qed; 13.12.2014
comment
Верно, но класс с именем function по умолчанию не привязан к имени function, так как вам обычно не требуется прямой доступ к нему (вы определяете функции с помощью def). - person jonrsharpe; 13.12.2014

Поскольку вы определяете переменную в параметрах функции, но этот параметр не существует вне функции. Вам нужно написать

фа (функция = "Ньютон")

person GLHF    schedule 13.12.2014