精华内容
下载资源
问答
  • Python通过字符串调用函数

    千次阅读 2018-04-26 21:53:28
    有时候我们想通过字符串调用已经定义好的函数,一开始的思路及实现方式如下:def chinese(text): print('jieba分词')def english(text): print('nltk处理对文本进行分词')def textprocess(file, language): text ...

    有时候我们想通过字符串调用已经定义好的函数,一开始的思路及实现方式如下:

    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': <function chinese at 0x101f62e18>,

    'english': <function english at 0x10453ca60>}

    于是

    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可以将字符串转化为我们想要的列表对象。

    <class 'str'>
    <class 'list'>

    据此,我们用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通过字符串调用函数

    千次阅读 2018-09-19 20:46:19
    通过字符串调用已经定义好的函数 初始状态 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()
    
        # 字符串调用函数
        language(text)
    
    
    file = '1.txt'
    
    language = 'english'
    textprocess(file, language)
    
    

    but

    textprocess(file, language)
    language(text)
    TypeError: ‘str’ object is not callable

    字典调用

    # The first
    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 = '1.txt'
    
    language = 'english'
    textprocess(file, language)
    

    globals()或者eval

    使用globals()函数获取全局变量,其实实现方式跟字典差不多

    def chinese(text):
        print("jieba分词")
    
    
    def english(text):
        print("nltk处理对文本进行分词")
    
    
    # 查看全局变量
    print(globals())
    
    
    def textprocess(file, language):
        text = open(file).read()
    
        eval(language)(text)
        #或者通过globals调用函数名
        # globals()[language](text)
    
    
    file = '1.txt'
    
    language = 'english'
    
    textprocess(file, language)
    

    because

    print(globals)
    {‘name’: ‘main’,
    doc’: None,
    package’: None,
    loader’: <_frozen_importlib_external.SourceFileLoader object at 0x7f5d6000f1d0>,
    spec’: None,
    annotations’: {},
    builtins’: <module ‘builtins’ (built-in)>,
    file’: ‘/home/yue/PycharmProjects/web_static_server/dict_def.py’,
    cached’: None,
    ‘chinese’: <function chinese at 0x7f5d60033e18>,
    ‘english’: <function english at 0x7f5d5e5c3510>}

    展开全文
  • 1.根据字符串调用函数 eval('print')(1) 等于print(1) 2.根据字符串来加载模块 a.importlib str = 'time' import importlib model_test = importlib.import_module(str) model_test .time b.__...

    1.根据字符串调用函数

            eval('print')(1) 等于print(1)

    2.根据字符串来加载模块

    a.importlib

           str = 'time'

           import importlib

           model_test = importlib.import_module(str)

           model_test .time

    b.__import__

           str = 'time'

           model_test = __import__(str)

           model_test.time()

    展开全文
  • Python 通过字符串调用类方法或方法

    千次阅读 2019-04-08 14:22:42
    今天遇到个问题,在一个类里面,想要通过字符串调用类里面的方法,即(注意,以下为错误代码演示,只是为了表述问题): class A(object): def a(self): print('xxxxx') def b(self): c= 'a' self.c() ...
    • 问题描述

    今天遇到个问题,在一个类里面,想要通过字符串调用类里面的方法,即(注意,以下为错误代码演示,只是为了表述问题):

    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')
    <function a at 0x000002C526C81C80>
    >>> 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
    >>> 

     

    相信通过上面的代码,大家已经知道如果通过字符串调用方法了。如果想要详细了解上述三个函数的具体用法,请谷歌百度哦~

    Tips:尽量不要使用eval函数,因为eval is evil。使用这个函数是不安全的,自己用还好,但如果是搭建了个服务器什么的,别有用心的人上传上来恶意代码,你的程序用eval一执行,那岂不是GG ?

    展开全文
  • python 字符串

    万次阅读 2018-11-09 16:03:18
    Python字符串 字符串Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 = 'Hello World!' var2 = "Runoob" ...
  • python中根据字符串调用函数

    千次阅读 2016-05-30 14:13:36
    python中可以根据字符串调用函数:   1、 使用getattr从字符串调用函数   在多进程中,可能传递过来的是一个字符串,那么我怎么来调用一个已经存在的函数呢,主要就是使用到getattr函数的作用,这个函数...
  • Python字符串数组 不可以直接定义类似数组这样的变量来存放字符串,但可以用列表,利用.append()函数循环添加字符串 如: b = ‘abc’ d = ‘def’ a = [] # 定义空列表 a.append(b) # a = [‘abc’] a.append(d) # ...
  • python字符串反转方法Hello everyone, in this tutorial we’ll see different ways to reverse string in Python. 大家好,在本教程中,我们将看到在Python中反转字符串的不同方法。 As we know, we can reverse ...
  • python字符串反向输出Python String doesn’t have a built-in reverse() function. However, there are various ways to reverse a string in Python. Python String没有内置的reverse()函数。 但是,有多种方法...
  • python字符串格式化

    千次阅读 2016-10-31 21:41:16
    【前言】本文主要介绍python中的字符串格式化,通过基本概念,使用方法及例子学习python字符串格式化的两种主要形式:字符串格式化表达以及字符串格式化方法调用。 # 0. python字符串格式化  字符串格式化允许在一...
  • 详解 Python 字符串(一):字符串基础

    千次阅读 多人点赞 2021-01-16 20:59:45
    文章目录1.2. 在 Python 中,字符串就是一串字符的...Python 通过 str 类型提供大量方法来操作字符串,如字符串的替换、删除、截取、复制、连接、比较、查找、分隔等。本文将详细介绍操作字符串的一般方法。 1. 2. ...
  • python中通过字符串调用同名函数

    千次阅读 2017-08-06 16:07:26
    本文记录在python中如何根据字符串调用以该字符串命名的函数的方法。 主要可以通过以下两种方式调用 使用getattr方法 使用__dict__字典 上代码 import sysmethod = 'get_sum'def get_sum(a, b): return a + bif ...
  • 最近在使用python开发的过程中,想要实现通过字符串实现对函数的访问。在网上搜了一些方法,发现都不够简洁。最终笔者通过python内置的getattr方法,实现了这个功能,方法非常简单,在这里分享一下。 首先是对...
  • python字符串的比较

    千次阅读 2020-11-10 19:01:17
    关于其中字符串类型id引用驻留机制见python中的字符串的驻留机制 字符串的比较操作: 运算符:>,>=,<,<=,==,!= 比较规则:首先比较两个字符串中的第- -个字符,如果相等则继续比较下一个字符,依次...
  • python字符串格式化字符串插值

    千次阅读 2018-12-19 10:43:52
    字符串拼接就不介绍了,说一下最新学到的format的使用方法 首先介绍一下:format可以这样使用 0.0 - -  &gt;&gt;&gt; name='zhang' &gt;&gt;&gt; age=12 &gt;&gt;&gt; ...
  • python--根据字符串调用类方法或函数

    千次阅读 2018-05-16 23:44:17
    本文作者使用的python版本为: python 3.5.1根据字符串调用类方法使用python内置函数getattr可实现。getattr函数输入一个类对象和一个字符串,返回与字符串同名的类对象的属性。该函数原型为: getattr(object, name...
  • python字符串操作

    千次阅读 2013-07-22 21:17:32
    字符串序列用于表示和存储文本,python字符串是不可变的,一旦声明,不能改变 通常由单引号(' ),双引号(" ),三引号(''' """)包围 其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件...
  • Python字符串分割方法总结

    千次阅读 2018-05-19 16:21:32
    Python字符串分割的常用方法是直接调用字符串的str.split方法,但是其只能指定一种分隔符,如果想指定多个分隔符拆分字符串需要用到re.split方法(正则表达式的split方法)。 str.split 字符串的split方法函数...
  • 有时候我们想要通过字符串来直接调用函数,方便通过输入的参数来直接控制调用的函数 常规操作 def function1(): print("function1") def function2(): print("function2") def function3(): print("function3")...
  • python字符串中引用变量

    千次阅读 2018-10-16 16:15:39
    python字符串中引用(加入)变量并赋值,或者叫python一般场景应用于一段非python语言中需要将Python变量赋值进去进行循环;或者是通过多个字符串进行组合拼接成一段新的字符串。 将变量插入到字符串中的方法主要有...
  • Python 字符串与数值比较

    千次阅读 2019-11-24 15:45:42
    如果我们直接读取字符串信息,然后用 i 去索引该字符的值,然后进行数值运算,发现Python 字符的值与整形的数值不能进行比较,代码入戏所示: str1 = '0123456789' str2 = str1.encode('utf-8') if str1[0] == 0x...
  • python字符串

    千次阅读 2019-04-20 22:58:43
    python中引号包括的都是字符串包含“”或‘’ “this is a string” ‘this is also a string'’ 这种灵活性可以让我们可以在引号中包含t双引号或单引号 str() 这里还有一个前面遗忘的就是str()方法 去除...
  • python 字符串操作方法详解

    千次阅读 2019-04-23 15:47:37
    字符串序列用于表示和存储文本,python字符串是不可变对象。字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串。其中三引号可以由多行组成,编写多行...
  • qt使用QString类以表示unicode字符串,以及QByteArray表示字节数组或字符串。在python v3中 对应的本地对象类型是str和bytes.。在python v2中 对应的本地对象类型是unicode和str... PyQt5尽最大努力自动转换...
  • Python字符串拼接的十种方式

    千次阅读 2019-05-19 13:09:44
    Python字符串拼接的十种方式 字符串是所有编程语言中都有的基本变量的类型,程序员基本每天都在和字符串打交道。 本篇文章我们一起细数Python中的各种字符串拼接方法。每种字符串拼接方式的使用场景各不相同,我们...
  • Python字符串排序

    千次阅读 2018-04-28 13:44:00
    1、python中的字符串类型是不允许直接修改元素的。必须先把要排序的字符串放在容器里,如list。 python中list容器的sort()函数没有返回值。所以在python中对字符串排序需要好几行代码: s="strin...
  • python字符串操作总结

    千次阅读 2013-09-16 16:55:05
    后来从python2.0开始,string方法改用str.method()形式调用,就是直接在你的字符串变量后加方法就行了,无需import。但是为了保持向后兼容,python仍然保留了string模块,但是并不推荐用,你懂的。 但并非所有的字符...
  • python 使用函数名的字符串调用函数 5种方法 废话不多说,直接上代码 # python 使用函数名的字符串调用函数 5种方法 def chinese(text): print("chinese",text) def english(text): print("english",text)...
  • python字符串逆序输出的6种方法

    万次阅读 2019-04-25 19:30:44
    对于一个给定的字符串,逆序输出,这个任务对于python来说是一种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,今天总结了一下python中对于字符串的逆序输出的几种常用的方法,一共...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 283,512
精华内容 113,404
关键字:

python字符串调用

python 订阅