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

相关推荐

  • Python爬虫实战七之计算大学本学期绩点

    大家好,本次为大家带来的项目是计算大学本学期绩点。首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的还是获取它的原理。最主要的是了解cookie的相关操作。 本篇目标 1.模拟登录学生成绩管理系统 2.抓取本学期成绩界面 3.计算打印本学期成绩 1.URL的获…

    2017-09-09
  • functools模块,偏函数partial、缓存LRU

    functools模块,偏函数partial、缓存LRU

    2018-04-23
  • Python 部分知识点总结(一)

    此篇博客只是记录第三周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-03-26
  • Python内置数据结构——字符串

    知识结构图 学习笔记 字符串 字符组成的有序序列,字符的集合 使用单引号、双引号、三引号引起来的字符序列 不可变对象 Unicode类型 定义 单引号、双引号、三引号 r、R:引号内的字符原样输出 元素访问 索引访问 可迭代 join连接 “string“.join(iteratable) 使用string作为分隔符将可迭代对象连接起…

    2018-03-31
  • Python内置数据结构——集合set

    集合 定义 set翻译为集合 collection翻译为集合类型,是一个较大的概念 set是一个可变的、无序的、不重复的元素组成的集合 set的元素要求必须可以hash,目前已学的不可hash的类型只有list、set 元素不可以索引 set可以迭代 set的初始化 set_1 =set() #表示定义一个空集合set_1 set_1 =set(iterab…

    2017-10-03