一、课堂笔记(18:00-19:00)1.
'''生成器generator'''
#eg 类似分页 不直接把所有数据
#保存数据的算法
#-------------生成器
a = (x*x for x in range(4))
#使用next()方法,可以获取生成式中的下一个元素
# print(next(a))
#如果生成器中的元素取完了,则抛出stopIteration异常
# print(next(a))
#--------利用函数实现生成器
import time
# def nature():
# n = 1
# while True:
# # print(n)
# #return(作用:返回一个值;终止函数)
# #yield(作用:返回一个值;暂停函数的执行)
# yield n
# n += 1
# #休眠1s
# # time.sleep(1)
# nature()
from collections.abc import Iterable
#判断某种对象obj的什么类型,true false
print(isinstance(g,Iterable))
2
'''高阶函数'''
#1.一个函数a可以接收另一个函数b作为参数,我们把这个函数a称为高阶函数
#2.函数作为参数传入
#函数名本质上就是一个指向该函数的变量
#------------函数作为参数插入
#----------map()函数 映射(系统提供的高阶函数)
#可以将一个列表映射成另外的新列表
#类似的高阶函数reduce、filter
# def g(x):
# return x.lower()
# r = map(g,['aaA','uDEu'])
# print(list(r))
# def s(*args):
# ss = 0
# for arg in args:
# ss += arg
# return ss
# print(s(2,4,6,8))
#---------函数作为返回值
#闭包(内外数据的引用):数据的安全性
3
'''匿名函数 lambda表达式'''
#一般处理简单的问题
r = map(lambda x:x*x,[1,2,3,4])
print(list(r))
#可以传多个参数
f = lambda x,y:x+y
print(f(2,4))
def is_odd(n):
return n%2 == 1
s = lambda n:n%2 == 1
print(s(3))
print(s(2))
4
'''装饰器Decorator'''
#在代码运行期间动态增加功能的方式,称为装饰器
#------创建一个装饰器
def log(func):
'''
将要被装饰的参数
'''
def wrapper(*args,**kw):
print(func.__name__)
return func(*args,**kw)
return wrapper
import time
#---------调用装饰器
# @log #调用装饰器
#(上述的调用 相当于 下面调用(1行))
# dd = log(now) #调用log
# dd() #调用wrapper
@log # now = log(now)
def now():
# print(time.asctime())
print(time.strftime('%Y-%m-%d %H:%M:%S '))
# f =now
# f()
# now.__name__ = 'old'
# print(now.__name__)
# dd = log(now) #调用log
# dd()
二、难点(重点)练习(19:00-20:00)
1.使用生成器构造一个自然数序列1,2,3,4,.......
def aa():
n = 1
while True:
yield n
n += 1
g = aa()
for e in g:
print(e)
time.sleep(1)
2.求和(2,4,6,8)
def lazy_s(*args):
def s():
ss = 0
for arg in args:
ss += arg
return ss
return s
aa = lazy_s(2,4,6,8)
print(aa())
三、完成作业(20:30-22:00)
1.计数器
使用闭包实现 计数器函数
def counts():
def numbers():
n = 1
while True:
yield n
n += 1
for i in numbers():
aa = input('aaa:')
if aa == 'y':
print(i)
elif aa == 'n':
print('end...')
print(i-1)
break
elif aa != 'y' or aa == ' ' or aa != 'n':
print('errer....')
break
i += 1
return numbers
dd = counts()
dd()
2.['tom','MIKE','Tony'] -> ['Tom','Mike','Tony']
def g(x):
return x[0].upper()+x[1:].lower()
r = map(g,['tom','mIKE','Tony'])
print(list(r))
3.1,1,2,3,5,8,13.........
def bb():
a = 0
b = 1
t = 0
while True:
yield b
a,b = b,a+b
h = bb()
for e in h:
print(e)
time.sleep(1)
4.实现一个计时器装饰器
|