python中通过字符串名来调用函数
强调:eval()函数功能虽然强大,但是也很危险,这个方法需要慎重使用。
利用python中的内置函数 eval() ,函数说明:
![](https://common.cnblogs.com/images/copycode.gif)
- def eval(*args, **kwargs): # real signature unknown
- """
- Evaluate the given source in the context of globals and locals.
- The source may be a string representing a Python expression
- or a code object as returned by compile().
- The globals must be a dictionary and locals can be any mapping,
- defaulting to the current globals and locals.
- If only globals is given, locals defaults to it.
- """
- pass
![](https://common.cnblogs.com/images/copycode.gif)
样例1:
![](https://common.cnblogs.com/images/copycode.gif)
- def function2(name, age):
- print("name: %s, age: %s" % (name, age))
- if __name__ == '__main__':
- eval("function2")("Alice", 11)
- # 或者:
- args = ["Alice", 11]
- kwargs = {}
- eval("function2")(*args, **kwargs)
- """
- 输出结果都是:
- name: Alice, age: 11
- """
![](https://common.cnblogs.com/images/copycode.gif)
样例2:
![](https://common.cnblogs.com/images/copycode.gif)
- class Test(object):
- states = [u"大于等于零", u"大于等于二"]
- state2function = {u"大于等于零": "check_gt0", u"大于等于二": "check_gt2"}
- @staticmethod
- def check_gt0(x):
- return x >= 0
- @staticmethod
- def check_gt2(x):
- return x >= 2
- def predict(self, x):
- for state in Test.states:
- check_ans = eval("Test." + Test.state2function[state])(x) # 调用Test类中的方法
- print(state, Test.state2function[state], x, check_ans)
- if __name__ == '__main__':
- test = Test()
- test.predict(x=-1)
- test.predict(x=1)
- test.predict(x=2)
- """
- 输出:
- 大于等于零 check_gt0 -1 False
- 大于等于二 check_gt2 -1 False
- 大于等于零 check_gt0 1 True
- 大于等于二 check_gt2 1 False
- 大于等于零 check_gt0 2 True
- 大于等于二 check_gt2 2 True
- """
![](https://common.cnblogs.com/images/copycode.gif)
由字符串函数名得到对应的函数
把函数作为参数的用法比较直观:
![](https://common.cnblogs.com/images/copycode.gif)
- def func(a, b):
- return a + b
- def test(f, a, b):
- print f(a, b)
- test(func, 3, 5)
![](https://common.cnblogs.com/images/copycode.gif)
但有些情况下,‘要传递哪个函数’这个问题事先还不确定,例如函数名与某变量有关。可以利用 func = globals().get(func_name)来得到函数:
![](https://common.cnblogs.com/images/copycode.gif)
- def func_year(s):
- print 'func_year:', s
- def func_month(s):
- print 'func_month:', s
- strs = ['year', 'month']
- for s in strs:
- globals().get('func_%s' % s)(s)
- """
- 输出:
- func_year: year
- func_month: month
- """
![](https://common.cnblogs.com/images/copycode.gif)
将字符串变成变量名:
https://www.cnblogs.com/kaerxifa/p/11424796.html
参考文章:https://www.cnblogs.com/bymo/p/7327732.html
python中通过字符串名来调用函数的更多相关文章
- Python中的字符串处理
Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a ...
- python中根据字符串导入模块module
python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...
- Python中的字符串方法
Python中的字符串方法 字符串类即str提供了许多有用的方法来操纵字符串.具体来说,我们将讨论如下的方法. 搜索字符串内的子字符串. 测试字符串. 格式字符串. 转换字符串. 回顾前面的章节,方法 ...
- python中修改字符串的几种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符.因此改变一个字符串的元素需要新建一个新的字符串.常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用join组 ...
- python 中的字符串格式化
python 中的字符串格式化 %方式的调用 1.格式化代码 代码 意义 s 字符串,使用str r 字符串,使用repr不使用str c 字符 d 十进制的数字 i 整数 u 无符号整数 o 八进制 ...
- 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况
一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...
- Python中Unicode字符串
Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte ...
- 【python】dir(__builtins__)查看python中所用BIF(内置函数)
dir(__builtins__)查看python中所用BIF(内置函数)
- python中的字符串
一.在python中,字符串是不可变类型 通过以下代码说明: >>> s = 'hello, world' >>> id(s) 2108634288304 > ...
随机推荐
- react-native android打包签名release版apk遇到的问题
在该项目包名时遇到的一个android打包问题,如下 改包名步骤 修改android/app/build.gradle里的applicationId,为新包名,如:com.xxx.yyy.myProj ...
- 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96“
在做采集时,有些网页因服务器限制用webclient或者webrequest不能获取html,这时我们可以用webbrowser的方法来绕过对方服务器的限制,但是在实例化webbrowser 的时候发 ...
- VB编写的程序加入防火墙的例外中
在工程中要先引入: NetCon 1.0 Type Library NetFwTypeLib Option Explicit Const NET_FW_SCOPE_ALL = 0 Const NET_ ...
- IntelliJ IDEA使用maven-javadoc-plugin生成Java Doc控制台乱码
问题描述 在使用IDEA生成Java Doc的过程中,发现IDEA控制台乱码,作为有轻微代码强迫症的我来说,这是不可忍受的,需要鼓捣一番.先上pom.xml中的javadoc插件配置 <!--配 ...
- AOP - C# Fody中的方法和属性拦截
很久很久以前用过postsharp来做AOP, 大家知道的,现在那东东需要付费,于是尝试了一下Fody,但是发现Fody跟新太快了,所以大家在安装fody的时候尽力安装老的版本:packages.co ...
- python 2 字典的基本使用
dicVisit={} if not dicVisit.has_key(visitKey):#不存在 diaSet = set() diaSet.add(diagnoseContent) dicVis ...
- 使用scp命令在多个Linux系统间进行文件复制
一,什么是scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.scp命令可以在linux服务器之间复制文件和目录.scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从 ...
- 国内阿里maven仓库镜像maven配置文件maven仓库速度快
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. 最新更新:2016年11月11日 18:05:40 阿里云提供Maven私服,我把配置文件贴一下,自 ...
- 在GDAL中添加GDALRasterizeGeometriesBuf函数
缘起 GDAL的栅格化算法中有GDALRasterizeLayers.GDALRasterizeLayersBuf和GDALRasterizeGeometries函数,但是没有GDALRasteriz ...
- 【python】Python的安装和配置
Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. Pyt ...