您现在的位置是:亿华云 > 域名
Python炫技操作:执行函数的九种方法
亿华云2025-10-09 15:23:18【域名】2人已围观
简介方法一:直接调用函数运行这种是最简单且直观的方法deftask():print("runningtask")task() 如果是在类中,也是如此classTask:deftask(sel
方法一:直接调用函数运行
这种是炫技最简单且直观的方法
def task(): print("running task") task()如果是在类中,也是操作如此
class Task: def task(self): print("running task") Task().task()方法二:使用偏函数来执行
在 functools 这个内置库中,有一个 partial 方法专门用来生成偏函数。执行
def power(x,函数 n): s = 1 while n > 0: nn = n - 1 ss = s * x return s from functools import partial power_2=partial(power, n=2) power_2(2) # output: 4 power_2(3) # output: 9方法三:使用 eval 动态执行
如果你有需要动态执行函数的需要,可以使用 eval + 字符串 来执行函数。炫技
import sys def pre_task(): print("running pre_task") def task(): print("running task") def post_task(): print("running post_task") argvs = sys.argv[1:] for action in argvs: eval(action)()运行效果如下:
$ python demo.py pre_task task post_task running pre_task running task running post_task方法四:使用 getattr 动态获取执行
若把所有的操作函数是放在类中,并定义成静态方法,执行那就不需要用 eval 了,函数接着使用 getattr 去获取并调用。炫技
import sys class Task: @staticmethod def pre_task(): print("running pre_task") @staticmethod def task(): print("running task") @staticmethod def post_task(): print("running post_task") argvs = sys.argv[1:] task = Task() for action in argvs: func = getattr(task,操作 action) func()方法五:使用类本身的字典
我们都知道对象都有一个 __dict__() 的魔法方法,存放所有对象的执行属性及方法。
到这里,函数大家可以思考一下,炫技 如果还是操作上面的代码,我直接取实例的执行 __dict__() 能不能取到函数呢?
我相信很多人都会答错。
上面我们定义的是静态方法,静态方法并没有与实例进行绑定,因此静态方法是属于类的亿华云,但是不是属于实例的,实例虽然有使用权(可以调用),但是并没有拥有权。
因此要想通过 __dict__ 获取函数,得通过类本身 Task,取出来的函数,调用方法和平时的也不一样,必须先用 __func__ 获取才能调用。
import sys class Task: @staticmethod def pre_task(): print("running pre_task") func = Task.__dict__.get("pre_task") func.__func__()方法六:使用 global() 获取执行
上面放入类中,只是为了方便使用 getattr 的方法,其实不放入类中,也是可以的。此时你需要借助 globals() 或者 locals() ,它们本质上就是一个字典,你可以直接 get 来获得函数。
import sys def pre_task(): print("running pre_task") def task(): print("running task") def post_task(): print("running post_task") argvs = sys.argv[1:] for action in argvs: globals().get(action)()方法七:从文本中编译运行
先定义一个字符串,内容是你函数的内容,比如上面的 pre_task ,云南idc服务商再通过 compile 函数编进 编译,转化为字节代码,最后再使用 exec 去执行它。
pre_task = """ print("running pre_task") """ exec(compile(pre_task, <string>, exec))若你的代码是放在一个 txt 文本中,虽然无法直接导入运行,但仍然可以通过 open 来读取,最后使用 compile 函数编译运行。
with open(source.txt) as f: source = f.read() exec(compile(source, source.txt, exec))方法八:使用 attrgetter 获取执行
在 operator 这个内置库中,有一个获取属性的方法,叫 attrgetter ,获取到函数后再执行。
from operator import attrgetter class People: def speak(self, dest): print("Hello, %s" %dest) p = People() caller = attrgetter("speak") caller(p)("明哥")方法九:使用 methodcaller 执行
同样还是 operator 这个内置库,有一个 methodcaller 方法,使用它,也可以做到动态调用实例方法的效果。
from operator import methodcaller class People: def speak(self, dest): print("Hello, %s" %dest) caller = methodcaller("speak", "明哥") p = People() caller(p)以上就是我总结的函数执行的十种方法,很多方法,大家也都知道,但是也有几个方法,几乎是见不到的,尤其是后面使用 operator 库的企商汇那两种方法。
很赞哦!(85)
相关文章
- 为啥修改dns服务器?dns服务器与域名有何联系?
- 聊一下Castle DynamicProxy基本用法(AOP)
- 戴尔Latitude 5420商务笔记本 优质体验 胜任多种办公需求
- 什么年代了,你还不知道 Servlet3.0 中的文件上传方式?
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- ES的跨索引查询有多便利?对比下分库分表、分片更直观
- 服务器处理连接的架构演变
- Nginx负载均衡之TCP/UDP流
- 打开https://www.aizhan.com/输入自己想要查询的域名然后按回车键,如果做过网站都会有数据显示出来
- 极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点
站长推荐
一下域名,看有没有显示出你所解析的IP,如果有,就说明解析是生效的;如果没有,就说明解析是不生效的。
使用Nginx搭建高可用高并发的Wcf集群
手把手教你如何上传代码到Gitee服务器
鹅厂二面,Nginx回忆录
其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。
超实用的Tomcat启动脚本实现
不用安装Xshell、Xftp,即可远程操作服务器
Nodejs源码解析之UDP服务器