当前位置:首页 > 科技  > 软件

Python函数调用的九大方法,鲜为人知

来源: 责编: 时间:2023-12-21 17:10:15 135观看
导读分享调用函数的9种方法:getattr, partial, eval, __dict__, globals, exec, attrgetter, methodcaller, 和 __call__。其中一些函数调用方法,在函数式编程或元编程场景中大量使用。相信你在今后的学习或工作中会遇到!1.

分享调用函数的9种方法:getattr, partial, eval, __dict__, globals, exec, attrgetter, methodcaller, 和 __call__。其中一些函数调用方法,在函数式编程或元编程场景中大量使用。相信你在今后的学习或工作中会遇到!3ls28资讯网——每日最新资讯28at.com

3ls28资讯网——每日最新资讯28at.com

1. 直接调用函数(__call__)

最简单最直接的使用方法:3ls28资讯网——每日最新资讯28at.com

def func():    print('Hello, world!')func() # Hello, world!func.__call__() # 一样的

2. partial 函数

在python的内置库functools中有一个partial函数,可以让我们可以把一个函数的一部分参数填入,然后调用。看起来没什么用,遇到的时候有大用。3ls28资讯网——每日最新资讯28at.com

from functools import partial# 请仔细品!def func(domain, user):    echo = f"Hello, {user}@{domain}!"    print(echo)func_userA = partial(func, user="userA")func_userB = partial(func, user="userB")func_userA("example.com") # Hello, userA@example.com!func_userB("example.com") # Hello, userB@example.com!

3. eval 函数

如果需要动态执行函数,可以使用 eval 来执行动态代码。3ls28资讯网——每日最新资讯28at.com

import sysdef pre_task():    print("running pre_task")def task():    print("running task")def post_task():    print("running post_task")cmdList = ["pre_task()","task()","post_task()"]for cmd in cmdList:    eval(cmd) # 执行函数# running pre_task# running task# running post_task

4. getattr 函数

运行类中的静态方法3ls28资讯网——每日最新资讯28at.com

import sysclass Task:    @staticmethod    def pre_task():        print("running pre_task")    @staticmethod    def task():        print("running task")    @staticmethod    def post_task():        print("running post_task")#⚠️ 没有括号的字符串。cmdList = ["pre_task", "task", "post_task"]task = Task()for cmd in cmdList:    func = getattr(task, cmd)    func()

5. dict 方法

首先我们需要知道,每个python对象都有一个内置的__dict__()方法,这个方法返回一个字典,包含了对象的所有属性。如下图,我们可以看到list的__dict__()方法返回的所有属性,其中红框内的,你是否有些熟悉?3ls28资讯网——每日最新资讯28at.com

3ls28资讯网——每日最新资讯28at.com

class Task:    @staticmethod    def pre_task():        print("running pre_task")    @staticmethod    def task():        print("running task")    @staticmethod    def post_task():        print("running post_task")func = Task.__dict__.get("pre_task")func.__func__() # running pre_taskfunc() # 为什么不这样用?

6. globals 函数

import sysdef pre_task():    print("running pre_task")def task():    print("running task")def post_task():    print("running post_task")cmdList = ["pre_task", "task", "post_task"]for cmd in cmdList:    func = globals().get(cmd)    func()# running pre_task# running task# running post_task

7. exec 函数

你可以在一个字符串中定义你的函数,并使用compile函数将它编译成字节码,然后使用exec来执行它。3ls28资讯网——每日最新资讯28at.com

# 方式1pre_task = """print("running pre_task")"""exec(compile(pre_task, '', 'exec'))# running pre_task# 方式2with open('./source.txt') as f:    source = f.read()    exec(compile(source, 'source.txt', 'exec'))

8. attrgetter 函数

在内置库operator中,有一个获取属性的方法,叫做attrgetter,我们可以通过它获取函数后执行。3ls28资讯网——每日最新资讯28at.com

from operator import attrgetterclass People:    def speak(self, dest):        print("Hello, %s" %dest)p = People()caller = attrgetter("speak")caller(p)("Tony") # Hello, Tony# 本文第四条caller2 = getattr(p, "speak")caller2("Tony") # Hello, Tony

9. methodcaller 函数

from operator import methodcallerclass People:    def speak(self, dest):        print(f"Hello, {dest}")caller = methodcaller("speak", "Tony")p = People()caller(p)

小节

总结下,本文分享了使用函数的9种方法:getattr, partial, eval, __dict__, globals, exec, attrgetter, methodcaller, 和 __call__。3ls28资讯网——每日最新资讯28at.com

请仔细品味,思考下他们的使用场景。其中一些函数调用方法,在函数式编程或元编程场景中大量使用。相信你在今后的学习或工作中会遇到!3ls28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-51222-0.htmlPython函数调用的九大方法,鲜为人知

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 13个你不知道的Python技巧

下一篇: AIGC在趣丸科技广告素材场景下赋能业务的探索实践

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 这款新兴工具平台,让你的电脑效率翻倍

    这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 从零到英雄:高并发与性能优化的神奇之旅

    从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 猿辅导与新东方的两种“归途”

    猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top