当前位置: 首页 > news >正文

小笔记:Python 使用字符串调用函数

小笔记:Python中如何使用字符串调用函数/方法?

jcLee95:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343

本文地址https://blog.csdn.net/qq_28550263/article/details/111874476
邮箱 :291148484@163.com

1. 借助 python字典

2. 借助内置的 getattr() 函数

3. 借助内置 locals() 函数来解析出函数名


【简介】 使用字符串调用函数是一个常用的编程技巧,在大型项目中可以用于实现钩子管理系统。本文指在 介绍 两个 python 内置函数,即 getattr 函数 和 locals 函数。

1. 借助 python字典

最简单的办法是通过一个将字符串映射到函数的字典,例如:

def func1():print("func1 was called.")def func2():print("func2 was called.")d = {'f1': func1, 'f2': func2} d['f1']() 

Out[]:

func1 was called.

2. 借助内置的 getattr() 函数

getattr() 函数用于返回一个对象属性值。其语法格式如下:

getattr(object, name[, default])

其中:

参数描述
object对象。
name字符串,对象属性。
default默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError

例如:

import mymodule
getattr(mymodule, 'myFunc')()

Python 内置的 getattr() 函数可用于任何对象,例如类、类实例、模块等等。

通过 getattr() 函数实现按字符串调用函数例如:

class MyClass(object):def method1(self):print("Method 1 was called.")def method2(self):print("Method 2 was called.")my_instance = MyClass()getattr(my_instance, 'method' + "2")()

Out[]:

Method 2 was called.

注:
这个例子中 getattr(my_instance, 'method' + "2") 是一个函数,因此 getattr(my_instance, 'method' + "2")() 效果上相当于:

func = getattr(my_instance, 'method' + "2")
func()

3. 借助内置 locals() 函数来解析出函数名

Python 中内置的 locals() 函数用于以 字典类型 返回当前位置的 全部 局部变量。

locals() 函数 对于 函数、方法、lambda 表达式、类, 以及所有实现了 __call__ 方法的类实例,它都返回 True。

通过 locals() 函数实现按字符串调用函数如:

def myFunc():print("hello")func_name = "myFunc"f = locals()[func_name]
f()

Out[]:

hello
http://www.lryc.cn/news/8809.html

相关文章:

  • 红黑树的原理+实现
  • 用于非线性时间序列预测的稀疏局部线性和邻域嵌入(Matlab代码实现)
  • 使用 Vue3 重构 Vue2 项目
  • Hive学习——单机版Hive的安装
  • uprobe 实战
  • 华为OD机试 - 求最大数字(Python)| 真题+思路+考点+代码+岗位
  • 雨水情测报与大坝安全监测系统
  • 抖音广告投放形式有哪些?新品牌进入抖音怎么建立口碑
  • Beefxss使用教程图文教程(超详细)
  • 【Python学习笔记】35.Python3 CGI编程(2)
  • 博客等级说明
  • STL——容器适配器、deque
  • VBA数组和Excel工作表数据传递
  • PyQt5保姆级入门教程——从安装到使用
  • 1.6 epoll实战使用
  • JDK定时、Spring定时、时间轮定时小结
  • 关于cFosSpeed如何配置
  • YOLOV5输出的txt里面有什么猫腻(用于图像分类竞赛中提升图像信息密度)
  • vue+axios常用操作
  • Xshell连接阿里云服务器搭建网站
  • 嵌入式ARM设计编程(三) 处理器工作模式
  • jenkins构建报错:.java:16: error: package javafx.util does not exist
  • 【第三天】策略模式
  • 以应用为导向,看声纹识别中的音频伪造问题
  • RocketMQ源码分析之CommitLog消息存储机制
  • 亿级高并发电商项目-- 实战篇 --万达商城项目 九(广告服务、安装Redis优化用户缓存、广告服务实现类等开发)
  • FreeMarker生成word文档,固定word模板
  • 前端必学的CSS制作Switch动画开关按钮演示
  • C语言运算符(左值右值,基本运算符)
  • 【自学Python】一文读懂Python字符串是否是数字