一.列表推导式
-->列表推导式:需要使用for循环来生成一个新列表时,可用到列表推导式
-->格式:【表达式 for 变量 in 旧列表 if 条件】
-->实例
for循环
lst = [0,1,2,3,4,5,6,7,8,9]
lst2 = []
for j in lst:
if j % 3 == 0:
lst2.append(j)
print(lst2)
# [0, 3, 6, 9]
列表推导式
new_list = [ifor iin range(0,10)if i %3 ==0]
print(new_list)
# [0, 3, 6, 9]
二.生成器
-->产生:生成器可以一边循环一边进行计算,不用一下子就生成一个很大的集合,占用内存空间。
-->优点 : 生成器的使用节省内存空间。
-->创建:
1.列表推导式,把一个列表生成式的 [ ] 改成( )
l = [i *3 for iin range(10)]
print(type(l)) <class 'list'>
r = (i *3 for iin range(10))
print(type(r)) <class 'generator'>
-->遍历生成器对象中的内容:
for iin r:
print(i)
0 3 6 9 12 15 18 21 24 27
-->获取元素._next_(),或者next()
print(r.__next__()) #0
print(r.__next__()) #3
print(next(r)) #6
print(next(r)) #9
2.函数,只要函数中出现yield,函数变成生成器函数,简单来说:只要在def中有yield关键字的 就称为 生成器
def f1():
num =0
while True:
num +=1
yield num
g = f1()
print(type(g)) //<class 'generator'>
print(g.__next__()) # 1
print(g.__next__()) # 2
print(next(g)) # 3
print(next(g)) # 4
三.迭代器
迭代: 获取元素
可迭代对象 1.列表 字典 集合 元组 字符串.... 2.生成器
-->如何判断一个对象是否是可迭代的
-->isinstance() 判断一个对象是否是另一个对象的实例
import collections
lst = [1,2,3,4]
g = (xfor xin range(10))
print(isinstance(lst, collections.Iterable)) #True
print(isinstance('123', collections.Iterable)) #True
print(isinstance(123, collections.Iterable)) #False
print(isinstance(g, collections.Iterable)) #True
-->迭代器 可以被next()函数调用,并不断返回下一个值的对象
-->可迭代对象 != 迭代器
lst = [1,2,3,4]
print(next(lst)) #'list' object is not an iterator
# 通过iter()函数将可迭代对象编程迭代器
lst =iter(lst)
print(next(lst)) #1
四.面向对象简介
-->程序运行当中,数据存放在内存中被CPU运行
-->对象是内存中用来存储数据的一块区域
对象的结构: 1.id 2.type 3.value
类class
--> int str list ...python内置对象 ,它们无法满足需求,因此需要自定义对象
class MyClass():
pass
print(MyClass) <class '__main__.MyClass'>
a = MyClass
print(type(a)) <class 'type'>
-->对象实例
# 定义一个狗的类
# 在类的代码中,可以定义变量和函数,这些可以被这个类创建出的所有对象访问
# 变量作为这个类的属性(name age ..),函数作为类的方法(run speak...)
# 访问属性 实例。属性名
# 访问方法 实例的函数名()
class Dog():
# 定义属性
name ="小黑"
age ="2"
# 定义方法
def run():
print("running...")
dog1 = Dog
print(dog1.name) # 小黑
print(dog1.age) # 2
dog1.run() # running...