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

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

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

样例1:

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
"""

样例2:

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
"""

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

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

def func(a, b):
return a + b def test(f, a, b):
print f(a, b) test(func, 3, 5)

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

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://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. IIS 日志分析工具:Log Parser Studio

    1.安装Log Parser,下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 ...

  2. Alpha冲刺(3/10)——2019.4.26

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(3/10)--2019.4.26 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...

  3. Accumulator<Long> implements of JavaSparkContext in Spark1.x

    As we all know , up to Spark 1.6.2, JavaSparkContext only provides two kinds of accumulators: Intege ...

  4. JS膏集02

    JS膏集02 1.复习 函数也是对象 2.贪食蛇案例 <!DOCTYPE html> <html lang="en"> <head> <m ...

  5. ssh 多次登录禁用账号

    vi /etc/pam.d/sshd #%PAM-1.0auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_u ...

  6. SpringBoot无废话入门03:SpringMVC支持

    1.默认配置 Springboot对于路径的默认位置为: spring.resources.static-locations=classpath:/META-INF/resources/,classp ...

  7. 分布式环境中,模块数据交互协议分析 (百度brpc)

    1. 背景 之前听到同事说,要为自己的模块考虑写个数据协议.今天有空想了一下.写出来,方便后续使用. 开源代码brpc中可以支持多种协议,nshead.redis.mongo等20多种协议. 2. 什 ...

  8. zookeeper 实现分布式锁安全用法

    zookeeper 实现分布式锁安全用法 标签: zookeeper sessionExpire connectionLoss 分布式锁 背景 ConnectionLoss 链接丢失 SessionE ...

  9. API 'variant.getJavaCompiler()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'

    WARNING: API 'variant.getJavaCompiler()' is obsolete and has been replaced with 'variant.getJavaComp ...

  10. Visual Studio进行Web性能测试- Part I

    Visual Studio进行Web性能测试- Part I 2012-08-29 08:01 by 知平软件, 5356 阅读, 9 评论, 收藏, 编辑 原文作者:Ambily.raj Visua ...