上期作业
#使用递归的方式,实现二分查找
def binary_search(lists,data):
n=len(lists)
if n<1:
return "找不到"
mid=n//2#中间索引
if lists[mid]>data:
#要是中间索引的值大于我们想要的值,我们就到中间索引的左边的列表去找
return binary_search(lists[0:mid],data)
elif lists[mid]<data:
return binary_search(lists[mid +1 :],data)
else:
return mid
lists=[1,2,3,4,5,6,7,8,9]
print(binary_search(lists,3))
#函数的其他用法
#生成器,有些列表生成的时间很长,
#但是可能只使用列表的一小部分
def simpleGeneratorFun():
n=1
yield n
n=n+2
yield n
n=n+3
yield n
gen = simpleGeneratorFun()
#print(gen)
print(next(gen))
print(next(gen))
print(next(gen))
#生成器函数里的数用完了,再有next就会报错
#一般使用for函数
for value in simpleGeneratorFun():
print(value,end=" ")
1
3
6
1 3 6
import time
def fun1(num):
i=0
while i<num:
yield i #yield类似return,程序暂停执行,将值返回
i+=1
t1= time.time()
fun1(100000)
for j in fun1(10):
c=j
print(c)
t2=time.time()
print(t2-t1)#计算一下程序的执行时间
0
1
2
3
4
5
6
7
8
9
0.0009999275207519531
#迭代器
#iterable
my_iter=iter([1,2])
[i**2 for i in my_iter]
[1, 4]
#但是第二次再调用迭代器就没有了
[i**2 for i in my_iter]
[]
numbers=[1,2,3]
en = enumerate(numbers)#这个函数返回的就是一个迭代器
print(en)
print(next(en))
print(next(en))
print(next(en))
<enumerate object at 0x00000246278DC2D0>
(0, 1)
(1, 2)
(2, 3)
zi=zip(numbers,numbers)#返回也是一个迭代器
print(zi)
print(next(zi))
print(next(zi))
<zip object at 0x00000246278D3A88>
(1, 1)
(2, 2)
re=reversed(numbers)#返回也是迭代器
print(next(re))
print(next(re))
print(next(re))
3
2
1
##
##函数的闭包
def function_outside():
cnt=1
def function_inside():
print(cnt)
function_inside()
function_outside()
#内侧函数没有输入值的时候,可以调用外侧函数的变量
1
def function_outside():
cnt=1
def function_inside():
nonlocal cnt#如果没有这句话则会报错
cnt+=1
print(cnt)
function_inside()
function_outside()
2
#函数的闭包
def function():
say="Hello"
def hello(name):
print(say,name)
hello("xdbcb8")
hello = function()
Hello xdbcb8
#闭包的条件
#首先创建一个嵌套函数
#这个嵌套函数必须引用外层函数定义的变量
#外层函数返回嵌套函数
def function():
say="Hello"
def hello(name):
print(say,name)
return hello
hello =function()
hello("xdbcb8")
Hello xdbcb8
#如果客户有不同的标准
#比如客户a要求大于1000有效,客户b要求大于100有效,则可以使用闭包函数
def vali_f():
testx=eval(input("请输入一个测试数据"))
def validata(x):
if testx>x:
return 1
else:
return 0
return validata
validata=vali_f()
isval=validata(1000)
if isval:
print("数据有效")
else:
print("数据无效")
请输入一个测试数据100
数据无效
#闭包的延迟
def fun_out():
numList=[]
for i in range(10):
def fun_inside(x):
return i*x
numList.append(fun_inside)
return numList
for fun_iterm in fun_out():
print(fun_iterm(1))
9
9
9
9
9
9
9
9
9
9
##
#函数的装饰器decorator
def selftest(work):
def entertainment():
print("电脑自检中……")
work()
return entertainment
def watching_movies():
print("电影真好看")
def play_game():
print("游戏真好玩")
interest=1
watching_movies=selftest(watching_movies)
play_game=selftest(play_game)
if interest ==1:
watching_movies()
else:
play_game()
电脑自检中……
电影真好看
def selftest(work):
def entertainment():
print("电脑自检中……")
work()
return entertainment
@selftest
def watching_movies():
print("电影真好看")
@selftest
def play_game():
print("游戏真好玩")
interest=1
#watching_movies=selftest(watching_movies)
#play_game=selftest(play_game)
if interest ==1:
watching_movies()
else:
play_game()
电脑自检中……
电影真好看
def selfClean(air_condition):
def clean(feature):
print("空调自清洁")
air_condition(feature)
return clean
def air_condition(select):
if select==1:
print("吹冷风")
else:
print("吹热风")
powerOn=selfClean(air_condition)
powerOn(1)
空调自清洁
吹冷风
def selfClean(air_condition):
def clean(feature):
print("空调自清洁")
air_condition(feature)
return clean
@selfClean
def air_condition(select):
if select==1:
print("吹冷风")
else:
print("吹热风")
air_condition(1)
空调自清洁
吹冷风
def selfClean(air_condition):
def clean(*args,**kwargs):
print("空调自清洁")
air_condition(*args,**kwargs)
return clean
def definiteTime(air_condition):
def timing(*args,**kwargs):
print("空调定时关机启动……")
air_condition(*args,**kwargs)
return timing
@selfClean
@definiteTime
#先执行上面的
def air_condition(select,wp):
if select==1:
print("吹冷风")
print("风力强度:%s"%(wp))
else:
print("吹热风")
print("风力强度:%s"%(wp))
air_condition(1,"自动")
空调自清洁
空调定时关机启动……
吹冷风
风力强度:自动
def selfClean(air_condition):
def clean(*args,**kwargs):
print("空调自清洁")
air_condition(*args,**kwargs)
return clean
def definiteTime(hour):
def timing(air_condition):
def poweroff(*args,**kwargs):
print("空调定时{}小时后,自动关机……".format(hour))
air_condition(*args,**kwargs)
return poweroff
return timing
def windPower(wind):
def level(air_condition):
def windy(*args,**kwargs):
print("目前空调风力:{}".format(wind))
air_condition(*args,**kwargs)
return windy
return level
@selfClean
@definiteTime(3)
@windPower("自动")
#先执行上面的
def air_condition(select):
if select==1:
print("吹冷风")
else:
print("吹热风")
air_condition(1)
空调自清洁
空调定时3小时后,自动关机……
目前空调风力:自动
吹冷风