Python не видит функцию (про области видимости)

proga.py:

import f1 as f1

def func():
    return 'func'

f1.f1()

f1.py:

def f1():
    func()

Не работает :( Ошибка в f1.py: "func() is not definned". Как из f1.py увидеть "func" ?


Ответы (2 шт):

Автор решения: Kirill Vercetti
# f1.py
from proga import func
func()

Так делать нет смысла import f1 as f1, у вас и так имя f1. Если в proga.py будет одноименная функция func, тогда импорт нужно делать с алиасом.

Ну и конечно не надо забывать о рекурсивном импорте, это когда вы из одного модуля импортируете что-то в другом, в котором в свою очередь импортируете что-то из первого. Таких вещей нужно избегать!

→ Ссылка
Автор решения: Max Ignatyev

Для чего вам это нужно? Если f1 подразумевается как либа, это неправильная логика и так делать нельзя, классы и функции из либы не должны использовать какие-либо внешние функции и классы. Но эта либа может зависеть от других и можно сделать так:

func.py

def func():
    return 'func'

f1.py

from func import func
def f1():
    func()

Либо же можно передавать функцию func как аргумент для f1.

→ Ссылка