最全Python零基础入门篇 - 36 - 装饰器与类的装饰器,2024年最新46道面试题带你了解中高级Python面试

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

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

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

🔥 如果感觉博主的文章还不错的话,还请不吝👍关注、点赞、收藏三连支持👍一下博主哦

💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬

📕系列专栏::

👍 Python全栈系列 - [更新中]    ➡️➡️➡️ 【 本文在该系列】

👋 网安之路系列

​                       🍋 网安之路踩坑篇

​                       🍋 网安知识扫盲篇

​                       🍋 Vulhub 漏洞复现篇

​                       🍋 Shell脚本编程篇

​                       🍋 Web攻防篇  ➡️➡️➡️ 2021年9月3日停止更新,转战先知等安全社区

​                       🍋 渗透工具使用集锦  ➡️➡️➡️ 2021年9月3日停止更新,转战先知等安全社区

​                ⭐️ 点点点工程师系列

​                       🍹 测试神器 - Charles 篇

​                       🍹 测试神器 - Fiddler 篇

​                       🍹 测试神器 - Jmeter 篇

​                       🍹 自动化 - RobotFrameWork 系列

​                       🍹 自动化 - 基于 JAVA 实现的WEB端UI自动化

🍹 自动化 - 基于 MonkeyRunner 实现的APP端UI自动化

​                🤗 2019年之前学习Python留下的乱七八糟系列

| |

| — |

| 🎉🎉欢迎持续关注🎉🎉 |

文章目录

    • 装饰器
    • 装饰器的定义
  • 装饰器的用法

  • 类中的装饰器

    • 类的装饰器 - classmethod
  • 类的装饰器 - staticmethod

  • 类的装饰器 - property

通过学习装饰器可以让我们更好更灵活的使用函数,通过学会使用装饰器还可以让我们的代码更加优雅。

在我们的实际工作中,很多场景都会用到装饰器,比如记录一些日志、或者屏蔽一些不太合法的程序执行从而使我们的代码更加安全。

装饰器


什么是装饰器?虽然对这个次感到陌生,但是完全不需要担心。

  • 首先,装饰器也是一种函数;只不过装饰器可以接收 函数 作为参数来传递。

  • 并且可以通过 return 可以返回一个函数,装饰器通过接收一个函数,对它在装饰器内部进行处理、调用,并返回一个新的函数,同时还可以动态增强传入函数的功能。

  • 装饰器整个流程是这样的:

  • A函数是装饰器,B函数是A函数传入的参数。

  • 将B函数在A函数中执行,在A函数中可以选择执行或不执行,也可以对B函数的结果进行二次加工处理。

接下来我们看看 装饰器长什么样子

def a():

def b():

print(helloworld)

b()

a()

b()

a() 函数中书写了一个 b() 函数,并在 a() 函数中调用 b() 函数。是不是非常类似在类中定义一个局部函数并调用的例子?其实装饰器就是有些类似这样的操作,只不过被装饰器调用的函数是通过 参数 的形式传进去,并在 b() 函数中执行。

我们在定义完 a() 函数之后进行调用,可以正常处理。但是 b() 函数 是 a() 函数的局部函数 如果在外部调用会报错。(如上文中的第十行,就会报错)

装饰器的定义

示例如下:

def out(func_args): # 装饰器的第一层函数被称为 外围函数 , ‘func_args’ 为要处理的函数

def inter(*args, **kwargs): # 外围函数 的函数体内定义的函数被称为 内嵌函数 ;传入的参数为要处理的 func_args 函数的参数

这里我们并不知道 func_args 函数需要传入进来的参数是什么,所以目前写传入可变参数是比较合理的

return func_args(*args, **kwargs) # 在 内嵌函数 的函数体内调用 func_args 函数,并将可变参数传入

其实这里我们可以处理更多的逻辑;

我们可以选择执行或者不执行,甚至可以func_args 函数的执行结果进行二次处理

return inter # 书写完 内嵌函数的业务之后,我们在 外围函数体内返回 内嵌函数

需要注意的是,这里是不执行的(因为没有加括号),这是装饰器的定义规则,是必不可少的

只有外围函数返回内嵌函数,才可以被之后的代码执行;(因为所有的业务都在内嵌函数中,不返回就无法执行调用)

装饰器的用法

在我们日常工作中,装饰器的使用方法有两种。

第一种:将被调用的函数直接作用为参数传入装饰器的外围函数括弧内;示例如下:

