1.命名空间:

分三种:全局命名空间,局部命名空间,内置命名空间。

加载顺序:内置命名空间→全局命名空间→局部命名空间

取值顺序:局部命名空间→全局命名空间→内置命名空间

2.作用域:

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

全局作用域:包含 内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

局部作用域:局部名称空间,只能在局部范围内生效

小范围可以用大范围,大范围不能用小范围

在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的
如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。如果都没有,报错

3.globals方法  (全局改变)

a = 10
def func():
    global a
    a = 20

print(a)
func()
print(a)

4.locals方法

def func():
    a = 12
    b = 20
    print(locals())
    print(globals())

func()

在局部调用globals和locals

5.函数的嵌套和作用域链

嵌套定义:定义在内部的函数无法直接在全局被调用

def f1():

def f2():

def f3():

print("in f3")

print("in f2")

f3()

print("in f1")

f2()

f1()

作用域链:在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的
如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。如果都没有,报错

6.nonlocal关键字

# 1.外部必须有这个变量

# 2.在内部函数声明nonlocal变量之前不能再出现同名变量
# 3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效

def f1():
    a = 1
    def f2():
        nonlocal a
        a = 2
    f2()
    print('a in f1 : ',a)

f1()

7.函数的本质:

①简单的说就是一个变量,保存了函数所在的内存地址

②具体来说:1.可以当变量被引用;2.可以被当作容器类型的元素;3.可当作函数的参数和返回值

8.闭包函数:

定义:  1.闭:内部的函数;2.包:包含外部函数的变量(就是用到外部函数的变量)

固定格式:

def func():
    name = 'eva'
    def inner():
        print(name)
    return inner

f = func()
f()

9.判断闭包函数的方法:   __closure__

#输出的__closure__有cell元素 :是闭包函数
def func():
    name = 'eva'
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f = func()
f()

#输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f2 = func2()
f2()

10.闭包嵌套:

def wrapper():
    money = 1000
    def func():
        name = 'eva'
        def inner():
            print(name,money)
        return inner
    return func

f = wrapper()
i = f()
i()

最新文章

  1. #研发解决方案介绍#IdCenter(内部统一认证系统)
  2. 自定义Docker容器的 hostname
  3. js 时间与时间戳的转换
  4. !gluLookAt与glOrtho 参数解析
  5. XMPP即时通讯
  6. C 基于socket实现简单的文件传输
  7. android Fragments详解六:处理fragement的生命周期
  8. 【Android】九宫格实现
  9. LightOJ 1341 Aladdin and the Flying Carpet(整数拆分定理)
  10. CDN中前端层的复制
  11. linux 批量进行:解压缩某一类压缩文件类型的文件
  12. [leetcode]17. Letter Combinations of a Phone Number手机键盘的字母组合
  13. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)
  14. 【Java】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类
  15. 解题:WC 2018 州区划分
  16. ServiceStack.Redis 之 IRedisTypedClient<第四篇>
  17. 【MongoDB】MongoDB的java驱动包使用
  18. httpclient RequestConfig类
  19. 缓存jQuery对象来提高性能
  20. Hive入门操作

热门文章

  1. Contiki源码+原理+功能+编程+移植+驱动+网络(转)
  2. SQL学习之SqlMap SQL注入
  3. jQuery 概述
  4. phpstorm怎么设置每个function都用那条横线隔开
  5. 20145208 蔡野 《网络对抗》Exp4 恶意代码分析
  6. poj 2773 Happy 2006 - 二分答案 - 容斥原理
  7. Python3基础 __doc__ 单行与多行函数文档
  8. HDU 4638Group (莫队)
  9. ios苹果机系统的1px显示解决方案
  10. 软件设计师真题试题&&答案