Объявление несуществующей функции - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь понять, как работает python, и мне нужно небольшое объяснение.
Итак, я написал очень короткий пример, и мне трудно понять, почему он не работает. Я создаю test.py:

def a():
    print('a() try to call non existing b()')
    b()

На этом этапе, если я пишу в python shell

>>> import test
>>> test.a()

Это не работает, и это нормально, потому что b() неизвестно.
Но когда я пишу следующие строки, это все равно не работает.

>>> import test
>>> def b():
...     print('b()')
... 
>>> test.a()

Функция в модуле python может вызывать функцию только в текущем модуле и импортированных модулях?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Вы можете переопределить b

Как переопределить функции в Python

import test

def b():      # definition of b
  print('b()')

test.b = b  # function b redefined for test

test.a()   # now this works
2 голосов
/ 10 апреля 2020

Вы должны определить b() в том же test.py, где вы определили a().

Это будет работать, если вы создадите новый модуль python (файл python), в котором определен b(), а затем импортируете этот модуль в test.py

from another_module import b # refers to function b

def a():
    print("this function calls b")
    b()

Что-то вроде тот, что выше, будет работать. Помните, что модуль, который содержит функцию b() и модуль test.py, должен находиться в одном каталоге, чтобы он работал.

Дайте мне знать, если это работает / помогает!

1 голос
/ 10 апреля 2020

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

def a(b):
    print('called a')
    # Use the callable argument
    b()
def x():
    print('x')
a(x)

выводит:

called a
x
...