强调:eval()函数功能虽然强大,但是也很危险,这个方法需要慎重使用。

利用python中的内置函数 eval() ,函数说明:

  1. def eval(*args, **kwargs): # real signature unknown
  2. """
  3. Evaluate the given source in the context of globals and locals.
  4.  
  5. The source may be a string representing a Python expression
  6. or a code object as returned by compile().
  7. The globals must be a dictionary and locals can be any mapping,
  8. defaulting to the current globals and locals.
  9. If only globals is given, locals defaults to it.
  10. """
  11. pass

样例1:

  1. def function2(name, age):
  2. print("name: %s, age: %s" % (name, age))
  3.  
  4. if __name__ == '__main__':
  5. eval("function2")("Alice", 11)
  6. # 或者:
  7. args = ["Alice", 11]
  8. kwargs = {}
  9. eval("function2")(*args, **kwargs)
  10. """
  11. 输出结果都是:
  12. name: Alice, age: 11
  13. """

样例2:

  1. class Test(object):
  2. states = [u"大于等于零", u"大于等于二"]
  3. state2function = {u"大于等于零": "check_gt0", u"大于等于二": "check_gt2"}
  4.  
  5. @staticmethod
  6. def check_gt0(x):
  7. return x >= 0
  8.  
  9. @staticmethod
  10. def check_gt2(x):
  11. return x >= 2
  12.  
  13. def predict(self, x):
  14. for state in Test.states:
  15. check_ans = eval("Test." + Test.state2function[state])(x) # 调用Test类中的方法
  16. print(state, Test.state2function[state], x, check_ans)
  17.  
  18. if __name__ == '__main__':
  19. test = Test()
  20. test.predict(x=-1)
  21. test.predict(x=1)
  22. test.predict(x=2)
  23.  
  24. """
  25. 输出:
  26. 大于等于零 check_gt0 -1 False
  27. 大于等于二 check_gt2 -1 False
  28. 大于等于零 check_gt0 1 True
  29. 大于等于二 check_gt2 1 False
  30. 大于等于零 check_gt0 2 True
  31. 大于等于二 check_gt2 2 True
  32. """

由字符串函数名得到对应的函数

把函数作为参数的用法比较直观:

  1. def func(a, b):
  2. return a + b
  3.  
  4. def test(f, a, b):
  5. print f(a, b)
  6.  
  7. test(func, 3, 5)

但有些情况下,‘要传递哪个函数’这个问题事先还不确定,例如函数名与某变量有关。可以利用 func = globals().get(func_name)来得到函数:

  1. def func_year(s):
  2. print 'func_year:', s
  3.  
  4. def func_month(s):
  5. print 'func_month:', s
  6.  
  7. strs = ['year', 'month']
  8. for s in strs:
  9. globals().get('func_%s' % s)(s)
  10. """
  11. 输出:
  12. func_year: year
  13. func_month: month
  14. """

将字符串变成变量名:

https://www.cnblogs.com/kaerxifa/p/11424796.html

参考文章:https://www.cnblogs.com/bymo/p/7327732.html

python中通过字符串名来调用函数的更多相关文章

  1. Python中的字符串处理

    Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a ...

  2. python中根据字符串导入模块module

    python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...

  3. Python中的字符串方法

    Python中的字符串方法 字符串类即str提供了许多有用的方法来操纵字符串.具体来说,我们将讨论如下的方法. 搜索字符串内的子字符串. 测试字符串. 格式字符串. 转换字符串. 回顾前面的章节,方法 ...

  4. python中修改字符串的几种方法

    在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符.因此改变一个字符串的元素需要新建一个新的字符串.常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用join组 ...

  5. python 中的字符串格式化

    python 中的字符串格式化 %方式的调用 1.格式化代码 代码 意义 s 字符串,使用str r 字符串,使用repr不使用str c 字符 d 十进制的数字 i 整数 u 无符号整数 o 八进制 ...

  6. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...

  7. Python中Unicode字符串

    Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte ...

  8. 【python】dir(__builtins__)查看python中所用BIF(内置函数)

    dir(__builtins__)查看python中所用BIF(内置函数)

  9. python中的字符串

    一.在python中,字符串是不可变类型 通过以下代码说明: >>> s = 'hello, world' >>> id(s) 2108634288304 > ...

随机推荐

  1. react-native android打包签名release版apk遇到的问题

    在该项目包名时遇到的一个android打包问题,如下 改包名步骤 修改android/app/build.gradle里的applicationId,为新包名,如:com.xxx.yyy.myProj ...

  2. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96“

    在做采集时,有些网页因服务器限制用webclient或者webrequest不能获取html,这时我们可以用webbrowser的方法来绕过对方服务器的限制,但是在实例化webbrowser 的时候发 ...

  3. VB编写的程序加入防火墙的例外中

    在工程中要先引入: NetCon 1.0 Type Library NetFwTypeLib Option Explicit Const NET_FW_SCOPE_ALL = 0 Const NET_ ...

  4. IntelliJ IDEA使用maven-javadoc-plugin生成Java Doc控制台乱码

    问题描述 在使用IDEA生成Java Doc的过程中,发现IDEA控制台乱码,作为有轻微代码强迫症的我来说,这是不可忍受的,需要鼓捣一番.先上pom.xml中的javadoc插件配置 <!--配 ...

  5. AOP - C# Fody中的方法和属性拦截

    很久很久以前用过postsharp来做AOP, 大家知道的,现在那东东需要付费,于是尝试了一下Fody,但是发现Fody跟新太快了,所以大家在安装fody的时候尽力安装老的版本:packages.co ...

  6. python 2 字典的基本使用

    dicVisit={} if not dicVisit.has_key(visitKey):#不存在 diaSet = set() diaSet.add(diagnoseContent) dicVis ...

  7. 使用scp命令在多个Linux系统间进行文件复制

    一,什么是scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.scp命令可以在linux服务器之间复制文件和目录.scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从 ...

  8. 国内阿里maven仓库镜像maven配置文件maven仓库速度快

    国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. 最新更新:2016年11月11日 18:05:40 阿里云提供Maven私服,我把配置文件贴一下,自 ...

  9. 在GDAL中添加GDALRasterizeGeometriesBuf函数

    缘起 GDAL的栅格化算法中有GDALRasterizeLayers.GDALRasterizeLayersBuf和GDALRasterizeGeometries函数,但是没有GDALRasteriz ...

  10. 【python】Python的安装和配置

    Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. Pyt ...