Python基础之特殊函数类型

#Python基础之特殊函数类型


##1.匿名函数
匿名函数:函数名字被隐藏

匿名函数的定义语法:
lambda 参数1,参数2,...,参数n:函数体

注意:匿名函数函数体只有一行代码,并且该行代码必须具有运行结果,运行结果会被作为函数的返回值自动返回(也可以实现只输出功能,但违背了Python简化代码的初衷,一般不建议使用)
匿名函数因为没有函数名,因此通常是通过变量接受该函数,之后通过变量名(参数列表)来调用。同时匿名函数因为代码只有一句,因此匿名函数一般只用来解决比较简单的数据计算问题

# 定义一个匿名函数,返回一个数的平方
num = (lambda x: x ** 2)(10)
print(num)
# 100

# 定义一个匿名函数,返回任意两个数的大小比较
fun = lambda x, y: x > y
result = fun(10,5)
print(result)
# True

# 只输出 不建议使用
num = (lambda x: print(x))(10)
# 10

##2.递归函数
如果一个函数直接或间接的调用本身,这个函数即为递归函数

注意:正确的递归函数都是有限定值的,即有递归次数的限制,不会无限递归下去。因此正确的递归函数需要设置结束位置

# 定义函数完成十进制数转换成二进制数的操作(递归函数)
def getNum(num):
    if num == 1:
        return str(num)
    else:
        num1 = num % 2
        return getNum(num // 2) + str(num1)
print(getNum(1024))
# 10000000000

# 无限制(错误演示,莫要学习)
def getNum(num):
    num1 = num % 2
    return getNum(num // 2) + str(num1)
print(getNum(1024))
# RecursionError: maximum recursion depth exceeded
# 系统报错,超出最大递归深度限制

##3.闭包函数
闭包函数:在A函数内部定义另外一个函数B,之后B作为A函数的返回值直接被返回,此时函数B称为函数A的闭包函数。

在闭包函数中如果使用了A函数中定义的变量,此时A函数中被定义的变量会被临时存储,直到B函数调用结束时,变量才会被系统回收,从而延长A中变量释放的时间

global:声明的变量属于全局变量,此时在使用该变量时,计算机直接到函数的最外层寻找是否存在该变量

nonlocal:声明的变量属于非本地变量,此时计算机不会在当前变量使用的函数中寻找该变量,而是到该函数的最外层寻找该距离函数比较近的对应变量进行应用

# 延续num的寿命
def put(num):
    print(num)
    def wrapper():
        nonlocal num # 非本地变量
        num = num + 20
        print(num)
    return wrapper
fun = put(20)
# 此时put()函数已结束,但num仍存在
fun()
# 20
# 40

##4.装饰器
装饰器:装饰器的作用是,通过@语法直接用定义好的函数修饰之前已经存在的函数,从而实现对原函数功能的扩充

装饰器的优点
1.不需要修改原函数代码,即可实现对原函数功能的扩充
2.利于后期代码的维护

# 定义一个带参数的装饰器
import time
import functools
def log(txt):
    def decorator(fun):
        @functools.wraps(fun)
        # 使用functools中函数将fun函数参数的名字赋值给warpper 等价于wrapper.__name__ = fun.__name__
        def wrapper(*args, **kwargs):
            print(txt, end=" ")
            print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
            return fun(*args, **kwargs)
        return wrapper
    return decorator

# 功能1:求最大值
@log("您当前正在运行的函数运行的时间是")
def max_num(num1, num2):
    print(max(num1, num2))
# 功能2:求最小值
@log("您当前正在运行的函数运行的时间是")
def min_num(num1, num2):
    print(min(num1, num2))
max_num(10, 20)
min_num(10, 20)
# 您当前正在运行的函数运行的时间是2018-07-28 16:03:41
# 20
# 您当前正在运行的函数运行的时间是 2018-07-28 16:10:42
# 10

##5.偏函数
偏函数:将指定的函数和函数中默认的参数进行绑定,生成一个新的函数,比如把int函数和int的默认参数base绑定生成一个新的函数int2,int2此时进行数据转化时按照二进制数据进行转化

import functools
int2 = functools.partial(int, base=2)
print(int2("1000"))
# 8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值