python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal

名称空间:

  内置名称空间: 在打开pytharm是加载

  全局名称空间: 在运行py文件是加载

  局部名称空间(临时名称空间) :在py文件中调用时加载

def func(): ----->函数定义

  pass ------->函数体

func()------------->函数调用

  

函数定义时:内存中只储存与函数名的对应关系,函数体的内容不储存

函数调用时:才执行函数体的内容,创建临时空间,随着函数执行结束,内存中的临时名称空间里面的内容也清空 

作用域:

  全局作用域:内置名称空间里的内容+全局名称空间里的内容

  局部作用域:局部名称空间

取值顺序:

  局部--->全局--->内置 ,单向取值,不可逆.

a=10
b=20
def test5(a,b):
    print(a,b) ---> 20,10
    a=3
    b=5
    print(a,b) ---> 3,5
c = test5(b,a)
print(c) ---------> None

加载顺序:

  内置名称空间

  全局名称空间

  局部名称空间

函数的嵌套:

  看到调用就执行

global 和 nonlocal(当数据类型是不可变的时候需要申明,但是当数据类型是列表的时候,可以直接用append往列表添加数据,同时直接引起全局变量的改变)

  global:申明函数内的元素可以作为全局变量 (函数可以直接引用全局变量,没有global不能改变全局变量)

  nonlocal:申明子级函数可以改变父级函数的变量 ,但nonlocal不能改变全局变量(子级函数可以直接引用父级函数的变量,没有nonlocal不能改变父级函数的变量)

count = 1
def func1():
    count += 1 # 会报错 # count = 2 不会报错
    print(count)
func1() 

def func1():
    count = 666
    def inner():
        print(count)
        def func2():
            nonlocal count
            # global count
            count += 1
            print(‘func2‘,count)
        func2()
        print(‘inner‘,count)
    inner()
    print(‘func1‘,count)
func1()
print(count)

原文地址:https://www.cnblogs.com/jiandanxie/p/9536468.html

时间: 2024-08-20 20:19:08

python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal的相关文章

python 动态传参,名称空间和作用域,函数的嵌套,global和nonlocal

一.动态传参 1.位置参数动态传参 def func(*args):    *表示动态传参 * 在这里表示接受位置参数的动态传参,接收到的是元组. def fun(*args): print(args) fun('aaa',3,5,6,'ccc') # 结果('aaa', 3, 5, 6, 'ccc') 2.关键字的动态传参 def func(**kwargs): 函数体(代码块) func(n=7,m="aa"): **表示接收关键字参数的动态传参,接收到的是字典. def fun(

python学习笔记第五节(函数,名称空间,作用域)

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变量名实参就是值 打破顺序限制 经常变化的值用位置形参,值通常不变的用默认参数.默认参数通常定义成不可变类型.默认参数只在定义时被赋值一次. 可变长参数就是* 关键字参数(关键字参数指的是实参当中指定y=2,z=3等等) *等同于位置参数 函数内

Python:函数名称空间与作用域:

Python:函数名称空间与作用域 函数对象:(第一类对象) 定义:函数是第一类对象:函数名可以当做数据来使用 1.可以直接被引用,加()就能运行 def foo(): print("from foo") f=foo f() 2.可以当作参数传入另一个函数 def warpper(x): x() warpper(foo) 3.可以当作另外函数的返回值 def warpper2(): return foo f=warpper2() print(f is foo) 4.可以当作容器类型的一

python学习笔记十——异常处理

1.try: command except 错误类型,记录错误信息变量: command finally: command try...finally的用处是无论是否发生异常都要确保资源释放代码的执行.一般来说,如果没有发生错误,执行过try语句块之后执行finally语句块,完成整个流程.如果try语句块发生了异常,抛出了这个异常,此时就马上进入finally语句块进行资源释放处理.如下从几个细节讨论finally的特性. 1).try中的return: 当在try语句块中含有return语句

python基础之名称空间和作用域、函数嵌套

一.名称空间 1.定义:存放名字与值的绑定关系 2.名称空间分为:内置名称空间.全局名称空间.局部名称空间 内置名称空间:python解释器自带的名字,python解释器启动就会生成 全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生 局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效 3.加载的顺序:三者的加载顺序:内置名称空间->全局名称空间->局部名称空间 4.取值的顺序:局部名称空间->全局名称空间-&g

python基础之====函数对象、函数嵌套、名称空间与作用域、装饰器

阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input(

(十五)名称空间与作用域

名称空间和作用域 名称空间(namespace) 是存放名字与值绑定关系的地方 分类: 内置名称空间 存放python解释器内置名字,比如内置函数名:len, max,sum. 创建:随着python解释器的启动而创建 销毁:随着python解释器的关闭而销毁 全局名称空间 存放文件级别的名称,比如 x=1 def f1(): x=1 if x==1: 创建: 文件开始执行时 销毁:文件执行完毕时 局部名称空间 存放函数内的名字,需要强调的是函数的参数也属于局部的 创建:函数执行时才临时创建 销

python学习[第十二篇] 数据类型之 集合

python学习[第十二篇] 数据类型之 集合 集合概念 python中集合是一组无序排列的哈希值.集合分为两种可变集合(set)和不可变集合(frozenset) 对可变集合可以修改和删除元素,对于不可变集合不允许.可变集合是不可以哈希的,因此既不能用作字典的键,也不能做其他集合的元素. 集合的增删改查 集合的创建于赋值 集合与列表([]) 和字典({})不同,集合没有特别的语法格式.列表和字典可以通过他们自己的工厂方法创建,这也是集合的唯一的创建方式.set()和frozenset() #创

python基础(3):函数对象、函数嵌套、名称空间与作用域、装饰器

函数对象 函数嵌套 名称空间与作用域 闭包函数 装饰器 练习 一 函数对象 #1 可以被引用 def max(x, y): return x if x > y else y func = max print(func(1, 2)) #2 可以当作参数传递 def max(x, y): return x if x > y else y def max_1(x, func): return func(x, 1) print(max_1(2, max)) #3 返回值可以是函数 #4 可以当作容器类