def a(func):

def b(*args, **kwargs):

return func(*args, **kwargs)

return b

def c(name):

print(name)

a©(‘Neo’)

>>> 执行结果如下:

>>> Neo

第二种:将装饰器与被调用函数绑定在一起, @ 符号 + 装饰器函数放在被调用函数的上一行,被调用的函数正常定义,只需要直接调用被执行函数即可。示例如下:

def a(func):

def b(*args, **kwargs):

return func(*args, **kwargs)

return b

@a

def c(name):

print(name)

c(‘Neo’)

>>> 执行结果如下:

>>> Neo

最常用的装饰器用法为第二种。

现在我们构建一个 检查字符串类型的装饰器,加深一下对装饰器的理解。

def check_ok(func):

def inner(*args, **kwargs):

result = func(*args, **kwargs)

if result == ‘OK’:

return ‘传入的参数数据为:’%s’’ % result

else:

return ‘传入的参数数据不为:‘OK’’

return inner

@check_ok

def test_str(data):

return data

result = test_str(‘OK’)

print(result)

>>> 执行结果如下:

>>> 传入的参数数据为:‘OK’

result = test_str(‘NO’)

print(result)

>>> 执行结果如下:

>>> 传入的参数数据不为:‘OK’

以上就是一个装饰器的简单用法,后续的学习内容会接触到更多的高级用法。

类中的装饰器


类的装饰器 - classmethod

classmethod 的功能:可以将类函数不经过实例化即可直接被调用

classmethod 的用法:示例如下

@classmethod

def func(cls, …):

todo

>>> cls 替代普通类函数中的 self ;

>>> 变更为 cls ,表示当前的类

>>> self 代表的是 实例化对象,所以只有通过实例化后,才可以调用

>>> cls 代表的是 类 ,所以即使不通过实例化,也可以调用

*****************************************************

class Test(object):

@classmethod

def add(cls, a, b):

return a + b

print(Test.add(1, 3))

>>> 执行结果如下:

>>> 4

演示案例:

class Cat(object):

def init(self, name):

self.name = name

def eat(self):

print(self.name, ‘喜欢吃鱼’)

@classmethod

def work(cls):

print(‘会抓老鼠’)

dragonLi = Cat(‘狸花猫’)

print(dragonLi.eat(), dragonLi.work())

>>> 执行结果如下:

>>> 狸花猫 喜欢吃鱼

>>> 会抓老鼠

接下来我们不使用 类的实例化 ,直接使用 类 调用 eat() 函数 与 work() 函数

class Cat(object):

def init(self, name):

self.name = name

def eat(self):

print(self.name, ‘喜欢吃鱼’)

@classmethod

def work(cls):

print(‘会抓老鼠’)

dragonLi = Cat(‘狸花猫’)

Cat.eat()

>>> 执行结果如下:

>>> TypeError: Cat.eat() missing 1 required positional argument: ‘self’

>>> 报错缺少重要参数 ‘self’ (没有进行实例化的类,类无法直接调用类函数)

Cat.work()

>>> 执行结果如下:

>>> 会抓老鼠

>>> 绑定了 classmethod 装饰器 的 work() 函数,即使没有实例化,也可以直接被 类 调用

再尝试一下看看 没有装饰器的 eat() 函数 与 使用了 classmethod 装饰器 work() 之间可不可以互相调用

class Cat(object):

def init(self, name):

self.name = name

def eat(self):

print(self.name, ‘喜欢吃鱼’)

@classmethod

def work(cls):

print(‘会抓老鼠’)

cls.eat() # 在 classmethod 装饰器的 work() 函数内 调用 eat() 函数

dragonLi = Cat(‘狸花猫’)

dragonLi.work()

>>> 执行结果如下:

>>> TypeError: Cat.eat() missing 1 required positional argument: ‘self’

>>> 同样报错缺少重要参数 ‘self’

class Cat(object):

def init(self, name):

self.name = name

def eat(self):

print(self.name, ‘喜欢吃鱼’)

self.work()

@classmethod

def work(cls):

print(‘会抓老鼠’)

dragonLi01 = Cat(‘狸花猫’)

dragonLi01.eat()

>>> 执行结果如下:

>>> 执行结果如下:

>>> 狸花猫 喜欢吃鱼

>>> 会抓老鼠

综合以上两个场景,我们得出以下结论:

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

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

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值