Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

简介: Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

问题提出


如何将提取得到的字符串(该字符串且等于函数名),此时该函数名是字符串格式,如何用作函数实现其功能?




代码五种设计思路



T1方法:eval()


通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。eval() 功能强大但是比较危险(eval is evil),不建议使用。


print('eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。')

for func in func_list:

   eval(func)()


T2方法: locals() 和 globals()


是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。


print('locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。')

for func in func_list:

   locals()[func]()

for func in func_list:

   globals()[func]()


 

T3方法:


print('methodcaller方法')

class Foo:

   def do_foo(self):

       print('执行do_foo()函数')

   def do_bar(self):

       print('执行do_bar()函数')

f = Foo()

from operator import methodcaller

methodcaller('do_foo')(f)


T4、方法


print('globals().get')

globals().get('foo')


 

 


T5方法


getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。


print('getattr()方法')

import foo

getattr(foo, 'bar')()


综合


def foo():

   print("foo")

def bar():

   print("bar")

func_list = ["foo","bar"]

#T1方法:eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。eval() 功能强大但是比较危险(eval is evil),不建议使用。

print('eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。')

for func in func_list:

   eval(func)()

#T2方法: locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。

print('locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。')

for func in func_list:

   locals()[func]()

for func in func_list:

   globals()[func]()

 

#T3方法:

print('methodcaller方法')

class Foo:

   def do_foo(self):

       print('执行do_foo()函数')

   def do_bar(self):

       print('执行do_bar()函数')

f = Foo()

from operator import methodcaller

methodcaller('do_foo')(f)

#T4、方法:

print('globals().get')

globals().get('foo')

 

 

#T5方法: getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。

print('getattr()方法')

import foo

getattr(foo, 'bar')()


相关文章
|
14天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
5天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
16天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
16天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
14天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
16天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。
|
16天前
|
索引 Python
Python学习的自我理解和想法(5)
这是我在B站千锋教育学习Python的第五天笔记,主要内容包括列表的操作,如排序(`sort()`、``sorted()``)、翻转(`reverse()`)、获取长度(`len()`)、最大最小值(`max()`、``min()``)、索引(`index()`)、嵌套列表和列表生成(`range`、列表生成式)。通过这些操作,可以更高效地处理数据。希望对大家有所帮助!
|
Python
C调用Python崩溃的记录
C调用Python崩溃的记录
162 0
|
Python
C调用Python崩溃的记录
C调用Python崩溃的记录
141 0
|
25天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!