*args就是一个元组
**dict就是字典ide
[x*x for x in range(0,10)] //列表生成式,这里是中括号
//结果 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]函数
例子:
In [33]: def fun(n):
...: for i in range(1,n):
...: print(i*2)3d
结果:fun(1000000)
会一直打印,直到结束为止,这样占用大量的系统的资源code
(x*x for x in range(0,10)) //生成器, 这里是小括号
//结果 <generator object <genexpr> at 0x7f0b072e6140>对象
一个直接返回了表达式的结果列表, 而另外一个是一个对象,该对象包含了对表达式结果的计算引用, 经过循环能够直接输出blog
生成式和生成器的区别:
当表达式的结果数量较少的时候, 使用列表生成式还好, 一旦数量级过大, 那么列表生成式就会占用很大的内存,而生成器并非当即把结果写入内存, 而是保存的一种计算方式, 经过不断的获取, 能够获取到相应的位置的值,因此占用的内存仅仅是对计算对象的保存排序
yield能够输出多个值 return只能输出一个值(当函数碰到return就跳出整个函数,不会执行下面的):内存
装饰器不改变原函数的运行方式和内容,装饰器就是修饰函数 给函数叫上特定的功能
执行结果:资源
装饰器传参数:input
user_auth=False def auth(auth_type): def test(func): def login(*args,**kwargs): if auth_type == 'qq': global user_auth username='shenjie' passwd='123' if user_auth==False: user=input('please input name: ') pwd=input('please input pwd: ') if user==username and pwd==passwd: print('login is success...') user_auth=True else: print('username or passwd is wroing') if user_auth==True: return func(*args,**kwargs) #执行函数test2() else: print('only qq。。。') return login return test @auth('qq') #这句话 就是 test2=auth(test2) def test2(): print('welcome to test2...') test2()