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)
上一篇 2017-10-16 09:41
下一篇 2017-10-16 13:47

相关推荐

  • 文件IO常用操作

    io模块 StringIO BytesIO 类
    pathlib模块 路径操作 3.4版本开始
    os模块 更改权限、显示信息 3.4版本之前路径操作
    shuril 模块(高级文件操作
    csv 文件
    configparser模块 ini文件处理

    2018-05-02
  • 调试你的Python代码

    调试你的Python代码 译自: http://howchoo.com/g/zgi2y2iwyze/debugging-your-python-code 作者: Ashley     当你不得不更新别人的代码时,你有多少次陷入这样一种境地?如果你是一个开发团队的一员,那我猜一定多于你愿意的次数。 结果我们发现Pytho…

    Python干货 2015-03-23
  • 制作python模块安装包[原创]

     python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。 一、…

    Linux干货 2015-03-27
  • 类的继承

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

    2017-11-15
  • 高阶函数和装饰器

    高阶函数和装饰器 高阶函数 : 满足以下条件之一的称为高阶函数 接受一个或多个函数作为参数 输出一个函数 高阶函数举例: def counter(base): def inc(step=1): nonlocal base base += step return base return inc 1)自定义sort函数 def sort(itertable): …

    Python笔记 2018-04-23
  • 杨辉三角专题

    杨辉三角;二项式

    2018-04-09