Python использует функцию функции внутри другого файла

У меня есть еще один вопрос для новичков, по которому я не могу найти решение самостоятельно, особенно потому, что могу неправильно называть вещи.

У меня есть два файла Python. И мне нужно это сделать:

Первый файл:

def Main():
     def whatever(a,b):
          #do whatever

Второй файл:

Import Main
Main.whatever(str a, str b)

Как мне это сделать?

Вы этого не сделаете. whatever - это деталь реализации функции main, если бы она была общедоступной в модуле, она не была бы вложенной.

Cory Kramer 11.04.2018 14:05

Внутренняя функция не может быть доступна вне ее области, если вы не вернете ее из Main.

cs95 11.04.2018 14:05

Спасибо за ответ. Чем мне это сделать. Главное - это окно с этикеткой внутри. Из файла два я хочу установить текст метки в главном. Как мне перестроить свой код, чтобы получить доступ к коду этой метки?

K-Doe 11.04.2018 14:09
2
3
92
3

Ответы 3

Во-первых, вы не импортируете такие функции, вы импортируете модули.

Если у вас есть файл с именем main.py, содержащий функцию Main, вы можете:

import main
main.Main()

или же

from main import Main
Main()

Во-вторых, функция whatever является локальной в Main и не существует после выхода из функции Main. Возможно, вы захотите использовать для этого класс:

class Main(object):
    def whatever(self, a, b):
        # Do something

А затем назовите это так:

main = Main()
main.whatever(something, something_else)

Вы пытаетесь забить гвозди кухонной раковиной: |

cs95 11.04.2018 14:12

test.py

class Example:
    def printhello():
        print "hello"

Другой файл python может использовать это

import test
ex = test.Example()

позже вы можете использовать ex.printhello()

или же

from test import printhello

можно использовать только printhello()

Вы можете вернуть указатель на функцию из Main и использовать его в других местах.

Первый файл:

def Main():
 def whatever(a,b):
      #do whatever
 return whatever # Return function pointer

Второй файл:

from main import Main
whatever = Main()
whatever(a,b) # Call whatever

Другие вопросы по теме