二.python面对对象 ------8 闭包和装饰模式和随机数和模块

 闭包
 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,
 并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

 一般情况下,在我们认知当中,如果一个函数结束,
 函数的内部所有东西都会释放掉,还给内存,
 局部变量都会消失。但是闭包是一种特殊情况,
 如果外函数在结束的时候发现有自己的临时变量
 将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
 

闭包和装饰模式 相辅相成
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个子
包组成的python应用程序执行环境。

通俗一点:包是一个包含__init__.py 文件的目录,
该目录下一定得有这个__init__.py文件和其它模块或子包。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值