一、名称空间:(有3类)

(1)内置名称空间(全局作用域)

(2)全局名称空间(全局作用域)

(3)局部名称空间(局部作用域)

关于名称空间的查询:

x=1
def func():
print('from func')
x=2
a=1
b=2
print(globals())#打印全局名称空间
print(locals())#打印局部名称空间 func()

  执行结果是:

from func
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000026F9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x00000000028BB8C8>}
{'b': 2, 'a': 1, 'x': 2}

 

查询名称空间的全局变量:globals()
查询名称空间的局部变量:locals()
查询局部变量,只能在局部使用,在全局使用时,局部变量的查询结果和全局变量的查询结果一致
示例:
x=1
def func():
print('from func')
x=2
a=1
b=2
print(globals())#在局部打印全局
print(locals())#在局部打印局部 func()
a=globals()
print(a)#在全局打印全局
b=locals()
print(b)#在全局打印局部
print(a == b)#判断在全局打印局部和全局的结果是否一致

执行结果是:(验证了:查询局部变量,只能在局部使用,在全局使用时,局部变量的查询结果和全局变量的查询结果一致)

from func
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000005B9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x0000000001EBB8C8>}
{'b': 2, 'a': 1, 'x': 2}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000005B9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x0000000001EBB8C8>, 'a': {...}}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000005B9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x0000000001EBB8C8>, 'a': {...}, 'b': {...}}
True

  

全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
 
 
示例:
x=1   #x=1为全局作用域
def foo():
x=20 #x=20为局部作用域
print(x)
foo() #函数执行时,首先去局部找x的变量值,故打印结果为20 print(x)#输出的x是全局变量内的x,函数内的x与全局的x无关,故打印结果为1

 打印结果是:

20
1

总结:

关于函数的作用域找名称的查询顺序是:

先去局部找,局部没有的话,再去全局查找,全局没有的话,再去内置找(先局部在全局最后内置)

二、函数的嵌套:(2个方面)

(1)、函数的嵌套调用:(函数内调用之前定义好的函数)

示例:

# 函数的调用:
def my_max(x,y):
res=x if x>y else y#比较x和y的大小,取较大值
return res def my_max4(a,b,c,d):
res1=my_max(a,b)#调用上面的函数,将最大值取出
res2=my_max(res1,c)#调用上面的函数,将最大值取出后和c比较取最大值
res3=my_max(res2,d)#调用上面的函数,将最大值取出后和d比较取最大值
return res3
print(my_max4(1,2,3,4))

 执行结果是:

4

(2)、函数的嵌套定义:(即函数内再定义函数)

示例:

def foo1():
x=1
print("foo1",x)
def foo2():
x=2
print("foo2",x)
def foo3():
x=3
print("foo3",x)
foo3()
foo2()
foo1()

执行结果是:

foo1 1
foo2 2
foo3 3

  

 

python函数篇:名称空间、作用域和函数的嵌套的更多相关文章

  1. Python记录9:函数4:名称空间作用域+闭包函数+装饰器

    ''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自 ...

  2. Day11名称空间,作用域,闭包函数

    Day11 1.函数对象: ①可以被引用 ​ ②可以作为另一个函数的参数 ​ ③可以作为另一个函数的返回值0 ​ ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ​ ...

  3. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套

     复习   1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用:     # 字符串的比较#  -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...

  4. python 函数的名称空间及作用域

    一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...

  5. 《Python》 函数进阶和名称空间作用域

    函数进阶: 一.动态参数:*args  **kwargs *args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args **kwargs接收的只是键值对的参数 ...

  6. day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义

    复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...

  7. 函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用

    一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部 ...

  8. python基础——类名称空间与对象(实例)名称空间

    python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...

  9. Python 类的名称空间和组合

    一.Python类的名称空间 class Student(object): School = '北京大学' def __init__(self): pass stu1 = Student() stu1 ...

  10. Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数

    本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...

随机推荐

  1. Qt C++ 并发,并行,多线程编程系列1 什么是并发

    什么是并发,并发往简单来说就是两个或多个独立的任务同时发生,在我们的生活中也是随处可见.如果把每个人都当作一个独立的任务,那每个人可以相互独立的生活,这就是并发. 在计算机的系统里面,并发一般有两种, ...

  2. Qt Qpushbutton美化问题

    昨天在论坛看到一个网友的提问,如下 我想到的第一个就是可能需要重载Pushbutton,不过看到有网友回复可以使用stykesheet解决,今天尝试了一下,还是没有成功, 一下是我使用车重载的Push ...

  3. python QQ邮箱自动发送邮件

    于初学者来讲在写发送邮件代码时常见的错误有SMTPAuthenticationError535,有点懵逼,检查用户名,密码正确就是报错, 想当年笔者也是这么过来的,现在就给大家分享一下个人经验: 一, ...

  4. 官方文档 恢复备份指南五 Configuring the RMAN Environment

    本章内容: Configuring the Environment for RMAN Backups    配置RMAN环境 Configuring RMAN to Make Backups to a ...

  5. DFS实现模板

    以如下图的无向图G4为例,进行图的深度优先搜索: 假设从顶点v1出发进行搜索,在访问了顶点v1之后,选择邻接点v2.因为v2未曾访问,则从v2出发进行搜索.依次类推,接着从v4 .v8 .v5出发进行 ...

  6. java的命名空间

    这个package  me.gacl.websocket相当于.net中的namespace命名空间. import  相当于.net中的using,引用命名空间:

  7. CentOS6.8单独编译安装PHP gd库扩展

    # PHP-GD安装 #在安装之前可以先更新一下yum源,可以使用国内的阿里云源 yum -y install libjpeg-turbo-devel yum -y install freetype- ...

  8. HDU I-最少拦截系统

    http://acm.hdu.edu.cn/showproblem.php?pid=1257 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦 ...

  9. Flink源码解读之状态管理

    一.从何说起 State要能发挥作用,就需要持久化到可靠存储中,flink中持久化的动作就是checkpointing,那么从TM中执行的Task的基类StreamTask的checkpoint逻辑说 ...

  10. 算法(3)Rotate Array

    题目:将一个n个元素的数组右移k位,比如n=7,k=3,对数组[1,2,3,4,5,6,7]作如下旋转[5,6,7,1,2,3,4] 思路:[5,6,7,1,2,3,4],不知大家看出来了没有呢,两次 ...