python函数装饰器,重点必须掌握(二)

继续说

4.未知类型,未知个数参数

(*args)可以表示整型,浮点型,字符串,列表,元组等参数。例子①:

def func_1(*args):
    print(args)
    print(*args)
func_1(1,4.44444,'abc',[1,'扒点刚货'],(2,'badianganghuo'))

执行结果:

(1, 4.44444, 'abc', [1, '扒点刚货'], (2, 'badianganghuo'))
1 4.44444 abc [1, '扒点刚货'] (2, 'badianganghuo')

(**args)表示字典类型参数。调用函数传递参数的时候,表示方法为(键 = 值)。例子②:

def func_2(a,b,**kwargs):
    print(a)
    print(b)
    print(kwargs)
​
func_2(a = '扒点刚货',b ='badianganghuo',c = '扒点刚货',d ='badianganghuo')

执行结果:

扒点刚货
badianganghuo
{'c': '扒点刚货', 'd': 'badianganghuo'}

综上:当参数都是未知的时候,一般写成(*args, **kwargs)。

综合例子:

def func_3(*args, **kwargs):
    print(args)
    print(kwargs)
​
func_3(1,4.44444,'abc',[1,'扒点刚货'],(2,'badianganghuo'),a='扒点刚货', b='badianganghuo')

执行结果:

(1, 4.44444, 'abc', [1, '扒点刚货'], (2, 'badianganghuo'))
{'a': '扒点刚货', 'b': 'badianganghuo'}

三、内嵌函数

在函数体内创建另外一个函数(对象)是合法的,这种函数叫内部/内嵌函数。

1.普通内嵌

例子:

def foo():
  def bar():
    print('bar() called')
  print('foo() called')
  bar()
​
foo()

执行结果:

foo() called
bar() called

2.闭包

如果内部函数引用了函数外定义的对象,此时把这个特别的内部函数叫做闭包。例子:

num_1 = 1
def func_1():
    num_2 = 2
    def func_2():
        num_3 = num_1 + num_2
        print('{}加上{}等于{}'.format(num_1,num_2,num_3))
    return func_2
​
fun = func_1()
fun()

执行结果:

1加上2等于3

注意:fun = func_1()是调用外部函数,并且复制给fun,因为func_1返回值为func_2(类似于一个变量名),随意fun等同于func_2,func_2()就是调用内部函数。

四、函数装饰器

装饰器是在函数调用之上的装饰。当不想改变已经定义好的函数名称,且要对该函数进行加工的时候,可以使用函数装饰器。

比如当一个函数func1在很多地方被调用,现在要调用它,可是又得需要对它进行一些改变,就可以使用函数装饰器。

1.函数装饰器语法

@decorator(dec_opt_args)
def fun2Bdecorated(func_opt_args):
  ...

装饰器的语法是用@开头,接着是装饰器的函数的名字和可选的参数,紧跟着装饰器声明的是被修饰的函数和装饰器函数的可选参数。

例子:

def decor(func):
    print('start')
    func()
    print('有10000粉丝')
    print('是个成熟的公众号')
    print('end')
    #return wrapper
​
@decor
def func_2():
    #已知函数,不建议更改
    print('我是扒点刚货')

执行结果:

start
我是扒点刚货
有10000粉丝
是个成熟的公众号
end

时间有限,明天详细展开多个函数装饰器共同使用,装饰器规范写法,以及多个装饰器的参数传递,多层返回值等。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值