Python通过函数名调用函数的几种场景

这篇具有很好参考价值的文章主要介绍了Python通过函数名调用函数的几种场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

除了执行系统命令外,我们有时还需要动态地执行一些python代码,有经验的朋友就会知道可以使用内置函数eval实现这一需求,如eval("print(__file__)"),这还是比较简单的。

但如果要动态执行一个函数,讲的资料就会少一点,这次就要看这个需求该如何实现。

一、通过eval实现

1 通过eval调用同一个类内的函数

class TestA:
    def __init__(self):
        self.config_dict = {
            "be_called_function_name": "self.be_called_function()",
        }
        pass

    def active_call_function(self):
        print("here is active_call_function.")
        be_called_function_name = self.config_dict["be_called_function_name"]
        # 就直接调用。如果有其他参数,一样地传就好了
        # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)()
        eval(be_called_function_name)
        pass

    def be_called_function(self):
        print("here is be_called_function.")

if __name__ == "__main__":
    obj = TestA()
    obj.active_call_function()

2 通过eval调用同一个文件内的一级函数

class TestA:
    def __init__(self):
        self.config_dict = {
            "be_called_function_name": "be_called_function()",
        }
        pass

    def active_call_function(self):
        print("here is active_call_function.")
        be_called_function_name = self.config_dict["be_called_function_name"]
        # 就直接调用。如果有其他参数,一样地传就好了
        # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)()
        eval(be_called_function_name)
        pass

def be_called_function():
    print("here is be_called_function.")

if __name__ == "__main__":
    obj = TestA()
    obj.active_call_function()

二、通过getattr实现

1 通过函数名调用同一个类内的函数

class TestA:
    def __init__(self):
        self.config_dict = {
            "be_called_function_name": "be_called_function",
        }
        pass

    def active_call_function(self):
        print("here is active_call_function.")
        # getaattr(module_name, function_name),module_name传self即可
        be_called_function = getattr(self, self.config_dict["be_called_function_name"])
        # 就直接调用。如果有其他参数,一样地传就好了
        be_called_function()
        pass

    def be_called_function(self):
        print("here is be_called_function.")


if __name__ == "__main__":
    obj = TestA()
    obj.active_call_function()

2 通过函数名调用其他类的函数

class TestA:
    def __init__(self):
        self.config_dict = {
            "be_called_function_name": "be_called_function",
        }
        pass

    def active_call_function(self):
        print("here is active_call_function.")
        # getaattr(module_name, function_name),module_name传被调用的函数所在的类的类实例
        testb_obj = TestB()
        be_called_function = getattr(testb_obj, self.config_dict["be_called_function_name"])
        # 就直接调用。如果有其他参数,一样地传就好了
        be_called_function()
        pass


class TestB:
    def be_called_function(self):
        print("here is be_called_function.")


if __name__ == "__main__":
    obj = TestA()
    obj.active_call_function()

3 通过函数名调用同文件的一级函数

import sys


class TestA:
    def __init__(self):
        self.config_dict = {
            "be_called_function_name": "be_called_function",
        }
        pass

    def active_call_function(self):
        print("here is active_call_function.")
        # getaattr(module_name, function_name),module_name传当前模块名
        module_name = sys.modules['__main__']
        be_called_function = getattr(module_name, self.config_dict["be_called_function_name"])
        # 就直接调用。如果有其他参数,一样地传就好了
        be_called_function()
        pass


def be_called_function():
    print("here is be_called_function.")


if __name__ == "__main__":
    obj = TestA()
    obj.active_call_function()

4 通过函数名调用在其他文件的一级函数文章来源地址https://www.toymoban.com/news/detail-850186.html

class TestA:
    def __init__(self):
        self.config_dict = {
            "be_called_function_name": "be_called_function",
        }
        pass
        
	#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
    def active_call_function(self):
        print("here is active_call_function.")
        # getaattr(module_name, function_name),module_name传函数所在模块名
        # __import__()传函数所在文件
        module_name = __import__("test_call_function_by_string1")
        be_called_function = getattr(module_name, self.config_dict["be_called_function_name"])
        # 就直接调用。如果有其他参数,一样地传就好了
        be_called_function()
        pass


