python函数的作用域,闭包,默认值等

函数的区间
程序中的函数要在被调用的前边来定义
同一个函数名可以多次定义,定义后会覆盖前一个函数,调用时会调用调用处最新定义的那个函数
在函数外代码区中定义的变量,又称为全局变量,可以在函数中调用它 (必须在调用函数的语句之前定义这个变量,要不然会报错)
函数中可以定义和全局变量名相同的一个变量,这样得到的变量只能够在函数内使用,外部无法访问(赋值即定义)
函数如果使用了全局变量(函数内没有定义就引用),就不能够在使用和全局变量变量名相同的变量
全局变量如果为不可变类型,  数值型,字符串,元组等. 函数引用它时就不能对它做任何修改,其实外部也不能对它做任何修改,但是外部能够重新定义它可以在函数中声明(使用 global)这是一个外部变量,使得函数中也可以重新定义这个变量
全局变量如果为可变类型,list,set,dict等.函数中可以对它做出修改,并在外部访问变量时访问到修改后的变量,但是也不能够重新定义它,同样它可以在函数中声明(使用 global)这是一个外部变量,使得函数中也可以重新定义这个变量
函数的嵌套
一个函数内部定义一个函数,这个函数可以调用或者不调用,这个函数的函数名可以是任意的甚至是和它的外部函数同名,而不引起歧义.当然这个函数内部也可以定义函数. 这种情况称为函数的嵌套
函数内定义的变量的作用域在函数内部以及它包含的函数中
c=100                                    左边的函数内部定义的 c ,由于定义的是全局变量,因此访问到的c的值为100
def counter():                         如果没有使用global 它将访问counter() 中的c
    c=5                                     但是使用上面的c,不能对它进行从新的定义,这里遇到的情况和函数中使用全局变量的类似
    a=10                                  使用nonlocal关键字,将变量标记为在上级的局部作用域中, 但它不能替代global使用
    def inc():                              (nonlocal 只能是对外部函数中定义的那个变量使用,并使其局部作用域增大
        global c  –>nonlocal  c
        c+=1
        return c
    return inc
foo = counter()
foo()
函数的 __defaults__属性
函数在第一遍执行时就会获取这个属性,它包含函数定义的所有的参数的默认值,这个属性对象伴随整个函数生命周期
可变类型默认值,如果使用默认值,就可能修改这个默认值
再次执行,如果继续使用这个可变类型默认值,就会使用修改过了后的默认值,这样又会改变那个可变默认值
修改默认值之后,如果再次调用函数,而不使用这个可变类型的默认值,__defaults__属性又会回归未修改的

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87832

(0)
daishitongdaishitong
上一篇 2017-10-16 09:41
下一篇 2017-10-16 13:47

相关推荐

  • IPython封装解构和集合

    IPython Shell命令 !command 执行shell命令 !ls -l , !touch a.txt file = !ls -l | grep py 魔术方法 使用%开头的,IPython内置的特殊方法 %magic 格式 %开头是line magic %% 开头是cell magic,notebook的cell %alias 定义一个系统命令的…

    Python笔记 2018-03-31
  • Ipython封装解构

    IPython Shell命令 !command 执行shell命令 !ls -l , !touch a.txt file = !ls -l | grep py 魔术方法 使用%开头的,IPython内置的特殊方法 %magic 格式 %开头是line magic %% 开头是cell magic,notebook的cell %alias 定义一个系统命令的…

    2018-04-09
  • 类的继承

    Edit 类的继承 基本概念 面向对象三要素之一,继承Inheritance 举例: 人类和猫类都继承自动物类 个体继承自父母,继承了父母的一部分特征,但也可以有自己的个性 在面向对象的世界中,以父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码、多复用。子类可以定义自己的属性和方法 class Animal: def shout(self): pr…

    2017-11-15
  • 面向对象,魔术方法

    面向对象 一面向对象 什么是面向对象: 一种认识世界、分析世界的方法论。将万事万物抽象为类。 类class: 类是抽象的概念,是万事万物的抽象,是一类事物的共同集合的集合。 用计算机语言来描述类,就是属性和方法的集合。 对象instance,object: 对象是类的具象,是一个实体。 每个个体都是抽象类的不同实体。 哲学 一切皆对象 对象是数据和操作的封装…

    Python笔记 2018-05-14
  • Python内置数据结构——列表

    知识框架图 学习笔记 数据结构分类 数值 int、float、complex、bool都是class int:长整型,没有上限,取决于内存区域大小 float:支持十进制和科学计数法,仅支持双精度 complex:复数,有实数和虚数部分 bool:int的子类,True、False对应1、0,可以和整数直接运算 序列对象 字符串str 列表list 元组tu…

    2018-03-26
  • Python学习第十三周总结

    网络协议和管理、http服务和Apache

    2018-06-03