参数匿名函数字典排序、生成式和生成器、装饰器的做用

参数匿名函数字典排序

*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()