下面我来详细讲解一下 Python 中 args 与 *kwargs 的用法,以及闭包和装饰器的用法。
*args
在 Python 中,*args 用来传递可变数量的参数,即不确定传入参数的数量。它可以接受任意数量的非关键字参数,并将其作为一个元组传递给函数。
下面是一个例子,展示了如何使用 *args 来传递不确定数量的参数。
def func(*args):
for i in args:
print(i)
# 调用函数并传入三个参数
func(1, 2, 3)
# 调用函数并传入两个参数
func('a', 'b')
输出结果:
1
2
3
a
b
**kwargs
**kwargs 可以用来传递关键字参数,即不确定关键字参数的数量。它会将传入的关键字参数打包成一个字典,传递给函数。
下面是一个示例,展示了如何使用 **kwargs 来传递关键字参数。
def func(**kwargs):
for key, value in kwargs.items():
print(key, value)
# 调用函数并传入两个关键字参数
func(name='Tom', age=28)
# 调用函数并传入三个关键字参数
func(name='Jerry', age=30, job='Teacher')
输出结果:
name Tom
age 28
name Jerry
age 30
job Teacher
闭包
闭包是一个函数,它引用了在其定义环境中的自由变量。在函数内部定义一个函数,并返回内部函数,这个返回的函数就是一个闭包。闭包可以访问外部函数的变量,即使外部函数已经返回,闭包仍然能够访问这些变量。
下面是一个示例,展示了如何使用闭包来实现一个简单的计数器:
def counter():
count = 0
def inc():
nonlocal count
count += 1
print(count)
return inc
c = counter()
c() # 输出1
c() # 输出2
c() # 输出3
装饰器
装饰器是一种处理函数的函数,它可以在不改变原函数的情况下,对函数进行增强。在 Python 中,装饰器通常是通过 @ 符号进行使用。
下面是一个简单的示例,展示了如何使用装饰器来增强一个函数的功能:
def add_decorator(func):
def wrapper(*args, **kwargs):
print('函数开始执行...')
result = func(*args, **kwargs)
print('函数执行结束.')
return result
return wrapper
@add_decorator
def add(a, b):
return a + b
print(add(2, 3)) # 输出 5
这个例子中,我们定义了一个装饰器函数 add_decorator,它接受一个函数作为参数,返回一个新的函数 wrapper。这个新的函数 wrapper 在执行原来的函数之前和之后分别会输出一条信息。最后,我们使用 @ 符号来将 add 函数加上装饰器。
以上就是 Python 中 args 与 *kwargs 的用法,以及闭包和装饰器的用法的详细讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中*args与**kwarsg及闭包和装饰器的用法 - Python技术站