Python 10
今天学习了生成器,迭代器及其关系,递归函数,面向对象,类的定义,属性,实例化对象
字典列表集合推导式
列表推导式和集合推导式一样
dict1={'a':1,'b':2}
dict2={y:x for x,y in dict1.items()}
print(dict2)#{1: 'a', 2: 'b'} 字典推导式,实现key,value互换
生成器 generator 生成器是一种特殊的迭代器
tumple1 = (i for i in range(5) if i % 2 == 0)#生成方法
print(tumple1)#<generator object <genexpr> at 0x00000288D3EA5A98>
print(tumple1.__next__())#0
print(next(tumple1))#2 两种调用方法,调用一次输出一次
next(g生成器对象,default)
函数+yield:
注意:
- 定义函数+添加关键字:yield
- 调用函数得到的是一个生成器对象
g = func()
g就是生成器对象 - 结合next(g)
只要遇到yield则会将其后面值返回并且暂停
下一次在调用next(g)—>从暂停位置开始执行
函数:
next() : 同系统next(g)
g.next()
next(g)
以上均可以得到下一个元素
send(): 每次调用的时候需要向生成器中传值
注意: 第一次必须: send(None)
以后就可以给send(value)
字符串,列表,元组,字典是可迭代对象,但不是迭代器,可以使用iter()成为迭代器
from collections import Iterator,Iterable 迭代器或可跌倒对象需要导包
tumple1 = (i for i in range(5) if i % 2 == 0)
print(isinstance(tumple1,Iterable)) #True 是可迭代类型
print(isinstance(tumple1,Iterator)) # True是迭代器
str=''
list1=[1,3,5,7]
tumple2=(1,3,5,7)
set1={1,3,5,7}
dict1 = {'a': 1, 'b': 2}
print(isinstance(str,Iterator))#False
print(isinstance(list1,Iterator))#False
print(isinstance(tumple2,Iterator))#False
print(isinstance(set1,Iterator))#False
print(isinstance(dict1,Iterator))#False
*************************
print(isinstance(str,Iterable)) #True
print(isinstance(list1,Iterable)) #True
print(isinstance(tumple2,Iterable)) #True
print(isinstance(set1,Iterable)) #True
print(isinstance(dict1,Iterable)) #True
递归函数
调用自身的函数,用斐波那契的两种方式来体现,若没有一个出口会无限循环,必须要有一个出口
斐波那契数列:
1,1,2,3,5,8,13,21,…
1.实现一个递归函数,求斐波那契数列第n个数。
方式一
list1=[]
def digui(n):
for i in range(n):
if i ==1 or i==0:
list1.append(1)
else:
list1.append(list1[i-1]+list1[i-2])
digui(5)
print(list1)
------------------------------------------
方式二
def func(n):
if n==1 or n==2:
return 1
else:
return func(n-1)+func(n-2)
list1=[]
for i in range(1,8):
list1.append(func(i))
print(list1)
面向对象(一点)
类: Object,,一切皆物体(对象)。类是某一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体, 一组具有相同属性和行为的对象的抽象。
对象::将具有相似属性和方法的对象总结抽象为类对象,可以定义相似的一些属性和方法,不同的实例对象去引用类对象的属性和方法,能减少代码的重复率。。创建对象:对象=类名()
属性:类属性是指定义在类的内部而且在方法的外部的属性,对象属性是指定义在方法的内部的属性,修改属性可以通过直接修改类,或者通过对象修改,但不会影响类
方法: 对象对于接受到的消息的一个响应,功能,函数