if __name__ == "__main__":
    obj = TestA()
    obj.active_call_function()

到了这里,关于Python通过函数名调用函数的几种场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python打开Windows可执行性程序的几种方法(Windows窗口自动化第一步)

    方法一:用Pywinauto第三包 方法二:使用os.system函数运行其他程序 方法三:win32api第三包使用ShellExecute函数运行其他程序 方法四:使用win32process.CreateProcess函数 方法七:用ctpyes模块调用C函数

    2024年02月16日
    浏览(42)
  • Java:Java程序通过执行系统命令调用Python脚本

    本文实现功能:Java程序调用Python脚本 直接执行 参考视频 JAVA开发必会小技巧8——用代码调用系统指令

    2024年02月14日
    浏览(43)
  • Hive的几种排序方式、区别,使用场景

    Hive 支持两种主要的排序方式: ORDER BY 和 SORT BY 。除此之外,还有 DISTRIBUTE BY 和 CLUSTER BY 语句,它们也在排序和数据分布方面发挥作用。 1. ORDER BY ORDER BY 在 Hive 中用于对查询结果进行全局排序,确保结果集是全局有序的。但是,使用 ORDER BY 时,Hive 会将所有数据集中到一个

    2024年02月02日
    浏览(29)
  • flink的几种常见的执行模式

    在运行flink时,我们经常会有几种不同的执行模式,比如在IDE中启动时,通过提交到YARN上,还有通过Kebernates启动时,本文就来记录一下这几种模式 flink嵌入式模式: 这是一种我们在IDE开发和调试flink应用时最常使用的模式,他会在一个JVM进程中以线程的方式开启所有flink的各

    2024年02月09日
    浏览(23)
  • Unity——延时执行的几种方法

    延时执行的函数,可以自己设定延时要执行的函数和具体延时的时间,是Monobehaviour基类中实现好的方法 在Update等刷新函数内计时,timer += Time.deltaTime 当时间达到预期,执行需要延时的方法。需要注意的是,增量时间Time.deltaTime是每帧都不同的浮点数。计时器不能用 == 去判断

    2024年02月11日
    浏览(24)
  • 【Android】之【延时执行的几种方法】

    在Android日常开发中我们经常会有延时执行某个操作的需求,例如我们启动应用的时候,开始呈现一个引导页面,过了两三秒后,自动跳转到主界面;又如为了控制时序,需要延时执行等等。 下面整理下实现延时执行操作的几种方法: 推荐使用这种方式 适合需要一直在后台运

    2024年02月11日
    浏览(28)
  • bash中执行比较的几种方法

    bash 脚本中的 test 命令用于检查表达式的有效性,检查命令或表达式为 true 或者 false。此外,它还可以用于检查文件的类型和权限。 如果命令或表达式有效, 则 test 命令返回0,否则返回1。 使用 test 命令 test 命令的基本语法如下所示: 如果其中用到了变量,需要在变量名中

    2024年02月07日
    浏览(30)
  • Python 跨文件调用函数 + 在一个文件中执行另一个文件

    在很多时候,为了保持代码与代码文件的简洁和逻辑清晰,通常会将许多相类似的函数放在一个文件中,在一个 main.py 中去调用它们。调用 Python 函数的时候,大致会存在如下几种情况。 假如现在有这样一个文件树(从其他地方copy的,稍加整改) 文件内容如下: 为什么要有

    2024年02月02日
    浏览(36)
  • 【MySQL】SQL索引失效的几种场景及优化

    MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度, 因此索引对查询的速度有着至关重要的影响。 使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。如果查询时没

    2024年02月13日
    浏览(26)
  • postman调用接口返回404的几种原因

    postman在本地调试接口返回404的原因: 1.请求路径不对,需要仔细核对接口地址是否错误; 2.在测试本地接口时,使用postman调用后台可以正常进入方法走到断点,也可以正常走到return,但是在postman接收到的返回值如下: 这种情况检查下controller类上的注解是否为@Controller,改为

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包