闭包和装饰模式

 
def f1(a,b,c=(),*args,**kw): print( 'f1 a=',a, 'b=',b, 'c=',c, 'args=',args, 'kw=',kw) def f2(a, b, c=(), *args,d, **kw): #一个*元祖 俩个*字典 *以此声明以后参数为关键字参数 print( 'f2 a=', a, 'b=', b, 'c=', c, 'args=', args, 'd=',d, 'kw=', kw) t=( 1, 2, 3, 4, 5) f2(*t, d= 4) f1(*t) kw={ 'a1': 1, 'b': 2, 'd': 3} f2( 6,**kw) 全局变量余局部变量的作用域不同 位置决定作用域 同名时,局部变量优先 g_a= 10 def text1(): a= 20 g_a= 40 # global g_a # g_a=(g_a+a) print( 'text1',g_a) text1() print(g_a) def add(a,b,fun): print(fun(a,b)) def mtfun(a,b) return a+b add( 11, 22, lambda arg1,arg2:arg1+arg2) w= lambda x:[ print(i) for i in range(x)] w= 0 new_list= list( map( lambda x:x% 2, range( 9))) print( type(new_list)) print(new_list) map 会把每个数据都留下 filter 只会留下结果为true的结果 list2=[ 12, 15, 18, 19, 23, 25] filter1= list( filter( lambda x:x% 2== 1,list2)) print( type(filter1)) print(filter1) strs=[ None, '', '', 'd', '吃饭', '睡觉'] def isNone(s): return s and len(s.strip())> 0 strs1= list( filter( lambda s:s and len(s.strip())> 0,strs)) print(strs1) import math print(math.sqrt( 5)% 1== 0) nums= list( filter( lambda x:math.sqrt(x)% 1== 0, range( 1, 101))) print(nums) li=[ 11, 22, 33, 44, 55] reduce=reduce def sqrt2(x): flag= False for i in range( 1,x+ 1): if x% 1!= 0: continue s=x//i print(s) if s== 1 and s//i== 1 and i//s== 1: flag= True return flag nums= list( filter( lambda x:math.sqrt( 2), range( 1, 101))) print(nums) sqrt2 a,b= 3, 5 a,b=b,a #允许同时赋值 print(a,b) 冒泡排序 外侧循环n- 1 内侧循环n- 1-i nums=[ 57, 42, 12, 19, 88, 49, 5, 9] for i in range( len(nums)- 1): for j in range( len(nums)- 1-i): if nums[j]<nums[j+ 1]: nums[j],nums[j+ 1]=nums[j+ 1],nums[j] print(nums) 生成器迭代器 迭代器 生成一个迭代器 class Container: def __iter__( self,start,end): self.start=start self.end=end def __iter__( self): print( '调用了__iter__(self)方法') def __next__( self): if self.start< self.end: i= self.start self.end= self.start+ 1 return i else: raise StopIteration() Cont=Container( 0, 10) for i in Cont: print(i) 生成器 nums=(x for x in range( 10)) print(nums) print( next(nums)) print( next(nums)) print( '欢迎') print( next(nums)) fei=[] def feibonaqi: for i in range( 20): if i> 2: fei.apaend(fei[i- 1]+fei[i] print(fei[i]) def putong( x): for i in range( 20): yield i pt=putong( 10) pt2=putong( 20) for i in pt: print(i, end= ' ') print() for i in pt2: print(i, end= ' ') 函数:表示行为、能力 为一些代码起个名字或者为一些代码做了封装 一般oop 表现在类里 对象里 工厂模式: 1.一些对象的创建行为 需要封装 2.不允许其他类随意创建此对象 3.好处:便于代码维护,分工明确 工厂类:帮助程序创建对象 可以接受不同参数 多复杂的工厂模式都是多个简单工厂 单例模式:一个实例便于资源共享 借助一个变量 中间枢纽 __init__() 初始化数据 __new__() 创建数据 构造函数 @ classmethod 装饰器 将一个实例方法变为类方法 类方法: 1.供所有的对象使用 2.不需要new 直接类名. @ classmethod 加载机制跟类一起加载 在什么情况下使用: 1.当你发现一个方法不依赖于对象形式存在 2.更像一个公共的 @ staticmethod 静态 优先于类 类的定义里面的类方法的第一个默认参数self表示当前对象 类属性 类名直接点 所有对象共同使用 类方法 实例属性 : 必须创建对象,以对象形式存在 实例方法:动态添加的属性或方法 不同对象不共享 类方法可以共同使用 闭包 闭包和装饰模式(装饰器) 相辅相成 def outter(fun): def inner(): print( '123 执行inner') fun() print( '456 执行inner') return inner @outter def index(): print( '我是index......') ()执行 传递引用 ind=outter(index) ind() index() 装饰之火锅点餐 def shucaipinpan(fun): def caidan(): print( '蔬菜拼盘88') return 88+fun() return caidan def yangyou(fun): def caidan(): print( '新西兰羊肉,68') return 68+fun() return caidan def xuebi(fun): def caidan(): print( '雪碧,5') return 5+fun() return caidan @xuebi @shucaipinpan def guodi(): print( '菌汤锅,25元...') return 25 money=guodi() print( '总消费:',money)
first=[]
def outter(fun):
    def inner(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)
ret=fun(x,y)
print(ret)
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值