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

本文详细介绍了Python中的几种函数调用和属性获取方法,包括getattr用于动态调用对象方法,__dict__和globals用于访问对象属性,exec用于执行字符串定义的代码,以及attrgetter来自operator库的属性获取工具。同时强调了系统化学习对于技术提升的重要性。
摘要由CSDN通过智能技术生成
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 函数


运行类中的静态方法



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

#⚠️ 没有括号的字符串。
cmdList = [“pre_task”, “task”, “post_task”]

task = Task()

for cmd in cmdList:
func = getattr(task, cmd)
func()


### 5. **dict** 方法


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


![2](https://img-blog.csdnimg.cn/img_convert/95bf81565f1e4d1b89e0ea54acd2f022.png)



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_task
func() # 为什么不这样用?


### 6. globals 函数



import sys

def 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来执行它。



方式1

pre_task = “”"
print(“running pre_task”)
“”"
exec(compile(pre_task, ‘’, ‘exec’))

running pre_task

方式2

with open(‘./source.txt’) as f:
source = f.read()
exec(compile(source, ‘source.txt’, ‘exec’))


### 8. attrgetter 函数


在内置库`operator`中,有一个获取属性的方法,叫做`attrgetter`,我们可以通过它获取函数后执行。



from operator import attrgetter

class People:
def speak(self, dest):
print(“Hello, %s” %dest)

p = People()
caller = attrgetter(“speak”)
caller§(“Tony”) # Hello, Tony

本文第四条

caller2 = getattr(p, “speak”)
caller2(“Tony”) # Hello, Tony




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值