函数
形参实参
- 定义函数时创建形参
def add(a: int, b: int, c: int, d: int)-> int:
return a + b + c + d
- 调用函数时使用实参
add(1, 2, 3, 4)
变长参数
*args
将参数打包成 tuple 调用
def fun(*args: tuple)->None:
print(args)
print(type(args))
fun(1)
fun(1, 'A')
**kwargs
将参数打包成 dict 给函数调用, 参数位置必须是*args
, **kwargs
顺序, 否则程序报错
def fun(**kwargs: dict)->None:
print(kwargs)
print(type(kwargs))
fun(name = 'WANG')
fun(num = '20209902', name = 'TI', age = 18)
参数解包
*实参
在序列类型参数前添加*
, 会将序列中元素依次作为参数传递
def func(a, b):
print(a, b)
p1 = (1, 2)
p2 = [4, 5]
func(*p1)
func(*p2)
**实参
对一个字典进行解包操作, 键对应函数形参, 值对应实参
def func(a, b):
print(a, b)
p = {'a': 11, 'b': 22}
func(**p)
装饰器
概念
装饰器函数可在不影响原有函数结构上, 给函数添加额外功能
def timer(func):
def wrapper(*args, **kwargs):
...
func(*args, **kwargs)
...
# 返回内层函数引用
return wrapper
@timer
def add(a, b):
print(a + b)
高阶函数
接受函数为入参, 或者把函数作为结果返回的函数. 后者称之为嵌套函数
闭包
指延伸作用域函数, 其中包含函数定义体中引用、但是不在定义体中定义的非全局变量. 简单来说就是嵌套函数引用外层函数变量
@
python语法糖, 作用类似
# 返回timer.<locals>.wrapper函数引用
add = timer(add)
add(1, 2)
- 显示每个函数运行时间
import time
def runtime(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func()
end_time = time.time()
print(end_time - start_time)
return wrapper
@runtime
def func():
num = 0
for i in range(1234356):
num += i
print(num)
func()
- 显示当前运行函数函数名
def defname(func):
def wrapper(*args, **kwargs):
print("def name is :%s" % func.__name__)
return func(*args, **kwargs)
return wrapper
@defname
def func_a():
print("aaaaaaa")
@defname
def func_b():
print("bbbbbbb")
func_a()
func_b()