python学习笔记十三

推导式

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导:

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式
    基本格式为: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

列表推导式

a = [i for i in range(30) if i % 3 == 0]
print(a)

Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

字典推导式

实例:
例:快速交换key和value

d = {'a': 10, 'b': 34}
d_dome = {v:k for k, v in d.items()}
print (d_dome)

#  Output: {10: 'a', 34: 'b'}

集合推导式

它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。

实例:

dome = {x**2 for x in [1, 1, 2]}
print(dome)

 Output: set([1, 4])

迭代器Iterator

迭代器

  • 迭代器是访问可迭代对象的工具
  • 迭代器是指用iter(obj)函数返回的对象(实例)
  • 迭代器是指用next(it)函数获取可迭代对象的数据

注意:
1.迭代器只能往前取值,不会后退
2.用iter函数可以返回一个可迭代对象的迭代器,如果无法获取下一条记录,则触发stoptrerator异常
示例:

list = [1, 2, 3, 4, 5, 6]
l = iter(list) 
print(next(l))
print(next(l))

isinstance() 检查一个对象是否是另一个对象的实例```

 print(isinstance(lst,Iterable)) # True
 print(isinstance('123',Iterable)) # True
 print(isinstance(123,Iterable)) # False
  print(isinstance(g,Iterable)) # True

迭代器用途

用迭代器可以依次访问可迭代对象的数据
示例:
list = [2, 3, 5, 7]
it = iter(list)
while True:
x = next(it)
print(x)
注意:超出取值范围会报错

生成器

生成器定义

一边循环一边计算的机制,称为生成器:generator。

为什么要有生成器

简单一句话:我又想要得到庞大的数据,又想让它占用空间少,那就用生成器!

如何创建生成器

第一种方法很简单,只要把一个列表生成式的**[]改成()**,就创建了一个generator:
实例:
列表生成式
l=[xx for x in range(10)]
print(l)
生成器
l=(x
x for x in range(10))
print(l)

生成器的工作原理

(1)生成器(generator)能够迭代的关键是它有一个next()方法,

工作原理就是通过重复调用next()方法,直到捕获一个异常。

(2)带有 yield 的函数不再是一个普通函数,而是一个生成器generator。

可用next()调用生成器对象来取值。next 两种方式 t.next() | next(t)。

可用for 循环获取返回值(每执行一次,取生成器里面一个值)

(基本上不会用next()来获取下一个返回值,而是直接使用for循环来迭代)。

(3)yield相当于 return 返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行。

(4).send() 和next()一样,都能让生成器继续往下走一步(下次遇到yield停),但send()能传一个值,这个值作为yield表达式整体的结果

可迭代对象,迭代器和生成器三者之间的关系

可迭代对象:可以进行for循环都是可迭代对象,原因是其内部实现了一个__iter__方法
迭代器:能够进行next(迭代器对象),都是迭代器对象,其内部实现了__iter__和__next__方法
生成器:元祖推导式和函数里使用yield的函数都是生成器
生成器属于迭代器
迭代器属于可迭代对象

类的简介

面向对象中两个重要的概念:
1.类 :对一类事物的描述,是抽象的、概念上的定义。比如做石膏像的模型
2.对象:实际存在的该类事物的每个个体,因而也称实例(instance)。比如石膏像
二者的关系:对象是由类派生的、创建的。一个类可以创建无穷多个对象,每个对象都属于类。

定义一个简单类
‘’’
class 类名([父类]):
代码块
‘’’
class MyClass:
pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值