函数和装饰器
函数
简介
函数也叫方法,是编程中不可或缺的组成部分,在代码编写的过程中,会出现很多代码复用的情况,这种时候把代码块抽离出来构建一个函数,这样在其他需要同样的写法时可以使用函数。
参数
默认参数、位置参数、关键字参数
- 形参:定义函数时的参数,如
public void Func(a,b)
中的a、b就是形参 - 实参:调用函数时的传入的值,如
Func(1,2)
中的1、2就是实参 - 默认参数:定义参数时为形参提供的默认值,且默认参数必须在尾端,如果调用函数时没有传入参数,则会取默认参数的值
- 位置参数:调用函数时传入的参数数量和位置都与定义函数时保持一致,则称为位置参数
- 关键字参数:调用函数时使用的是键值对方式传入,即key=value,混合传参时关键字参数必须在位置参数之后;关键字参数允许你以任何顺序传递参数,不再需要与形参的位置完全一致,只要将参数名写正确即可。
def TestFunc(num1,num2):
return num1-num2
print(TestFunc(num2=10,num1=3))
可变参数
简介
可变参数一般用于函数中,当我们不确定函数需要使用多少参数,或者不确定参数的类型情况下,会使用到可变参数;但是各种编程语言中的可变参数都不太一样,在C#中使用关键字params来修饰可变参数,且必须是在参数列表的末尾,在python中,使用 * 或者 ** 来标识可变参数
*args 和 **args
- 定义: *args 和 **args 都是可变参数。
*args用来表示多个无名参数,本质是元组类型
**args用来标识关键字参数,本质是字典类型 - *args允许函数接收任意数量的位置参数,这些参数会议字典的形式传入内部函数,其中args是参数名称,可以是任意名称,不一定非得是args
- **args允许函数接收任意数量的关键字参数,这些参数会以字典的形式传入函数内部,其中args是参数名称,可以是任意名称,不一定非得是args
def TestFunc(*args1,**args2):
print(args1)
print(args2)
TestFunc("abc",5,x=7,y=55)
装饰器
简介
装饰器是给现有的模块增添新的小功能,可以对原函数进行功能扩展,而且还不需要修改原函数的内容,也不需要修改原函数的调用。装饰器的使用符合了面向对象编程的开放封闭原则。
def MsgFunc(msg=None):
def Decorator(func):
def warpper(*arg,**arg2):
func(*arg,**arg2)
return warpper
return Decorator
@MsgFunc(msg="this is a test")
def TestFunc(*arg,**arg2):
for v in arg:
print(v)
for k,v in arg2.items():
print(f"K:{k} V:{v}")
TestFunc("abcd",5,x=1,y=8)
def TestBoard(func):
def wapper(*arg,**args):
result = func(**args)
print(result)
return wapper
@TestBoard
def CalcValue(x,y):
return x+y
CalcValue(y=20,x=12)