您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

自学教程:python中*args与**kwarsg及闭包和装饰器的用法

51自学网 2022-07-22 18:47:47
  python
这篇教程python中*args与**kwarsg及闭包和装饰器的用法写得很实用,希望能帮到您。

*args与**kwarsg及闭包和装饰器

过程

先理解闭包,再理解装饰器,不要忘了不定长参数

def func():    msg = '111'    def func1():        print(msg)    return func1 """1-理解闭包闭包即内部函数调用外部函数作用域里面的变量比如func1就是一个闭包函数"""func()()# 这里实际上是func1()
"""2-装饰器fn是被装饰的目标函数2.1-仅仅只是传递函数名的装饰器[基本不会用到]2.2-装饰带有参数的函数2.3-装饰带有返回值的函数2.4-装饰参数不确定的函数[可归类到装饰带有参数的函数里面]2.5-装饰器本身携带参数"""
def decorator(fn):    def wrapper():        print("添加的功能,装饰不带有参数的函数")        return fn()    return wrapper @decoratordef test():    print("原有功能")  test()# 实际上是decorator(test) def decorator1(fn):    def wrapper(n1,n2):        print("添加的功能,装饰带有参数的函数")        return fn(n1,n2)    return wrapper @decorator1def test1(a,b):    print("a+b=%s"%(a+b))    print("原有功能")  test1(1,2)# 实际上是decorator1(test1(1,2)) def decoretor2(fn):    def wrapper():        print("添加的功能,装饰带有返回值的函数")        res = fn()        return res    return wrapper @decoretor2def test2():    print("原有功能")    return "返回值001" a = test2() # 实际是decorator2(test2)print(a)  def decorator3(fn):    def warpper(*args,**kwargs):        print("添加的功能,装饰不定长参数的函数")        return fn(*args,**kwargs)    return warpper @decorator3def test3(n1,n2,n3):    print("原有功能")    print(n1+n2+n3)  test3(1,2,3)# 实际上是decorator1(test1(1,2,3)) def decorator4(home):    def func_1(fn):        def wrapper(*args,**kwargs):            print("装饰器本身携带参数")            print("目前家在%s"%(home))            return fn(*args,**kwargs)        return wrapper    return func_1 @decorator4(home='wuhan')def test4(n1,n2,n3):    print("原有功能")    print(n1+n2+n3) # test3(1,2,3)=decorator3(home="武汉")(test(1,2,3))()"""1-先调用decorator3(home="wuhan")2-执行func_1(test(1,2,3)) # 到这里其实就和前面的装饰器一样3-执行wrapper4-执行test(1,2,3)"""test4(1,2,3)

Python fun(*args,**kwargs)中*args,**kwargs参数含义及用法

1. Python函数中的两种参数

我们知道,在Python中有两种参数

  • 位置参数(positional argument): 位置参数只能由参数位置决定
  • 关键词参数(keyword argument): 关键词参数只需要用 keyword = somekey 的方法即可传参

位置参数只能由参数位置决定。这也就决定了位置参数一定要在前面,否则关键词参数数量的变化都会使得位置无法判断。

2. 理解函数调用中的*

*的作用是将tuple或者list中的元素进行unpack,分开传入,作为多个参数。

51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1