Python学习第十天----函数补充

4.1可变参数

形参个数不明确时,可以吧形参设置为可变参数

格式:

def 函数名 (*形参名)
    方法体
    return 结果
调用:函数名(实参,实参,...)
可变的形参变量被当做元组存放

4.2关键字参数

关键字参数就是调用函数的时候允许调用者传入0个或多个带有形参名的字段数据

当声明函数时,不知道调用者具体传递的字段和其对应的数据,这个时候就把这个变量声明成关键字参数

声明方式:

def 函数名(形参1,形参2,**变量名):
    方法体
    return 结果
​
**变量名在函数体中被当做字典存在    变量名 = 数据
def accept_data(name, email, **kwargs):
    print(name,email,kwargs)  
accept_data("小沐", "[email protected]", city="北京", sex="女")
输出:小沐 [email protected] {'city': '北京', 'sex': '女'}

4.3匿名函数

快捷生成一个简易函数的方式

格式:

def add(a, b):
    return a+b
可以使用匿名函数完成
f = lambda 形参1,形参2,...:执行语句(一般只有一条)
​

4.4偏函数

在某些场景下,一些场景的默认需求不能满足场景,为了便于函数的使用,在原函数的基础上,修改默认参数来满足需求

1.自定义函数,在函数内部调用原函数并修改原函数的功能

def my_print(src):
    print(src, end="!")
my_print("abc")
输出为:abc!

2.系统提供的生成偏函数的方式

import  functools
a = functools.partial(print,end=“!”)
#此时a()具有print()方法的功能,且结束符为“!”
a("asd")
输出为:asd!

4.5闭包

一个函数内有另外一个函数的声明

def out():
    外部函数体
    def in():
        内部函数体
    

内部函数只能在外部函数体重中直接调用,在函数外部不可以直接调用内部函数

def out():
    print("1")
    def inin():
        print("2")
    print("3")
    return inin
​
a = out()
a()
输出:
1
3
2
内部函数在不被调用时不会执行
在调用外部函数时把内部函数当做返回值返回,才可以在函数外部调用内部函数

当内部函数要对外部函数变量进行修改时,用nonlocal修饰

装饰器:

特殊的闭包:外部函数的返回值是内部函数作用:在不改变原有功能A的基础上,调用A并增加新的功能格式:

def out(参数1): #参数:接收要添加新功能的函数
    外部函数体
    def inin(*value,**kwargs):#参数,外部函数接收的函数需要的参数
        内部函数体
        res = 参数1(*value,**kwargs)
    return inin
    
@out()  #此时外部函数已经被调用
def my():
def out_add(add1):
    print("0")
    def in_add,输出1,并返回2+4(num1, num2):
        print("1")
        sum = add1(num1, num2)
        return sum
    return in_add
​
@out_add    # 此时,my_add被当做参数传给out_add,执行out_add()函数,并返回内部函数in_add,
#之后在调用my_add()时,实际上是调用的in_add(),
def my_add(a, b):
    return a+ b
​
print("2")
print(my_add(2,4))
print(my_add(3,4))
输出:
0       #py文件从上往下顺序执行,先执行到@out_add,执行外部函数输出1,这时内部函数并没有被调用
2       #继续向下执行输出2  
1       #第一次调用my_add,实际上调用内部函数in_add,输出1,并返回2+4
6
1
7
当为一个函数添加装饰器时,装饰器对应的外部函数只会被执行一次。@外部函数的时候执行的

猜你喜欢

转载自blog.csdn.net/qq_33407999/article/details/81413378