python基础班第十一课
列表推导式
生成器
迭代器
对象的简介
类的简介
类的使用
上次作业详解
复习
列表推导式
# 推导式 列表推导式
# 用简单代码创建一个新列表
# [表达式 for 变量 in 旧列表]
# [表达式 for 变量 in 旧列表 if 条件]
lst1 =['cheney','tony','jerry','amy','juran']
def fun():
new_lst =[]
for name in lst1:
if len(name) >3:
new_lst.append(name)
return new_lst
print(fun())
lst2 =[name+'新年好' for name in lst1 if len(name) >3]
print(lst2)
# 求1-100能被3整除的数 range右边取不到
lst3 =[i for i in range(2, 100) if i % 3 == 0]
print(lst3)
lst4 =[i for i in range(2, 100) if i % 3 == 0 and i % 6 == 0]
print(lst4)
生成器
# 生成器 按顺序取数据!! 生成器一旦被创建成功,超过值就会报错
# 生成器创建
# 方式一 通过推导式的方式生成
# lst1 =[x * 3 for x in range(1, 11)]
# 将推导式的[]变成小括号()
lst1 =(x * 3 for x in range(1, 11))
# <generator object <genexpr> at 0x000001B78E8768E0>
print(lst1,type(lst1))
print(lst1.__next__()) #生成器方式
print(next(lst1)) #或者这种
def fun():
i =0
while True:
i +=1
return i #return作用之一:结束函数
r =fun()
print(r)
def fun():
i =0
while True:
i +=1
# return i #return作用之一:结束函数
yield i ###常用!!!yield!!!!
r =fun()
print(r)
# 函数方式
def fun():
i =0
while True:
i +=1
# return i #return作用之一:结束函数 return后就不执行了
yield i #暂时堵塞程序
r =fun()
print(next(r))
print(next(r))
#生成器特征 生成一个生成器 一旦数据取完了,数据就不存在了
def fun():
for i in range(10):
yield i #在这里生成了一个生成器
r = fun()
print(r) ##调用了fun()
lst1 =[i for i in r]
lst2 =[i for i in r]#因为lst2没有了next所以是空集
print(lst1)
print(lst2)
迭代器
# 可迭代对象
# 迭代器
lst1 =[1,2,3,4,5]
diedaiqi =iter(lst1)
print(type(diedaiqi),diedaiqi)
lst2 =[i for i in diedaiqi] #推导式生成器
print(lst2)
# 可迭代对象实现了_iter_()方法的对象,而迭代器则实现了_iter_()和_next_的方法
# iter是自身self,而迭代器next是传值取下一个
# 迭代器
lst1 =[1,2,3,4,5]
diedaiqi =iter(lst1)
print(type(diedaiqi),diedaiqi)
# lst2 =[i for i in diedaiqi]
# print(lst2)
# 或者
print(next(diedaiqi))#next()生成器调用
print(next(diedaiqi))
print(next(diedaiqi))
对象的简介
# 面向对象 所有操作都是通过对象来进行的
# 不注重过程,关注对象 拿功能过来用
# 面向过程关注的是每一个过程每一个细节
# 面向对象关注的是这个事情的结果
类的简介
# 类 class
# 类的简介
# 类(图纸) 对象(按图纸造出来的车)
str()#str() 类一般没有功能,有功能的是对象
print('abc'.split('b'))
# a ='abc'
# # print(type(a))
class MyClass():
pass
print(MyClass)
# MyClass是类的名称
# MyClass()是类的实例化 也是对象
# 一个类可以有很多对象
class MyClass():
pass
# print(MyClass)
mc =MyClass #没有()就是类
print(mc,type(mc))
# isinstance 检测一个对象是不是这个类的对象
r =isinstance(mc,MyClass)
print(r)
class MyClass():
pass
# print(MyClass)
mc =MyClass() # 创建对象也称呼为累的实例化
print(mc,type(mc))
# isinstance 检测一个对象是不是这个类的对象
r =isinstance(mc,MyClass)
print(r)
类的使用
class MyClass(): #创建一个类
pass
print(id(MyClass),type(MyClass))
class Person(): ## 创建又一个类
name ='liuyifei' # 数据 在类里面称呼为(属性 )给类加属性
def speak(w):# 能做什么事情 行为(方法) 类下面的一个方法
print('changgehaoting')
## 两个对象
p1 = Person()
p2 = Person()
# 这是给实例对象添加属性的方式
p1.name = 'zhouhuimin' # p1添加了一个值 给实例对象添加属性的方式
print(p1.name)
print(p2.name) #类有属性就出现类的属性,类没有属性就报错
p1.speak() # 方法的使用 调用了类里面的方法
上次作业详解
import time
def get_time(fun):
def inner():
begin = time.time()
fun() #加个位置给后面的@调用上来
end =time.time()
print(end - begin)
return inner
@get_time
def fun1():
for i in range(10000000):
pass
fun1()
复习
# 复习
# 推导式 语法 [表达式 for 变量 in 列表 if 表达式]
# 生成器generator 方式一:推导式由[]变()(表达式 for 变量 in 列表 if 表达式)
# 生成器generator 方式二
# def fun():
# i =0
# while True:
# i +=1
# yield i
#
# r =fun()
# print(next(r))
# 迭代器
# list1 =[1,2,3]
# diedaiqi =iter(list1)
# print(next(diedaiqi))
# 注意:迭代器会在上次的位置停留 迭代器一旦数据取完,那么你继续用next()来取数据会直接报错
# 迭代器数据只能取一次,取完一次迭代器就不能继续用了
# 面向对象
# 类的创建和实例对象的生成
class Person():
name ='tony' #属性
def speak(self): #类的里面的方法
print('hahahaha')
p1 =Person() #创建实例对象
p1.name ='jerry' #给实例对象添加属性
p2 =Person()
p2.speak() #实例对象调用类中的方法