a站网址是什么,网站建设网站制作价格,网站建设捌金手指花总十九,网站开发需要哪些职位lambda匿名函数
python使用lambda表达式来创建匿名函数
语法
// lambda 参数们#xff1a;对参数的处理
lambda x : 2 * x
// x 是参数#xff0c; 2*x 是返回值
//使用lambda实现求和
sum lambda arg1, arg2 : agr1 arg2
print(sum(10,20))
// 将匿名函数封装在一…lambda匿名函数
python使用lambda表达式来创建匿名函数
语法
// lambda 参数们对参数的处理
lambda x : 2 * x
// x 是参数 2*x 是返回值
//使用lambda实现求和
sum lambda arg1, arg2 : agr1 arg2
print(sum(10,20))
// 将匿名函数封装在一个函数里面可以用同样的代码来创建多个匿名函数
def myfunc(n):return lambda a : a * n
mydoubler myfunc(2)
mytripler myfunc(3)
print(mydoubler(11)) // 2 * 11
print(mytripler(11)) // 3 * 11
lambda函数不能访问自己的参数列表以外或者全局命名空间里面的参数
lambda的主体是一个表达式而不是代码块仅仅能封装有限的逻辑进去
推导式
【Python】推导式列表推导式、元组推导式、字典推导式、集合推导式详解_一个写湿的程序猿的博客-CSDN博客 列表推导式 [表达式 for 变量 in 列表]
或者
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
// 例子
l [1,2,3]
[print(item) for item in l if item 1] 字典推导式 {key_expr:value_expr for value in colletion if conditon}
key_expr:新key生成表达式可以是有返回值的函数
value_expr新value生成表达式可以是有返回值的函数
for value in colletion if conditon迭代colletion中满足条件的value传入到key_expr:value_expr中 集合推导式 {expression for item in Sequence if condition}
expression:新元素生成表达式可以是有返回值的函数体
for item in Sequence if condition将满足条件的Sequence迭代传入expression表达式 元组表达式【生成器表达式】 元组推导式可以利用range区间元组列表字典和集合等数据类型快速生成一个满足指定要求的元组 expression for item in Sequence if condition
expression:新元素生成表达式可以是有返回值的函数体
for item in Sequence if condition将满足条件的Sequence迭代传入expression表达式
enumerate内建函数
enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列同时列出数据和数据下标
enumerate(sequence,[start0]) sequence为一个序列迭代器或者其它支持迭代对象返回的是一个enumerate对象 通过enumerate对象的遍历可以获得索引于数据的组合对 list [1,2,3,4]
for index, value in enumerate(list):print(f第{index},{value})
# 结果如下
第0,1
第1,2
第2,3
第3,4
迭代器与生成器 迭代器是访问集合元素的一种方式迭代器特征为 是一个可以记住遍历位置的对象 迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束迭代器只能往前而不会后退 迭代器有两个基本方法iter和next字符串列表元组都可以用于创建迭代器 迭代器对象可以用for进行遍历也可以使用next()函数来获取下一个值 list [1,2,3,4]
my_iterator iter(list)
while True:try:element next(my_iterator)print(element)except StopIteration:# 迭代结束退出循环break 生成器使用了yield的函数被称为生成器generator 生成器是一个返回迭代器的函数只能用于迭代操作简单说生成器就是一个迭代器 在调用生成器的运行过程中每次遇到yield式函数都会暂停并保存当前所有信息返回yield的值。并在下一次执行next方法时从当前位置继续运行 调用一个生成器函数返回的是一个迭代器对象 # 定义一个生成器函数
def my_generatpr(n):for i in range(n):# 使用yield语句返回元素yield i * i
# 创建一个生成器对象并遍历元素
for element in my_generatpr(5):print(element)
迭代器和生成器的作用 节约内存循环过程中数据不用一次读入迭代器不会保存所有值。而是在运行中动态的计算出数列的各个值并将之前的数值扔掉 不依赖索引取值 实现惰性计算需要时再取值计算 精简代码使用yield关键字或者生成器表达式可以很方便的生成一个迭代器对象
装饰器 函数装饰器本质上是一个python函数可以让其它函数在不需要做任何代码改动的前提下增加额外功能 提供了符号作为装饰器的语法糖 使用语法糖要求装饰件函数必须retrurn一个对象 # 定义一个函数装饰器
def my_decorator(func):def wrapper():print(Before function call)func()print(After function call)return wrapper()
# 使用函数装饰器
# 原有功能打印”hello world“
my_decorator
def say_hello():print(hello world)
#调用函数
say_hello()
# 结果
TypeError: NoneType object is not callable
Before function call
hello world
After function call 类装饰器 可以用来改变类的行为由python类和符号组成在python中通常用于实现代码复用日志记录性能测试等功能
# 定义一个类装饰器
class MyClassDecorator:def __init__(self, cls):self.cls cls
def __call__(self, *args, **kwargs):new_args Dear args[0]instance self.cls(new_args, **kwargs)return instance
# 使用类装饰器
# 原有功能打印 hello名字
MyClassDecorator
class MyClass:def __init__(self, name):self.name name
def say_hello(self):print(fhello, {self.name})
# 创建实例
my_object MyClass(Alice)
# 调用实例的方法
my_object.say_hello()
# 打印的结果hello,DearAlice 需要注意的是装饰器本身并不会改变原始代码的功能而是通过创建一个新的函数来实现对原始函数或者类的修改因此在使用装饰器时需要确保新创建的函数或者类与原始代码有相同的接口或者行为以免对其它依赖于改代码的程序产生影响。