-
python调用字符串里的函数
2020-06-02 20:00:47我查询资料后发现可以用.read()方法把读取的文件转换为字符串存储在内存中,但这样我就不能调用里面的函数了呀,请问这种情况改咋办呢? 这是训练参数的时候可以用这个方法,train.py就是一段从头执行到尾的... -
python 根据字符串调用函数_Python通过字符串调用函数
2021-02-09 12:41:03有时候我们想通过字符串调用已经定义好的函数,一开始的思路及实现方式如下:def chinese(text):print('jieba分词')def english(text):print('nltk处理对文本进行分词')def textprocess(file, language):text = open...有时候我们想通过字符串调用已经定义好的函数,一开始的思路及实现方式如下:
def chinese(text):
print('jieba分词')
def english(text):
print('nltk处理对文本进行分词')
def textprocess(file, language):
text = open(file).read()
#字符串调用chinese()或english()函数。
language(text)
#调用函数
file = 'data.txt'
language = 'english'
textprocess(file, language)
但是
textprocess(file='data.txt', language='english')
language(text)
TypeError: 'str' object is not callable
百度谷歌一番,我查到以下几种方式
1-字典
最简单,易上手的方式,使用字典配对。
def chinese(text):
print('jieba分词')
def english(text):
print('nltk处理对文本进行分词')
str_func_pair = {'chinese': chinese,
'english': english}
def textprocess(file, language):
text = open(file).read()
#字典调用出函数名
str_func_pair[language](text)
file = 'data.txt'
language = 'english'
textprocess(file, language)
2- globals()
使用globals()函数获取全局变量,其实实现方式跟字典差不多。我们先看看代码当前的变量们有哪些
def chinese(text):
print('jieba分词')
def english(text):
print('nltk处理对文本进行分词')
#查看全局变量
print(globals())
我们发现这不就是字典吗?
{'__name__': '__main__',
'__doc__': None,
此处省略一部分变量,方便展示
'chinese': ,
'english': }
于是
def chinese(text):
print('jieba分词')
def english(text):
print('nltk处理对文本进行分词')
def textprocess(file, language):
text = open(file).read()
#globals()调用出函数名
globals()[language](text)
file = 'data.txt'
language = 'english'
textprocess(file, language)
3-eval()
eval英文名翻译过来大概是等同的意思。
data = "[1,2,3,4]"
print(type(data))
print(type(eval(data)))
我们发现,eval可以将字符串转化为我们想要的列表对象。
据此,我们用eval也可以用字符串调用函数
def chinese(text):
print('jieba分词')
def english(text):
print('nltk处理对文本进行分词')
def textprocess(file, language):
text = open(file).read()
eval(language)(text)
file = 'data.txt'
language = 'english'
textprocess(file, language)
-
python根据字符串调用类_Python 通过字符串调用类方法或方法
2020-12-28 20:29:12问题描述今天遇到个问题,在一个类里面,想要通过字符串调用类里面的方法,即(注意,以下为错误代码演示,只是为了表述问题):class A(object):def a(self):print('xxxxx')def b(self):c= 'a'self.c()test = A()test...问题描述
今天遇到个问题,在一个类里面,想要通过字符串调用类里面的方法,即(注意,以下为错误代码演示,只是为了表述问题):
class A(object):def a(self):
print('xxxxx')
def b(self):
c= 'a'
self.c()
test = A()
test.b()
如上面代码所示,在b函数里面,我将字符 a 赋值给了 c ,然后在后面,想要通过 self.c() 的方式,来替代 self.a(),完成对 a 函数的调用。当然,上面的代码毫无疑问的报错了,那么,怎么才能通过字符串调用类里面的函数呢?
解决方法
首先,来解决类里面通过字符串来调用函数的问题,其实也很简单,我们需要用到一个稍微高阶一点的Python自带函数: getattr()
直白的说,这个函数是获取一个实例(也可以说是类)里面的属性或方法。用法为:getattr(object, name[, default])
第一个object参数为: 传入一个实例或者类
第二个name参数为: 你想要获得的这个类或实例里面的属性或方法的名称
第三个参数default为: 如果没有在这个类或实例里面找到对应的属性或方法,应该返回什么。
如果想要详细了解这个内建函数的使用方法,请看:Python getattr() 函数 | 菜鸟教程
这里举个例子:
class A(object):
def a(self):
print('sfsdf')
test = A()
print(getattr(test, 'a', 'None'))
print(getattr(test, 'b', 'None'))
从上面的代码,我们可以看到,getattr()函数获得了 test 实例里面的 a 方法,然后将该方法打印了出来,我们还想获取 test 实例的 b 方法, 但是 test 实例并没有 b 方法,所以就返回了我们预先指定的 None。这就是getattr() 函数的用法。说到这里,相信不少童鞋已经知道怎么通过字符串调用类方法了,完整代码如下:class A(object):
def a(self):
print('GodLordGee')
def b(self):
c= 'a'
func = getattr(self, c, None)
func()
test = A()
test.b()
如上,我们就可以通过字符串,调用类里面的方法了。
也许很多童鞋能够理解这个内建函数的用法,但是却不知道这个函数的实际使用场景,那么我可以在这里给你提供一个使用场景:
你写了一个类,类里面有很多个功能函数,还有一个主函数。在主函数里面,会传进来不同的字符串,这些字符串表示程序想要调用的方法。例如:主函数传进来一个 ‘start’ 字符串,表示程序现在要调用start函数;又过了一会,主函数传进来了一个 'pause' 字符串,表示程序现在想要调用pause函数;再过了一会,主函数传进来了一个‘stop’ 字符串,表示程序现在想要调用stop函数。那么,如上所述的一个过程,我们只需要一个getattr()函数,就可以很方便的调用类里面的各种方法。
扩展知识
知道了如何通过字符串调用类里面的方法,那么,如果通过字符串直接调用方法呢?这里有三个函数可以帮助我们实现这个功能(eval、locals、globals):>>> def a():
print('I am a')
>>> def b():
print('I am b')
>>> eval('a')
>>> eval('a')()
I am a
>>> eval('b')()
I am b
>>> locals()['a']()
I am a
>>> locals()['b']()
I am b
>>> globals()['a']()
I am a
>>> globals()['b']()
I am b
>>>
相信通过上面的代码,大家已经知道如果通过字符串调用方法了。如果想要详细了解上述三个函数的具体用法,请谷歌百度哦~
-
python字符串调用类_python 使用字符串名调用类以及调用类方法名
2020-12-05 13:47:15在python中,有时调用者仅知道类名和类方法,不负责实际的函数调用,而是将要调用的类名和类方法告诉一...中间函数需以被告知的字符串调用类和类方法。 在万物皆对象,我们需要将传进来的字符串转化为类对象,这里我...在python中,有时调用者仅知道类名和类方法,不负责实际的函数调用,而是将要调用的类名和类方法告诉一个中间函数,由中间函数负责实际调用函数。中间函数需以被告知的字符串调用类和类方法。 在万物皆对象,我们需要将传进来的字符串转化为类对象,这里我们可以使用eval实现。而以字符串形式调用类方法,可以使用内置方法getattr实现,以下是详细例子。
class SayHello():
def say(self):
print 'hello'
if __name__ == '__main__':
# normal call class method
i_s_h = SayHello()
i_s_h.say()
# use string call class method
c_str = eval('SayHello')()
print c_str
c_str.say()
# direct use class method
getattr(c_str,'say')()
以上输出:
hello
hello
hello
[Finished in 0.3s]
-
python字符串调用函数_Python中用字符串调用函数或方法示例代码
2020-12-05 13:47:21前言本文主要给大家介绍了关于Python用字符串调用函数或方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:先看一个例子:>>> def foo():print "foo">>> def bar():print "bar...前言
本文主要给大家介绍了关于Python用字符串调用函数或方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:
先看一个例子:
>>> def foo():
print "foo"
>>> def bar():
print "bar"
>>> func_list = ["foo","bar"]
>>> for func in func_list:
func()
TypeError: 'str' object is not callable
我们希望遍历执行列表中的函数,但是从列表中获得的函数名是字符串,所以会提示类型错误,字符串对象是不可以调用的。如果我们想要字符串变成可调用的对象呢?或是想通过变量调用模块的属性和类的属性呢?
以下有三种方法可以实现。
eval()
>>> for func in func_list:
eval(func)()
foo
bar
eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。eval() 功能强大但是比较危险(eval is evil),不建议使用。
locals()和globals()
>>> for func in func_list:
locals()[func]()
foo
bar
>>> for func in func_list:
globals()[func]()
foo
bar
locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。
getattr()
getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。
返回 foo 模块的 bar 方法
>>> import foo
>>> getattr(foo, 'bar')()
返回 Foo 类的属性
>>> class Foo:
def do_foo(self):
...
def do_bar(self):
...
>>> f = getattr(foo_instance, 'do_' + opname)
>>> f()
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
参考
时间: 2017-08-03
-
python通过字符串调用方法_python 通过字符串方式调用方法operator.methodcaller
2021-01-11 20:38:53,例如: import operator operator.methodcaller('distance', 0, 0)(p) 当你需要通过相同的参数多次调用某个方法时,使用 operator.methodcaller 就很方便了。 比如你需要排序一系列的点,就可以这样做: points = ... -
python字符串属性_python 通过字符串调用对象属性或方法
2020-12-20 03:41:51下面为大家分享一篇python 通过字符串调用对象属性或方法的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象... -
python字符串属性无效_python通过字符串调用对象属性或方法
2020-12-24 06:03:41下面为大家分享一篇python 通过字符串调用对象属性或方法的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象... -
python函数嵌套调用字符串_Python入门-字符串嵌套函数
2021-03-05 22:34:13以下介绍Python中一些常用的已经嵌套的字符串函数,利用这些函数可以使我们在打代码的时候不用自己苦逼地自己写相应的函数,可以让我们事半功倍,用起来很方便,不过在用之前一定可以要清楚函数相应的参数的意义,... -
python统计字符串个数_python字符串中字符出现次数(python获取字符串个数)
2020-11-20 23:48:39原博文2020-03-17 19:25 −今天要说的是Python的字符串函数还是很方便的,只需要调用 count() 方法即可。 最近,我在一个网站上看到了一个自然语言处理课程。我详细解释了一些方法的使用,用例很容易理解,所以我想... -
python通过字符串调用方法_『开发技术』Python通过字符串调用函数(getattr方法)...
2020-12-29 13:53:40最近在使用python开发的过程中,想要实现通过字符串实现对函数的访问。在网上搜了一些方法,发现都不够简洁。最终笔者通过python内置的getattr方法,实现了这个功能,方法非常简单,在这里分享一下。首先是对getattr... -
python字符串调用函数和参数_【Python】字符串格式化调用方法
2020-12-05 13:47:10一、基础知识str.format()的使用语法在主体字符串(string)中,花括号通过位置(例如,{1})或关键字(例如,{food})指出替换目标及将要插入的参数。该方法创建并返回一个新的字符串对象,可以被立即打印或保存起来。... -
python常用字符串方法调用语法_Python 字符串常用操作TOP40
2020-12-30 06:12:59文章首发公众号:CoderMrWu ,每周分享优质技术文章和经验,欢迎大家关注,共同交流。今天看了篇文章总结了 40 种...1/ 创建字符串s1 = 'This is a test.'2/ 使用 print 语句查看输出# python3/python2>>&... -
python 文档字符串_新款Python文档字符串生成器来了
2020-12-10 11:18:53又一款懒人神器问世了:Visual Studio Code的扩展,基于CodeBERT的Python文档字符串生成器。看来现在,这群偷「懒」的程序员们连文档字符串都不想自己写了。基于CodeBERT的生成器跟正常的DocStrings用法一样,你只... -
python常用字符串方法调用语法_Python3常用的字符串方法
2021-02-04 00:11:56判断是否全是字母"python".isalpha() # 返回True"2python".isalpha() # 返回False根据分隔符分割字符串a = "I,LOVE,PYTHON"a.split(",")# 结果:['I','LOVE','PYTHON']去掉字符串两头的空格及回车符str.strip() # ... -
python替换字符串元素_python替换字符串中的子串图文步骤
2020-12-08 06:37:57python替换字符串中的子串图文步骤修改字符串本身是不可能的,因为字符串是不可变类型,只能是通过某些方法来产生它的副本。再把副本赋值给原字符串,达到类似替换的作用。这里介绍几种方法。旧串换新串:使用str.... -
python3 字符串编码格式_python2 python3 字符串 编码格式 处理
2021-03-17 12:48:25使用python的ctypes调用c语言中的函数,传入字符串,打印输出异常。解决方法记录于此。参考连接:主要原因是编码格式不同导致的。python2和python3采用的默认编码不同。python2默认就是str和unicode,str和unicode... -
python3字符串编码格式_python2 python3 字符串 编码格式 处理
2020-12-14 10:54:22使用python的ctypes调用c语言中的函数,传入字符串,打印输出异常。解决方法记录于此。参考连接:主要原因是编码格式不同导致的。python2和python3采用的默认编码不同。python2默认就是str和unicode,str和unicode... -
python调用方法内的函数_Python 通过字符串调用类方法或方法
2020-11-24 12:30:20问题描述今天遇到个问题,在一个类里面,想要通过字符串调用类里面的方法,即(注意,以下为错误代码演示,只是为了表述问题):class A(object):def a(self):print('xxxxx')def b(self):c= 'a'self.c()test = A()test... -
python 属性方法调用_python通过字符串调用对象属性或方法
2020-12-29 06:03:45下面为大家分享一篇python 通过字符串调用对象属性或方法的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象... -
Python中用字符串调用函数或方法示例代码
2020-09-21 05:48:23字符串作为python中常用的数据类型,掌握字符串的常用方法十分必要。下面这篇文章主要给大家介绍了关于Python中通过字符串调用函数或方法的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。 -
python函数调用例子-Python中用字符串调用函数或方法示例代码
2020-11-11 13:56:24前言本文主要给大家介绍了关于Python用字符串调用函数或方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:先看一个例子:>>> def foo():print "foo">>> def bar():print "bar&... -
c++ 调用python 传入字符串_Pyth| 字符串与函数
2020-12-20 06:52:04上一期的那个有趣的小代码你们完成了吗?是不是初步从中感受到了学习...这次Python入门的第三波干货,我们将紧接着上次的函数继续聊下去,在说函数之前,我们先补充一下字符串的一些知识。字符串1. 创建和访问字符串... -
Python用字符串做二进制乘法和Python调用内置进制转换我踩的坑
2019-01-02 20:29:12其余为我自己做的 字符串str的末位是实际上计算的首位,所以...首先弄清楚python的字符串列表有2种取值顺序: 从左到右索引默认0开始的 s = 'ilovepython' s[0]的结果是i 然后从右到左索引默认-1开始... -
python字符串属性_python 通过字符串调用对象属性或方法的实例讲解
2020-12-20 03:41:53有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象属性或方法1、evalIn [634]: def getmethod(x,char='just for test'):...: return eval('str.%s' % x)(char)...:In [635]: ... -
python 遍历字符串数组赋值_Python调用Dll(so)获取信息(Python char** 字符串二维数组)...
2020-12-09 10:14:48今天根据业务需要,使用Python调用C++编写的so,调用相关接口获取部分信息,实现过程大致如下:C/C++端:/***获取信息(分配内存并赋值)*/extern "C" __declspec(dllexport) void getInfo(char** pInfos) {*pInfos = ... -
python字符串三种常用的方法或函数_Python中用字符串调用函数或方法示例代码
2020-11-30 06:14:51前言本文主要给大家介绍了关于Python用字符串调用函数或方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:先看一个例子:>>> def foo():print "foo">>> def bar():print "bar">>> func_list = [... -
python 通过字符串调用对象属性或方法的实例讲解
2020-09-20 14:06:25下面小编就为大家分享一篇python 通过字符串调用对象属性或方法的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