关于闭包函数 lambda函数 高阶函数 装饰器

梳理函数关于闭包函数 lambda函数 高阶函数 装饰器的知识点

壹.闭包函数

闭包函数一般满足三个特征
	1.函数嵌套
	2.外函数输出内函数
	3.内函数引用外函数的参数

一般来说,函数的格式应该是这样的:

def out_fun(x):
	def in_fun(y):
		return x+y
	return in_fun
# 引用函数
print(out_fun(1)(2))
# 输出3

贰.匿名函数lambda

当函数过于简单,并且只需要用一次时,我们可以选择使用匿名函数来增加代码的可读性和维护成本。但是匿名函数只有一个返回值,如需要返回多个,可以打包为元组来实现。

语法格式:
lambda 参数1,参数2....: 表达式

例子:

print((lambda x:x+2)(2))
# 输出为4

# 同样也可以通过变量来继承匿名函数,来多次使用
f= lambda x: x+3
print(f(3))
# 输出6

# 匿名函数也可以无参数
f =  lambda : print("hello world")
print(f())
# 输出hello world

# 也可以使用关键词不定长参数和位置不定长参数
f = lambda *a,**b:a,b
print(f([1,2,3,4],a=1,b=2,c=3))

叁.高阶函数

map

map 是 Python 中的一个内置函数,用于将一个函数应用于可迭代对象的每个元素,并返回一个迭代器,该迭代器生成应用函数后的结果。

map(函数, 可迭代对象, ...)
def square(x):
    return x * x

numbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)

print(list(squares))  # 输出:[1, 4, 9, 16, 25]

reduce

reduce 是 Python 中的一个内置函数,用于将一个函数应用于可迭代对象的连续元素,并返回一个值。reduce 函数的基本语法如下

from functools import reduce
def add(x, y):
    return x + y
numbers = [1, 2, 3, 4, 5]
sum = reduce(add, numbers)
print(sum)  # 输出:15

filter

用于遍历序列中的每个元素,根据条件进行筛选,返回一个包含被筛选后结果的迭代器。

也就是一个筛选函数,通过一个条件的T or F来区分,

# 区分出偶数
def is_even(x):
    return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # 输出:[2, 4, 6, 8, 10]

装饰器

装饰器是 Python 中一种特殊类型的函数,用于修改其他函数的行为。装饰器接受一个函数作为参数,并返回一个新的函数,该函数可以修改原始函数的行为。
装饰器的基本语法:

@decorator
def function():
	pass

在上面的例子中,@decorator 是装饰器,function 是要被装饰的函数。装饰器通常用于添加日志记录、性能测试、事务处理、缓存等通用功能。
如:

def log_decorator(func):
    def wrapper(*args, **kwargs):
    	# 在函数前输出
        print(f"Calling function {func.__name__}")
        result = func(*args, **kwargs)
        # 在函数后输出
        print(f"Function {func.__name__} returned {result}")
        return result
    return wrapper

@log_decorator
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")  # 输出:
                   # Calling function say_hello
                   # Hello, Alice!
                   # Function say_hello returned None

如果装饰器有参数,那需要先将参数赋予,在进行装饰,也就是:

def repeat_decorator(repeat_count):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(repeat_count):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat_decorator(3)
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")  # 输出:
                   # Hello, Alice!
                   # Hello, Alice!
                   # Hello, Alice!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值