闭包
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,
并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,
函数的内部所有东西都会释放掉,还给内存,
局部变量都会消失。但是闭包是一种特殊情况,
如果外函数在结束的时候发现有自己的临时变量
将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
闭包和装饰模式 相辅相成
def outtre(fun):
def inner():
print('123 执行inner')
fun()
print('456 执行inner')
return inner
@outtre
def index():
print('我是index....')
# 加()执行 不加 传递引用
ind=outtre(index)
ind()
index()
练习1。
def shucaipiipan(fun):
def caidan():
print('蔬菜拼盘88')
fun()+88
return caidan
def yangyou(fun):
def caidan():
print('新西兰羊肉 35')
return 35+fun()
return caidan
def xuebi(fun):
def caidan():
print('雪碧 8')
return 8+fun()
return caidan
@xuebi
@yangyou
def goudi():
print('菌汤锅。。23元。。')
return 23
noney=goudi()
print('总消费:',noney)
练习二。
first=[]
def outter(fun):
def inner(y):
# lan=lambda x,y:x+y
for x in range(1,5):
first.append(fun(x,y))
return inner
def suan(x,y):
return x*y
out=outter(suan)
out(9)
for i in first:
print(i)
x=int(input('请输入一个数字'))
y=int(input('请输入一个数字'))
fun=input('请输入一个数字')
fun=eval(fun)
print(type(fun))
ret=fun(x,y)
print(ret)
import random 随机数 random.choice(range(1,34))随机取1-33之间的1个随机数,可能重复
random.choices(range(1,34),k=6,weight=range(1,34))方法,可以产生6个,
但有可能重复,可看源码
常用:shus=random.sample(range(1,34),6)随机取6个,
不重复,得到一个列表,但是没有排序
import random
print(random.choices(range(1,30)))
print(random.choices(range(1,30),k=9,weights=range(1,30)))
print(random.sample(range(1,30),6))
模块:
import sys
print(sys.path)路径。打印后是一个列表,可以向其中追加路径
reload()重新加载路径
模块互相调用不可以,会产生死锁
模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,
定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,
就可重用这些函数和变量。一般用module_name.fun_name,
和module_name.var_name进行使用。这样的语义用法使模块看起来很像类或者名字空间,
可将module_name 理解为名字限定符。模块名就是文件名去掉.py后缀。
client.py
def func():
print "hello world!"
main.py
import client
if __name__ == '__main__':
print __name__
client.func()
print client.__name__
>>python main.py ---> result:
__main__
hello world!
client
python包是:
包是一个有层次的文件目录结构,它定义了由n个模块或n个子
包是一个有层次的文件目录结构,它定义了由n个模块或n个子
包组成的python应用程序执行环境。
通俗一点:包是一个包含__init__.py 文件的目录,
该目录下一定得有这个__init__.py文件和其它模块或子包。