一、装饰器

  一)装饰器的知识储备

  不想修改函数的调用方式,但是还想在原来的函数前后添加功能

  1、可变长参数  :*args和**kwargs

1 def index(name,age):
2     print(name,age)
3 
4 def wrapper(*args,**kwargs):
5     #即args=(1,2,3,4,5),kwargs={'x':1,'y':3}
6     index(*args,**kwargs)
7     #index(1,2,3,4,5,y=2,x=5)

  2、函数对象:被当做数据传递

    1、函数可以当做参数传给另外一个函数
    2、一个函数的返回值,也可以是一个函数(打破函数的层级关系)
        def f1():
            def f2():
                print('f2')
            return f2  ##打破函数的层级关系
        f=f1()
        f()

  3、名称空间和作用域

    1、名称空间:
        分类:分三种
            内置名称空间:Python解释器启动则生效,关闭时失效
            全局名称空间:执行Python文件时生效

            内置名称空间:调用函数时,临时生效;函数调用结束失效
         加载顺序:先内置,在全局,最后有可能产生局部
         查找名字的顺序:先局部,再全局,最后内置
    2、作用域
        分类:分两种
            全局作用域:全局存活,全局有效
            局部作用域:临时存活,局部有效
    强调:作用关系在函数定义阶段已经固定,与调用位置无关

  二)闭包函数

  1、定义

1、定义在函数内部的函数
2、包含对外部作用域名字的引用,而不是对全局作用域名字的引用
   那么该内部函数称之为闭包函数

  2、实例

闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式
 1 x = 1
 2 def f1():
 3     x=111111111111
 4     def f2():  #f2是闭关函数
 5         print(x)
 6     return f2  ##获取返回值
 7 func=f1()
 8 # func()
 9 
10 def  foo():
11     x=1988193190112131
12     func()
13 foo()
View Code

相关文章:

  • 2022-12-23
  • 2021-06-03
  • 2022-12-23
  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-15
猜你喜欢
  • 2021-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2021-09-20
  • 2022-12-23
相关资源
相似解决方案