无法从导入的函数中调用函数
Cannot call function from within imported function
我有 2 个文件,第一个文件名为 function_call_test.py 并包含以下代码;
from Strategy_File import strategy
def function_1():
print('This works')
strategy()
第二个文件名为 Strategy_File.py,包含以下代码;
def strategy():
print('got here')
function_1()
当 运行 第一个脚本时,我得到“NameError: name 'function_1' is not defined”。
我认为当您导入一个函数时,它会被添加到导入模块命名空间中。如果是这样,为什么 strategy() 看不到 function_1()?
同样重要的是,我该如何完成这项工作。以上仅用于演示目的,我有理由希望 strategy() 在一个单独的模块中。
Python 3.6,Windows 7-64,Visual Studio 2019 和 IDLE
您必须将每个名称导入到使用它的文件中。所以需要把Strategy_File.py
修改成这样:
from function_call_test import function_1
def strategy():
print('got here')
function_1()
但是现在你又遇到了一个新问题:循环导入。 Python 不允许这样做。因此,您将不得不想出一种不同的方式来组织您的功能。
此错误由 Strategy_File.py 引起,缺少 function_1() 的定义。
在顶部的 Strategy_File.py 中添加这一行会有所帮助。
编辑:循环导入无济于事。对于错误信息,我们深表歉意。
Python 是静态范围的。查找自由变量(例如 function_1
)会在 strategy
被 定义 的范围内进行,而不是在它被调用的范围内。由于 strategy
是在模块 Strategy_File
的全局范围内定义的,这意味着要查找 Strategy_File.function_1
,并且该函数未定义。
如果你想让strategy
在current全局范围内调用一些东西,你需要定义它来接受一个可调用的参数,并在你调用时传递所需的函数呼叫 strategy
.
# Strategy_File.py
# f is not a free variable here; it's a local variable
# initialized when strategy is called.
def strategy(f):
print('got here')
f()
和
# function_call_test.py
from Strategy_File import strategy
def function_1():
print('This works')
# Assign f = function_1 in the body of strategy
strategy(function_1)
我有 2 个文件,第一个文件名为 function_call_test.py 并包含以下代码;
from Strategy_File import strategy
def function_1():
print('This works')
strategy()
第二个文件名为 Strategy_File.py,包含以下代码;
def strategy():
print('got here')
function_1()
当 运行 第一个脚本时,我得到“NameError: name 'function_1' is not defined”。 我认为当您导入一个函数时,它会被添加到导入模块命名空间中。如果是这样,为什么 strategy() 看不到 function_1()?
同样重要的是,我该如何完成这项工作。以上仅用于演示目的,我有理由希望 strategy() 在一个单独的模块中。
Python 3.6,Windows 7-64,Visual Studio 2019 和 IDLE
您必须将每个名称导入到使用它的文件中。所以需要把Strategy_File.py
修改成这样:
from function_call_test import function_1
def strategy():
print('got here')
function_1()
但是现在你又遇到了一个新问题:循环导入。 Python 不允许这样做。因此,您将不得不想出一种不同的方式来组织您的功能。
此错误由 Strategy_File.py 引起,缺少 function_1() 的定义。
在顶部的 Strategy_File.py 中添加这一行会有所帮助。
编辑:循环导入无济于事。对于错误信息,我们深表歉意。
Python 是静态范围的。查找自由变量(例如 function_1
)会在 strategy
被 定义 的范围内进行,而不是在它被调用的范围内。由于 strategy
是在模块 Strategy_File
的全局范围内定义的,这意味着要查找 Strategy_File.function_1
,并且该函数未定义。
如果你想让strategy
在current全局范围内调用一些东西,你需要定义它来接受一个可调用的参数,并在你调用时传递所需的函数呼叫 strategy
.
# Strategy_File.py
# f is not a free variable here; it's a local variable
# initialized when strategy is called.
def strategy(f):
print('got here')
f()
和
# function_call_test.py
from Strategy_File import strategy
def function_1():
print('This works')
# Assign f = function_1 in the body of strategy
strategy(function_1)