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

相关推荐

  • 高阶函数和装饰器

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

    Python笔记 2018-04-23
  • python函数与作用域

    ##函数– 函数— 数学定义:y=f(x),y是x的函数,x是自变量— python函数:由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元;完成一定的功能 – 函数的作用— 结构化编程对代码的最基本的封装,一般按照功能组织一段代码— 封装的目的是为了复用,减少冗余代…

    2017-10-17
  • 基于Python和MoviePy库实现数据的动态展示

    基于Python和MoviePy库实现数据的动态展示 (翻译:以马内利)  原文链接:Data Animations With Python and MoviePy   Python拥有很多实现数据可视化的库,但是很少可以展示GIFs的动态视图。 这篇博客主要介绍怎样使用MoviePy库作为一个其他可视化库的通用插件。 Movi…

    2015-03-26
  • 日志分析项目

    日志分析

    2018-05-07
  • 树 概念


    二叉树

    2018-04-16
  • Centtos7搭建ftp服务

    Centtos7搭建ftp服务 下载安装软件包 yum -y install vsftpd   开启启用ftp服务 systemctl start vsftpd    #设置立即启用该服务 systemctl status vsftpd   #查看该服务当前运行状态 systemctl enable vsftpd   #设置开机自动启用该服务 systemc…

    Python笔记 2018-07-07