美文网首页
不学会装饰器,面试不敢说自己会Python

不学会装饰器,面试不敢说自己会Python

作者: 码同学软件测试 | 来源:发表于2022-06-27 09:46 被阅读0次

每天进步一点点,关注我们哦,每天分享测试技术文章

本文章出自【码同学软件测试】

码同学公众号:自动化软件测试

码同学抖音号:小码哥聊软件测试

装饰器

Python的装饰器是面试常被问到的问题之一,如果你的简历里描述会Python.那么大概率会被问到.

那么我们应该怎么回答这个问题呢?

这里我从几个角度来解释装饰器的作用,大家可以挑选符合自己的说法

1.python装饰器原理基础

Python中的装饰器,本质上就是一个高阶函数,这里高阶函数指定就是"一个返回值是函数的函数"

2.装饰器的语法

在python中使用装饰器,有两个组成部分.

①@符号调用装饰器

②定义被装饰的方法

范例如下:

@装饰器名字

定义被装饰的函数

@logger

def func():

pass

免费领取码同学软件测试课程笔记+超多学习资料+完整视频+最新面试题,可以转发文章+ 私信「码同学666」获取资料哦

3.一般用来做什么?

装饰器可以在不修改函数的情况下,增加额外的功能.这是官方给装饰器的定义

实际上我们会把一些业务功能之外的,附属需求用装饰器来实现.比如:为我们的函数添加日志记录,性能监控器,埋点计数器.大家也都知道,修改写好的函数是非常麻烦并且容易出错的一件事.所以很适合"在不修改函数内部代码的前提下,为它包装一些额外的功能"也就是装饰器

4.常用的装饰器

staticmethod用来修饰类中的方法,使得该方法可以直接用类名访问,如cls.foo()。

classmethod和staticmehod类似,区别在于staticmethod,classmethod会将class传入被修饰的方法中

classA(object):

a =1

def__init__(self):

self.a =2

@staticmethod

deffoo1():

print A.a

@classmethod

deffoo2(cls):

print"class a is", cls.a

print"instance a is", cls().a

property可以将属性的访问和赋值用函数来实现,从而可以在函数里添加参数检查等一些功能,同时外部使用时访问和赋值的方式并不发生变化。注意访问和赋值的方法名是一样的

classA(object):

def__init__(self):

self.__count = 0

@property

defcount(self):

returnself.__count

@count.setter

defcount(self, value):

ifnotisinstance(value, int):

raise ValueError('count must be an integer!')

self.__count = value

a = A()

print a.count

a.count = 1

print a.count

a.count = "a"# raise ValueError

functools.wraps 用在装饰器的代码里。可以把原始函数的name等属性复制到wrapper()函数中,这样就可以获取到真实函数的name属性,而不是wrapper

import functools

deflog(text):

defdecorator(func):

@functools.wraps(func)

defwrapper(*args, **kw):

print'%s %s():'%(text, func.__name__)

returnfunc(*args, **kw)

returnwrapper

returndecorator

5.怎么手写一个装饰器

#!/anaconda3/envs/FEALPy/bin python3.7

# -*- coding: utf-8 -*-

# ---

# @File: 装饰器语法.py

# @Author: Bull

# ---

# 定义装饰器函数

# 1.简单装饰器范例

def logger(func):#在python里,一切都是对象

def wrapper(*args,**kw):

print("进入装饰器函数了")

func(*args,**kw)#真正的函数在装饰器重新调用

func(*args, **kw)

print("装饰器功能执行完毕")

return wrapper

@logger#=logger(add)

def add(x,y):

print('进入被修饰的函数')

print(f'{x}+{y}={x+y}')

# add(1,2)

# 2.带参数的装饰器

def say_hello(contry):

def wrapper(func):

def second(*args,**kw):

if contry == 'china':

print("来自装饰器的‘你好’")

elif contry == 'america':

print('来自装饰器的"hello"')

else:

return

func(*args,**kw)

return second

return wrapper

@say_hello('america')

def american():

print("I am from America")

@say_hello('china')

def china():

print('我来自中国')

american()

print('*'*30)

china()

免费领取码同学软件测试课程笔记+超多学习资料+学习完整视频,可以关注我们公众号哦:自动化软件测试

本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

  • 不学会装饰器,面试不敢说自己会Python

    本文章出自【码同学软件测试】 装饰器 Python的装饰器是面试常被问到的问题之一,如果你的简历里描述会Pytho...

  • 不学会装饰器,面试不敢说自己会Python

    每天进步一点点,关注我们哦,每天分享测试技术文章 本文章出自【码同学软件测试】 码同学公众号:自动化软件测试 码同...

  • 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更...

  • 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性,熟练掌握装饰器会让你的编程思路更加...

  • [Python] 装饰器(一)

    1. 装饰器是什么?装饰器(Decorator )作为python语言面试的必免考点!如果没有回答上来,在面试官心...

  • 装饰器五部曲

    听说你学不会装饰器?Python基础之装饰器五部曲,带你轻轻松松学会装饰器 装饰器(decorator)是Pyth...

  • 万字长文深度解析Python装饰器

    Python 中的装饰器是你进入 Python 大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们...

  • jQuery的实质, 自己写一个jQuery

    jQuery 的实质: 在了解了python的装饰器之后, 发现jQuery的本质就是一个装饰器, 只是它接受了不...

  • python

    Python装饰器为什么难理解? 无论项目中还是面试都离不开装饰器话题,装饰器的强大在于它能够在不修改原有业务逻辑...

  • Python 高级编程 装饰器

    1.1装饰器 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中...

网友评论

      本文标题:不学会装饰器,面试不敢说自己会Python

      本文链接:https://www.haomeiwen.com/subject/ggunvrtx.html