zoukankan      html  css  js  c++  java
  • 函数嵌套与装饰器

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

    位置参数: 

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

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

    关键字参数:按照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.不修改调用方式

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

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

  • 相关阅读:
    spring-boot启动debug信息中non-fatal error解决
    is present but cannot be translated into a null value due to being declared as a primitive type
    mysql联合索引
    Spring RestTemplate 专题
    Android Studio开发入门-引用jar及so文件
    它们偷偷干了啥?教你监督APP的运行
    解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
    No resource found that matches the given name 'android:WindowTitle'
    Android studio:library module依赖篇
    com.android.support:appcompat-v7:21.+
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10034310.html
Copyright © 2011-2022 走看看