python3生成一个定长列表_python3基础09列表推导式|迭代器|生成器|匿名函数

"pythonic生物人"的第46篇分享213570eb449dd201e1ea0b1aaca817ca.png6600320e48ad0e218e0a7c959f65e1ad.png6600320e48ad0e218e0a7c959f65e1ad.png

python3匿名函数、推导式、迭代器和生成器用法。

目录

1、匿名函数(lambda)2、推导式(comprehensions)    列表推导式    字典推导式    集合推导式3、迭代器(Iterator)    可迭代对象(Iterable)    迭代器(Iterator)    判断对象是否是可迭代对象或迭代器    迭代(Iteration)4、生成器(Generators)    ()包围列表推导式生成    自定义函数中添加yield关键字构建生成器

正文开始啦

1、匿名函数(lambda)

个人理解为一种简单的定义函数的方式,不需要使用def关键字定义函数。语法:lambda 参数:操作参数表达式。

add = lambda x, y: x + y
print(add(3, 5))

8

list(map(lambda x, y: x + y, range(-2, 2), range(1, 5)))
#传入两个iterable对象range(-2, 2), range(1, 5)

[-1, 1, 3, 5]


2、推导式(comprehensions)

列表,字典和集合中都可以使用推导式。

列表推导式

一种简单创建列表的方法。

#if 语句置于for之后
In [29]: [x for x in range(1, 11) if x % 2 == 0]
#对于range(1, 11)中每个元素,能被2整除的输出组成新列表
Out[29]: [2, 4, 6, 8, 10]

#if 语句置于for之前可以使用else
In [30]: [x if x % 2 == 0 else -x for x in range(1, 11)]
#对于range(1, 11)中每个元素,能被2整除的输出原值,不能整除的取原值负数输出,组成新列表
Out[30]: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]

字典推导式

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
{k:v for k,v in mcase.items()}

{'a': 10, 'b': 34, 'A': 7, 'Z': 3}

集合推导式

{x**2 for x in [1, 1, 2]}#集合不允许重复

{1, 4}


3、迭代器(Iterator)

可迭代对象(Iterable)

python中的对象,只要具有方法__iter__和__getitem__就是可迭代对象,可迭代对象能提供迭代器。

迭代器(Iterator)

被定义了__next__方法的python对象。

判断对象是否是可迭代对象或迭代器

from collections.abc import Iterable, Iterator
def g():
    yield 1
    yield 2
    yield 3
#是否为python可迭代对象判断
print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable))#isinstance()判断一个对象是否是Iterable对象
print('Iterable? \'abc\':', isinstance('abc', Iterable))
print('Iterable? 123:', isinstance(123, Iterable))
print('Iterable? g():', isinstance(g(), Iterable))

#是否为python迭代器判断
print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))#isinstance()判断一个对象是否是Iterator对象
print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator))
print('Iterator? \'abc\':', isinstance('abc', Iterator))
print('Iterator? 123:', isinstance(123, Iterator))
print('Iterator? g():', isinstance(g(), Iterator))
Iterable? [1, 2, 3]: True
Iterable? 'abc': True
Iterable? 123: False
Iterable? g(): True
Iterator? [1, 2, 3]: False
Iterator? iter([1, 2, 3]): True
Iterator? 'abc': False
Iterator? 123: False
Iterator? g(): True 

迭代(Iteration)

使用一个循环来遍历某个python对象时,这个过程就叫迭代。


4、生成器(Generators)

生成器也是一种迭代器,但是,只能对其迭代一次。这是因为它们并没有把所有的值存在内存中(可节省大量内存),而是边循环边生成值(生成器保存算法,可以计算下一个元素的值),创建生成器方法如下:

( )包围列表推导式生成

g = (x * x for x in range(10))#只迭代一次,只存储算法,不会生成所有元素存储于内存。
g

at 0x000002B53772C4C0>

for i in g:#for循环打印每个生成器中元素,在执行输出nothing(只迭代一次,只存储算法)
    print(i)

0149162536496481

自定义函数中添加yield关键字构建生成器

推算算法很复杂时使用自定义函数。举个例子,计算斐波那契数列的生成器。

def fibon(n):
    a = b = 1
    for i in range(n):
        yield a#该函数为一个生成器
        a, b = b, a + b
 for x in fibon(1000000):
    print(x) #不用担心它会使用大量资源      

参考资料

https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128
Intermediate Python

同系列文章
python3基础06流程控制语句 python3基础07函数(自定义) python3基础08函数(python内置)

213570eb449dd201e1ea0b1aaca817ca.png213570eb449dd201e1ea0b1aaca817ca.png原创不易"点赞"、"在看"0b421402dd74d6de94c1a55869b5cc6a.png励下呗7ca1929f723918e1002ba9d313d3b9c4.png1cbd6d83a5200c2a2d8fb55c3007d361.png

5bdcb7ebf61b8d30b05307076a32c6fd.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值