首页 > 编程语言 >python语法之名称空间

python语法之名称空间

时间:2022-10-10 20:44:05浏览次数:67  
标签:函数 python money 语法 名称 空间 全局 变量名

名称空间与作用域

什么是名称空间

回忆:我们定义变量时,发生了什么

name = 'leethon'
"""
赋值符号右边,产生了一个数据值'leethon',我们在内存中划定一个区域,将其存进去
内存空间很大,数据值的位置需要被记录,所以记录在了变量名name中
"""

提问:变量名以及数据值的位置存在什么地方呢?

实际上,变量名及其绑定的数据值的位置也存在内存中,它们被集中放在内存中方便寻找的某一处,这个地方就是名称空间。

名称空间不仅会存储变量名,还会存储函数名等所有名字。

三大名称空间介绍

  1. 内置名称空间

    解释器级别的名称空间,存了所有内置函数和关键字的名字如:print、len、def

  2. 全局名称空间

    文件级别的名称空间,当运行py文件时,会产生一个全局名称空间,存储文件中定义的变量名、函数名还有类名(之后会讲)。

  3. 局部名称空间

    函数级别的名称空间,在调用某个函数时,会产生一个局部名称空间,存储函数中定义的变量名、函数名等。

名称空间存活周期和作用域

  • 存活周期
    1. 内置名称空间:python解释器启动则创建,关闭则销毁。
    2. 全局名称空间:py文件执行则创建,运行结束则销毁。
    3. 局部名称空间:函数体代码运行创建,函数体代码结束则销毁。
  • 作用域
    1. 内置名称空间:只要是python程序,其中的名字都可以使用。
    2. 全局名称空间:只要是当前的py文件,其中的名字在定义完就可以使用。
    3. 局部名称空间:当前函数体代码内有效。

名字的查找顺序

有时候,我们可能在函数内定义了某个变量名而在全局也定义了这个变量名,但我们在全局调用某个函数时,它内部的变量名我们并不能考虑的到,所以规则上,函数体内的局部变量名和全局中的全局变量名不应该互相影响。

所以,python规定了名称空间的作用域,而我们在使用变量时,也要搞清楚变量名在哪个名称空间中。

  • 局部名称空间内使用名字:

    局部名称空间 ---> 全局名称空间 ---> 内置名称空间

  • 全局名称空间内使用名字:

    全局名称空间 ---> 内置名称空间

ps:所以我们在变量名命名时,会规定变量名不能使用系统提供给我们的关键字,因为会优先使用局部和变量的名称而使关键字失去原本的功能。

# 例子1:两个局部变量的名称空间是独立的,互相不影响
def func1():
    name = 'jason'
    print(age)  

def func2():
   	age = 18
   	print(name)

下图是几个名称空间的作用域示意图和查找顺序:

image

两个局部名称空间是独立的,不会使用对方空间中的名字,如果没在局部找到则到全局名称空间找,如果全局没找到就会去内置名称空间找。

# 例子2
x = 1
def func1():
    x=2
    def func2():
        # x = 3
        print(x)

        
    func2()
func1()

名字x的查找过程:

func2局部名称空间 ---> func1局部名称空间(找到了)

名字print的查找过程:

func2局部名称空间 ---> func1局部名称空间 ---> 全局名称空间---> 内置名称空间

练习

判断下列money的值是多少并说明理由


# t1
money = 100
def index():
    money = 666	
print(money)
"""
会打印100
index函数体内的代码压根没有执行,所以不需要看,直接就是money=100后打印
"""
   
# t2
money = 100
def func1():
    money = 666
    def func2():
        money = 888
    func2()
print(money)
"""
会打印100
同t1
"""

标签:函数,python,money,语法,名称,空间,全局,变量名
From: https://www.cnblogs.com/Leethon-lizhilog/p/16777224.html

相关文章

  • 函数与名称空间
    今日内容概要函数参数之位置参数'''补充:当子代码只有一行并且很简单的情况下可以直接在冒号后编写不用换行'''位置形参函数定义阶段括号内从左到右依次填写变......
  • 参数与名称空间
    位置参数位置形参:指的是定义函数时括号定义的参数,即变量名​ 在定义函数时,按照从左到右的顺序依次定义的参数,称为位置形参特性:位置形参必须被传值,多一个不行少一个也不......
  • python编程提升1(问题篇)
    题目1描述一个文件和文件夹 题目2描述新建一个文件/文件夹 题目3计算文件夹里的文件个数,包含子文件 题目4描述文件的size(初始值为0)和计算文件夹的size ......
  • 函数基础2-函数参数,名称空间和作用域,名字的查找顺序
    目录函数基础2-函数参数,名称空间和作用域,名字的查找顺序今日内容概要今日内容详细函数参数值位置参数默认参数可变长形参可变长实参命名关键字参数(了解)名称空间名称空间存......
  • Typora基本语法学习
    Markdown学习二级标题三级标题四级标题字体hello,word!hello,word!hello,word!hello,word!引用引用内容> +空格分割线(三个-号:---)(三个号:***)也是分割线,......
  • 函数参数与名称空间
    函数函数参数之位置参数位置参数位置形参和位置实参必须保持位置一致,按照从左往右依次填写的顺序位置形参函数定义阶段括号内从左往右一次填写的变量名deffunc1(nam......
  • python编程从入门到实践--第5章 if语句
    一。条件测试符号:==,>,>=,<,<=,!=,     逻辑符号:and,or,not测试有没在列表中cars=['audi','bmw','subaru','toyota']forcarincars:......
  • 从零开始撸python
    开始挑战30天从零开始--------->python全栈工程师Day1:图书管理系统没有选用pycharm,选择了更轻量化的SublimeText编辑器,撸了一个用json充当数据库的图书管理系统,简单的熟......
  • Python基础(十四) | Python之禅与时间复杂度分析
    ⭐本专栏旨在对Python的基础语法进行详解,精炼地总结语法中的重点,详解难点,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握python编程,同时为后续的数据分析,机器学习及深......
  • Java基础语法 DoWhile循环
    DoWhilepackageBasicGrammar.day05;/*do-while循环的使用一、循环结构的4个要素①初始化条件②循环条件--->是boolean类型③循环体④迭代条件二、do-whi......