如何从变量中调用函数? (Python)

Posted

技术标签:

【中文标题】如何从变量中调用函数? (Python)【英文标题】:How do you call a Function from a Variable? (Python) 【发布时间】:2017-10-24 15:34:56 【问题描述】:

在您声明重复之前 我查看了以下内容:python function call with variable

Calling a function of a module from a string with the function's name

Executing a function by variable name in Python

https://ubuntuforums.org/showthread.php?t=1110989

还有更多,但没有运气。


我正在开发一款游戏。现在我正在开发 SAVE/LOAD 功能,但我一无所获。

我想从另一个 pytxt 文件中获取一段文本,并让我的主 py 文件读取它,然后调用函数取决于第二个文件中的文本字符串。


脚本1:

#imports

from script2 import SaveCode

#Code

def Test():
    print('Hello, World!')

callable(SaveCode)

脚本2:

SaveCode = Test()

这行不通。有人可以帮帮我吗?

【问题讨论】:

请添加回溯。 callable 只是一个测试是否可以调用某些东西。它是内置的。 Callable() 返回 True 或 False。它不执行函数。 一种方法可以通过字符串'Test()' 告诉Python 执行Test() 函数,但这确实不是 一个好主意当有更清洁、更安全的替代方案时,以这种方式组织您的代码。 您创建一个数据文件,其中包含您想要的数据。当程序启动时,它会读取数据,以便将您的关键变量设置为其初始值。当你想保存游戏时,你将这些关键变量的当前值写入文件。如果数据很简单,您只需使用简单的文本文件即可。但是如果事情很复杂,你可以使用某种结构化的数据文件,比如 JSON。另一种选择是使用 pickle 模块,它可以保存各种 Python 对象并将它们重新加载。 【参考方案1】:

除非您使用 evalexec which isn't recommended 来评估该字符串,否则这将不起作用。

据我所知,您在 script2 中有一个字符串,并希望根据该字符串在 script1 中执行一个函数。你可以做的是定义一个字典,其中包含你映射到你想要调用的函数的字符串:

script1中:

#imports

from script2 import SaveCode

#Code

def Test():
    print('Hello, World!')

functions = 
    'Test': Test


# Assuming that SaveCode = 'Test' in your second script,
# look up the corresponding function
function_to_run = functions[SaveCode]
# and call it
function_to_run() # prints Hello, World!

script2中:

SaveCode = 'Test'

【讨论】:

Traceback(最近一次调用最后):文件“C:\csc1AB\PROJECTS_\TEST\script1.py”,第 3 行,在 from script2 import SaveCode File“C:\csc1AB\ PROJECTS_\TEST\script2.py",第 1 行,在 函数[SaveCode]() NameError: name 'functions' is not defined 您在第一个脚本中缺少functions = ... 我将您答案中的所有内容都复制到了 2 个脚本中 @ChaseBarnes:我在那个答案中没有看到任何内容说你应该替换这两个脚本。无论如何,这不是本意。 "#假设你的第二个脚本中SaveCode = 'Test',查找对应的函数#并调用它"

以上是关于如何从变量中调用函数? (Python)的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中调用函数之前修改函数的本地变量

从Python中存储的字符串调用函数[重复]

如何在MATLAB中调用(运行)“用Python写成的函数或脚本”

python 在类中从一个函数中调用另一个函数中的变量

从 QMainWindow 调用具有变量名的 Python 函数

如何从 Javascript 函数中调用 PL/SQL 变量?