山东省地方税务局网上申报,赛音网,安徽卫视勇者无敌
概念
生成器的生成方式1:
list2 = [x for x in range(10)] print(type(list2)) # 得到一个生成器对象 g = (x*2 for x in range(10)) print(type(g)) # 打印生成器生成的第一个数字 print(next(g)) print(next(g)) print(next(g)) 一共10个数字,打印超出报stopiteration异常
def fibo(n): a,b=1,1 i = 3 while i <= n: if i == 1 or i == 2: return 1 else: a,b = b,a+b i += 1 else: print(b)
生成器的生成方式2(包含yield关键字的函数):
def getnum(): for i in range(10): yield i
生成器中元素的访问方式:
def gen(): print('a') count = yield 1 print ('--->',count) print ('b') yield 2 #注意打印结果 g = gen() next(g) g.send('123') next(g)
其他使用场景:(携程,实现两个任务的交替调用)
def save(): while true: yield print ('save') def draw(): while true: yield print ('draw') g1 = save() g2 = draw() while true: next(g1) next(g2)
def funcout(): name = 'jery' def funcin(): print(name) return funcin f = funcout() f()
def funcout(): name = 'abc' def funcin(): print(name) pass #如果打印none,则不是闭包函数 print(funcin.__closure__) return funcin f=funcout() f()
def outfunc(func): def infunc(): writelog() func() return infunc def fun1(): print("使用功能1") def fun2(): print("使用功能2") # 注意名字的问题,需要分析 fun1 = outfunc(fun1) # 装饰器(闭包) fun1() 使用装饰器(语法糖)解决 def outfunc(func): def infunc(): writelog() func() return infunc @outfunc def fun1(): print("使用功能1") @outfunc def fun2(): print("使用功能2") fun1() fun2()
def add1(fc): print("add1正在装饰") def wrapped(): return "《"+fc()+"》" return wrapped def add2(fc): print("add2正在装饰") def wrapped(): return '*'+fc()+'*' return wrapped #看到这个,开始进行装饰,而不是等到调用时 @add1 @add2 def test1(): return '金陵十三钗' print(test1())
def func(fn): print("func") def func_in(aa, bb): print("func_in1") fn(aa,bb) print("func_in2") return func_in @func def test(a, b): print("a=%d,b=%d" % (a, b)) # 装饰器装饰之后,这不是直接调用test方法,而是调用func_in方法 test(1,2)
def func(fn): # 需要有参数,*args,**kwargs def func_in(*args,**kwargs): print("记录日志") print('访问方法:'+fn.__name__) # 需要有参数,*args,**kwargs xx = fn(*args,**kwargs) # 需要有返回值 return xx return func_in
# 待装饰函数:无参数,无返回值
@func def test1(): print("test1") test1() @func def test2(): return "hello" print(test2()) @func def test3(a): print('a=%d'%a) test3(1)
class goods(): discount = 1 def __init__(self,price,name): self.name = name self.price = price def price_discount(self): return self.price * goods.discount @classmethod def change_discount(cls,new_discount): cls.discount = new_discount
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论