函数嵌套与装饰器

*应用场景,位置参数中表明将多个参数存入元祖,**将关键字参数传入字典编程

位置参数: 闭包

    位置形参:必须被传值,一一对应函数

    位置实参:按从左到右的顺序与形参一一对应对象

关键字参数:按照key=value形式指名道姓的为形参传值,能够彻底不按照顺序作用域

1.关键字实参必须在位置参数的后面源码

2.能够混用位置实参与关键字实参,但不能为同一个形参重复传值面向对象编程

默认参数:
  形参有默认值容器

可变长参数基础

形参:*args,**kwargs将多余的参数分别封装成元祖与字典变量

实参:将args kwargs分别打散

什么是命名关键字参数?

格式:在*后面参数都是命名关键字参数

特色:必须被传值

2.约束函数的调用者必须按照key=value的形式传值

3.约束函数的调用者必须使用咱们指定的键名

在面向对象编程中,一切皆对象

具体的体现为:

1:函数能够被引用

2:函数能够做为函数的参数

3:函数能够做为函数的返回值

4:能够被存储到容器类型中

2.函数嵌套

1.嵌套调用:在一个函数中调用了另外一个函数

2:嵌套定义 在一个函数中定义了另外一个函数

3.名称空间

存储变量名与值绑定关系的地方

名称空间的分类

  内置名称空间:存储解释器自带的一些名称与值得对应关系

  (Python解释器启动时建立全部代码所有执行完毕 关闭解释器时销毁)

  如 print len max min

  全局名称空间 哪些数据在全局空间?

    文件级别的名称 只要你的名字的定义是顶着最左边写的就是全局空间

    除了内置的函数内的,都在全局中(执行Python文件建立全局名称空间 关闭解释器时 销毁)

   局部名称空间 只要是函数内的名称就是局部的

    (调用函数时建立 函数执行完毕时销毁)

  名称空间的加载顺序

  内置的-全局的-局部的

  名称的查找顺序

  局部-全局的-内置的

4.做用域(做用范围)

域 指的是区域 范围的意思

全局的名称空间和内置的名称空间 在使用上没什么区别

局部的和全局的内置的 就区别了 局部定义的只能在局部使用

给三个空间划分范围

全局的和内置能够划分为同一个范围

global表示的全局范围,就是所谓的全局做用域

局部的单独划分为一个范围

local 局部做用域

5.闭包函数

闭包函数 也是一个函数

与普通函数的区别

1.定义在另外一个函数中的

2.在这个内部的函数中使用了外部的名称

闭包函数,当调用一个函数内部的函数时,还将返回外部函数的数据,这样的函数称之为闭包函数:定义在一个函数内部,且访问外部函数的数据

函数的做用域在定义时就固定了,与调用的位置毫无关系

——closure_用于访问闭包时,打包的数据

为函数体传值的方式

方式一:将值以参数的形式的传入

方式二:在函数内部为变量赋值

什么是装饰器?

  什么是装饰 给一个已有的对象(一个函数)添加新的功能

    为何要装饰 加强功能

装饰器就是给其余函数添加功能的函数

无参装饰器格式:

def outer(func):
  def  inner(*args,**kwargs):
    res = func()
    return res
   return inne

开放关闭原则

  软件一旦上线后,就应该遵循开放关闭原则,即对修改源代码是封闭的,对功能的扩展是开放的

也就是说咱们必须找到一种解决方案

  可以在不修改一个功能源代码以及调用方式的前提下,为期加上新功能

总结:原则以下

1.不修改源码

2.不修改调用方式

目的:在遵循一二的基础上扩展新功能

装饰器与被装饰器的对象都可以是任意可调用的对象

相关文章
相关标签/搜索