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

相关推荐

  • 面向对象之魔术方法

    特殊属性 属性 含义 __name__ 类、函数、方法的名称 __module__ 类定义所在的模块名 __class__ 对象或类所属的类 __bases__ 类的基类的元组,顺序为它们在基类列表中出现的顺序 __doc__ 类、函数的文档字符串,若没定义则为None __mro__ 类的mro,方法查找顺序 __dict__ 类或实例的属性,可写的字典 …

    2018-05-20
  • 几个python运维面试题及答案

    1.生成随机的20个ID ID格式要求: 时间戳_三位随机数字号码_8位随机小写字母 1506571959_089_xxkeabef datetime.datetime.now().timestamp() 返回的是时间戳,但是带微秒 2.判断密码强弱 要求密码必须由 10-15位 指定字符组成: 十进制数字 大写字母 小写字母 下划线 要求四种类型的字符都要…

    2017-10-02
  • 正则表达式

    正则表达式 分类 BRE:基本正则表达式,grep,sed,vi等软件支持,vim有扩展 ERE:扩展正则表达式,egrep,grep -E ,sed  r等 PCRE:几乎所有的高级语言都是PCRE的方言或则变种, 基本语法 元字符metacharater .  匹配除换行符外任意一个字符 [abc]字符集合,只能表示一个字符的位置,匹配所包含的任意一个字…

    Python笔记 2018-05-07
  • Python高阶函数及装饰器

    First Class Object 函数在Python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等 高阶函数 数学定义:y=g(f(x)) 高阶函数需满足的条件,至少其一 接受一个或多个函数作为参数 输出一个函数 内建函数的高阶函数 排序:sorted(iterable[,key][,reverse]) 返回一个新列表,对一…

    2018-04-22
  • python数据类型及其函数方法归纳总结

    数据类型的分类: ֺ数值型: int ,float, complex, bool     序列对象: 字符串,列表,元组tuple     键值型 集合set,字典dict 如果按照可hash性来分类 hashable(可哈希性) An object is hashable if it has a hash value which never changes…

    2017-10-09