python中的lambda表达式和迭代器

Lambda表达式

简介

匿名函数,又称lambda表达式,是一种在程序中定义、传递和执行函数的灵活方式。通过匿名函数,我们可以不用为函数命名而直接在需要的地方定义和使用函数,极大地提高了代码的简洁性和灵活性。python中的匿名函数不需要使用def声明,并且仅支持单语句,不支持复杂逻辑和多条语句。无需使用return返回结果,默认返回None

使用

testP = lambda x: x + 1  # lambda函数声明
testP(10)

nums = [10, 12, 15]
nums2 = list(filter(lambda x: x %2 == 0, nums))   # 根据lambda的返回值进行筛选
print(nums2)

image
image

迭代器和生成器

简介

迭代器,也称为光标,是一种程序设计模式。无论是序列容器还是关联容器,最常做的操作就是遍历容器中的元素,而遍历操作本质上是相同的,就是将存储的数据一个一个向外传递,这时就可以设计一个适用于所有容器的通用算法,它必须能够遍历容器内部数据,并且对外隐藏容器的差异,这就是迭代器的产生,一种泛型思维的落实,与C和C++中的指针类似,数据可以是任意类型,通过迭代器指向容器中的某个元素。
生成器,迭代器的一种,每次从该迭代器中取下一个值返回。

使用

python中使用迭代器的方法有两个基础方法:iter()【创建迭代器对象】和next()【指针后移】

def testFunc():
    print("testFunc")
test = {"asbd",123,"ahcbg",testFunc}	# 集合声明
testIter = iter(test)			# 迭代器对象创建
for x in testIter:			# 循环获取迭代器的返回值
    print(x)

def TestFunc(n):
    while n>10:
        yield n				# 生成器返回值
        n-=1

test = TestFunc(20)
print(f"{next(test)}         nextCall")		# 获取生成器的当前值,并且光标后移一位
print(f"nextCall         {next(test)}")		# 获取生成器的当前值,并且光标后移一位
for v in test:
    print(v)

image
image

创建

C#中实现迭代器需要继承IEnumerable和IEnumerator,这些接口定义了枚举行为和遍历方法,而python中则需要实现__iter__和__next__方法,当迭代完所有数据后,迭代器将不会输出任何数据

class A:
    def __init__(self, n):		# 初始化函数,定义了初始化需要执行的内容
        self.idx = 0
        self.n = n

    def __iter__(self):		# 迭代器函数,定义了迭代器内容的具体实现,并且返回一个当前迭代器对象
        print('__iter__')
        return self

    def __next__(self):		# 迭代器函数,定了迭代器内容的实现,并且实现了异常标识迭代的完成,返回下一个迭代器对象
        if self.idx < self.n:
            val = self.idx
            self.idx += 1
            return val
        else:
            raise StopIteration()	# 完成执行循环次数后,触发StopIteration结束迭代
        
a = A(5)
for i in a:
    print(i)

for i in a:
    print(i)

image

posted @ 2025-06-09 20:52  请明月  阅读(10)  评论(0)    收藏  举报