参数匿名函数字典排序
*args就是一个元组
**dict就是字典
生成式和生成器
[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)
结果:fun(1000000)
会一直打印,直到结束为止,这样占用大量的系统的资源
(x*x for x in range(0,10)) //生成器, 这里是小括号
//结果 <generator object <genexpr> at 0x7f0b072e6140>
一个直接返回了表达式的结果列表, 而另一个是一个对象,该对象包含了对表达式结果的计算引用, 通过循环可以直接输出
生成式和生成器的区别:
当表达式的结果数量较少的时候, 使用列表生成式还好, 一旦数量级过大, 那么列表生成式就会占用很大的内存,而生成器并不是立即把结果写入内存, 而是保存的一种计算方式, 通过不断的获取, 可以获取到相应的位置的值,所以占用的内存仅仅是对计算对象的保存
yield可以输出多个值 return只能输出一个值(当函数碰到return就跳出整个函数,不会执行下面的):
装饰器的作用
装饰器不改变原函数的运行方式和内容,装饰器就是修饰函数
给函数叫上特定的功能
执行结果:
装饰器传参数:
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()
本文转自 iekegz 51CTO博客,原文链接:http://blog.51cto.com/jacksoner/2066593,如需转载请自行联系原作者