1.迭代器和生成器:
1)生成器
- 可以看成一个可以存储多个数据的容器。需要里面的数据的时候就生成一个,里面的数据只能从前往后一个一个的生成,不能跳跃,也不能从后往前,生成过的数据不能在生成了
- 获取生成器里面的数据,需要使用_next_()方法
- 生成器存的是一个产生数据的规律
- 函数声明中有yield关键字,函数就不再是一个单纯的函数了,
而是变成一个生成器,生成器就是保存一定规律的容器 - 和列表比较:列表存数据,数据必须是实实在在存在的数据,一个数据会占一定的内存空间。
生成器存数据,存的是产生数据的算法,没有数据去占内存空间
# 1,1,2,3,4,5,8,13,21
def xu_lie(n):
pre_1=1
pre_2=1
for x in range (1,n+1):
if x==1 or x==2:
current=1
yield current
continue
current=pre_1+pre_2
pre_1,pre_2=pre_2,current
# print(current)
yield current
xulie=xu_lie(10)
print(xulie.__next__())
print(xulie.__next__())
print(xulie.__next__())
print(xulie.__next__())
for x in xulie:
print('==',x)
if __name__ == '__main__':
pass
# i for i in range(10) #生成式
x=(i for i in range(10))
# x就是一个生成器,用来产生数据
print(x)
print(x.__next__())
print(x.__next__())
结果:
1
1
2
3
== 5
== 8
== 13
== 21
== 34
== 55
<generator object <genexpr> at 0x000001FC31119408>
0
1
2.认识面向对象
1)类
对拥有相同属性和功能的对象的封装(集合)
类是抽象
?类中相同属性的(大部分)值是不确定的
2)对象
对象就是类的实例
对象是具体
对象的属性是确定的
例:
如果说人是一个类,我就是一个对象,老王也是人的一个对象
如果说电脑是一个类,我桌上的这台mac就是一个对象
如果说杯子是一个类型,我桌上这个粉色的杯子就是一个对象
3.面向对象编程
面向过程编程:一步一步的写代码实现功能-->工具:逻辑和算法
函数式编程:面对问题考虑有没有拥有某种功能的函数-->工具:函数
面向对象编程:面对问题考虑有没有相应的对象来解决这个问题-->工具:类和对象
3.类的声明
1)类的声明:
- 格式;class 类名(父类):类名后面的()可有可无
属性
方法
class:python中声明类的关键字
类名:标识符,类名的首字母大写,驼峰式命名
() :类要继承其它的类,需要写括号,括号里面是父类的
名字。括号可以省略
属性:包含对象属性和类的字段-->保存数据
方法:实质就是声明在类中的函数-->实现功能
2)声明对象:
- 通过类的构造方法创建对象(名字和类名同名的方法就是构造方法,自动生成)
- 对象名=类名()
- 类对象可以通过点语法使用类中声明的对象方法和属性
对象.方法名()
对象.属性名
例:
# 1.声明一个person类
class Person:
'''
类的说明:人类
'''
# 声明两个对象方法,需要使用对象来调用
'''
对象方法都有一个默认参数self,在调用的时候不用传参
(系统会自动给self传参),谁来调用这个方法,self就是谁
'''
def eat(self):
print(self)
print('正在吃饭')
def sleep(self):
print(self)
print('正在睡觉')
if __name__ == '__main__':
# 声明对象
p1=Person()
print(p1)
# 一个类可以有多个对象
p2 = Person()
print(p2)
# 对象可以调用对象方法
p1.eat()
p2.sleep()
结果:
<main.Person object at 0x000002265A069C88>
<main.Person object at 0x000002265A069CF8>
<main.Person object at 0x000002265A069C88>
正在吃饭
<main.Person object at 0x000002265A069CF8>
正在睡觉
4.对象的属性
1)对象属性的声明
class 类名:
def __init__(self)
self.属性名1=初值
self.属性名2=初值
init(self)系统自带的一个方法,不能直接调用,而是通过类创建对象的时候,系统会自动调用这个方法
init()方法的作用是对对象的属性进行初始化
通过构造方法创建对象的时候,一定要保证,init方法中除了self以外,其他的每个参数都必须有值
例:
class Person:
def __init__(self,name='',age=0,sex='男'):
#在这里声明对象的属性
print('===')
# print(name)
#在init方法中声明对象属性
'''
name、ag和sex就是Person这个类的对象属性,
类的对象属性,需要通过对象来使用
'''
self.name=name
self.age=age
self.sex=sex
if __name__ == '__main__':
# 注意:构造方法中的参数,实质给init()方法
# 的参数赋值
p1=Person('付波',24)
print(p1.name,p1.age,p1.sex)
p2 = Person('付波')
print(p2.name,p2.age, p2.sex)
#创建的饿时候不给属性值赋值
p3 = Person()
print(p3.name,p3.age, p3.sex)
p4= Person(name='付波',age=18)
print(p4.name,p4.age, p4.sex)
结果:
===
付波 24 男
===
付波 0 男
===
0 男
===
付波 18 男
5.属性的增删查改
1)查看属性(获取属性)
方法一:对象.属性(如果属性不存在,会报错)
方法二:对象.getattribute(属性名)
和getattr(对象,属性名)
网友评论