Python的全局变量、局部变量、类变量、实例变量介绍

这篇具有很好参考价值的文章主要介绍了Python的全局变量、局部变量、类变量、实例变量介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python的全局变量、局部变量、类变量、实例变量介绍

Python的变量分类

全局变量:模块内、所有函数外、所有class外的变量;

局部变量:函数内的变量,class的方法内且不使用self.修饰的变量;

类变量:class内且不在class的方法内;

实例变量:class的方法内且使用self.修饰的变量。

对于面向过程程序设计涉及:

全局变量:模块中函数外的变量。

局部变量:函数中的变量。

若使用类(class)面向OOP涉及:

类变量:class内,不在class的任何方法内。

实例变量:class的方法内且前面使用self.的变量。

局部变量:函数内的变量,class的方法中且前面没有self.的变量。

全局变量:模块内、所有函数外、所有class外。

Python 作用域(scope)和命名空间(namespace

https://docs.python.org/zh-cn/3/tutorial/classes.html#python-scopes-and-namespaces

Python程序中的每个名称(变量名、函数名、类名)都有一个作用域(scope),即它所在的命名空间(namespace)。在它的作用域之外,该名称不存在,任何对它的引用都会导致错误。

每当Python解释器(interpreter)需要计算一个名称(变量、函数等)时,它都会按以下顺序搜索名称:

1.首先局部(L,local)名称空间:自定义函数内部的变量名。

2.外层/封闭(E,enclosing)函数名称空间:如嵌套函数的外层函数中的变量名。【中文在线帮助将enclosing functions译为外层函数,有些资料称为封闭函数】

3.然后是全局(Gglobal)名称空间:如模块中函数外。

4.最后是内置(B,builtins)模块的名称空间:如内置模块预定义的变量名称。

优先顺序: L –> E –> G  –>B。若最后找不到,抛出异常。

【Python命名空间(Namespaces)和作用域(Scopes)https://blog.csdn.net/cnds123/article/details/108429084】

一、面向过程程序设计(不涉及类)的情况

例子:

n=1

def f():
    n=2  #再删除或注释掉该句看看
    
    def g():
        n=3  #先删除或注释掉该句看看
        print(n)
        
    g()

f()

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

局部变量

在函数调用执行过程中分配的名称称为局部名称,它们对于函数调用来说是局部的。函数的局部名称只存在于与函数调用关联的命名空间中。表现为:

•仅对函数内部的代码可见。

•不干涉函数外部定义的名称,即使它们是相同的。

•仅在函数执行期间存在。它们在函数开始执行之前不存在,在函数完成执行之后也不再存在。

局部变量在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了——即当函数调用完成后,则销毁局部变量,不再有效。例如

def testA():
    a = 100  # 局部变量
    print(a) #函数体内部访问,能访问到a变量

testA() #调用函数 输出100
print(a) #报错,在函数外不能访问局部变量

 运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

全局变量,全局变量是在函数外和class外的变量,默认作用域是所在的模块(module)——即程序文件,全局变量和局部变量,名称可以相同,但它们是无关的——对局部作用域变量的修改,全局变量并不会受到影响(不存在生效的 global 或 nonlocal 语句时)。如: 

a = 100  #全局变量a

def testA():    
    print(a)# 访问全局变量a,并打印变量a存储变量
 
def testB():
    a = 50  #局部变量a
    print(a)# 访问局部变量a,并打印其值
 
testA()  #输出:100
testB()  #输出:50
print(a)  #输出:100

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

 global 语句

global 语句是作用于整个当前代码块的声明。 它意味着所列出的标识符将被解读为全局变量。【https://docs.python.org/zh-cn/3/reference/simple_stmts.html#global 】简单地说,由global标出的变量是全局变量,例如:

def testB():
    global a  #声明(declaration)a 是global
    a=50
    print(a) 
 
testB()  #输出:50
print(a)  # 使用a不报错,输出:50

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

使用global关键字,可以在函数中修改全局变量的值,示例源码如下:

a = 100

def testA():    
    print(a)# 访问全局变量a,并显示
 
def testB():
    global a  #声明(declaration)a 是global
    a=50
    print(a)
 
testA()  #输出:100
testB()  #输出:50
print(a)  #输出:50

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

nonlocal 语句

nonlocal语句使列出的标识符引用之前在最近的封闭作用域(enclosing scope)中先前绑定的变量(bound variables),不包括全局变量。【https://docs.python.org/zh-cn/3/reference/simple_stmts.html#nonlocal 】简单地说,由nonlocal标出的标识符将被解读为嵌套函数的外层函数中的变量——想修改外层函数中的变量,必须加nonlocal声明,例如

def fun():  
    a=30
    
    def fun2():
        nonlocal a  #声明a是nonlocal
        a=a*2  
        print(a)
        
    return fun2()  

fun() #输出60

二、使用类(class)的情况

Python使用class关键字来定义类,class关键字之后是一个空格,接下来是类的名字,如果派生自其它基类的话则需要把所有父类放到一对圆括号中并使用逗号分隔,然后是一个冒号,最后换行并定义类的内部实现。【类官方介绍 中文https://docs.python.org/zh-cn/3/tutorial/classes.html
英文 https://docs.python.org/3/tutorial/classes.html

实例变量(instance variable)用于每个实例的唯一数据。定义位置类中,所有函数内部:以“self.变量名”的方式定义的变量。

类变量(class variable)用于类的所有实例共享的属性和方法。定义位置类中、所有函数之外。

局部变量,在class的方法(class的函数)中且没有self.的变量。

类变量、实例变量和局部变量示例源码如下:

class Demo:
    Tag = "Tag是类变量"           #Tag是类变量
    def __init__(self, name):    #self表示当前实例对象
        self.DemoName = name   #DemoName是实例变量
 
    def print_name(self):
        ask = "他是谁?"      #ask是局部变量
        print(ask + self.DemoName)  # 局部变量 与 实例变量 拼接
 

d = Demo("Tom")
print(Demo.Tag) #类变量Tag被访问
d.print_name()

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

类变量的调用

通过类名访问:类名. 类变量名,也可以先实例化类,使用类的实例化对象调用(此方法不推荐使用):实例对象名.类变量名。例如:

class Person:
    nameC = "小芳"
    ageC = 10
    
    def __init__(self, name, age):
        self.nameI = name
        self.ageI = age
        
#使用类名直接调用类变量
print(Person.nameC)
print(Person.ageC)

#类的实例化对象
p=Person("李晓明",16)
#通过对象名访问类变量
print(p.nameC)
print(p.ageC)
#通过对象名访问实例变量
print(p.nameI)
print(p.ageI)

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

实例变量的调用

通过对象名(也叫实例名)访问:对象名. 实例变量,

(1)构造函数__init__()里的成员变量,在类实例化之后,就可以使用

(2)在类里普通函数里的 成员变量,还需要先调用该函数,才能使用该成员变量,否则报错。

例如:

class Person:
    def __init__(self):
        self.name = "小芳"
        self.age = 10
        
    def say(self):
        self.content = "我爱Python"
        
#name、age以及content都是实例变量。Person类的类对象都会包含name和age实例变量。
mary = Person()
print(mary.name)
print(mary.age)
#只有调用了say()方法的类对象才会包含content实例变量。
mary.say()
print(mary.content)

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

最后,了解一下类的 命名空间。

当进入类定义时,将创建一个新的命名空间,并将其用作局部作用域,所有对局部变量的赋值都是在这个新命名空间之内。

如果同样的属性(attribute)名称同时出现在实例和类中,则属性查找会优先选择实例。例如:

class Dog:  #定义类

    name = 'canine'         # 类变量

    def __init__(self, nameLocal):
        self.name = nameLocal    # 实例变量,删除或注释掉该句看看
        pass

print(Dog.name)       # 使用类变量

d = Dog('Fido') # 实例化
e = Dog('Buddy') # 实例化
print(d.name)          # 使用实例变量
print(e.name)          # 使用实例变量

运行测试如下:

python 类变量,Python学习,编程实践系列,python,开发语言

 OK!文章来源地址https://www.toymoban.com/news/detail-772235.html

到了这里,关于Python的全局变量、局部变量、类变量、实例变量介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang 局部变量、全局变量 声明

    四种声明方式 + 多变量声明: 全局变量的声明和局部变量的声明方式一、二、三 相同; 但是不能使用局部变量声明方式四 (:=) 来声明全局变量。

    2024年02月13日
    浏览(37)
  • Java成员变量(全局变量)和局部变量

    在Java中变量类型有 成员变量 、 局部变量 和 静态变量(类变量、static变量) ,本篇文章主要介绍成员变量(全局变量)和局部变量的区别。 根据变量的作用范围,将程序中的变量分为成员变量(全局变量)和局部变量。 一、成员变量(全局变量) 成员变量(全局变量):

    2024年02月04日
    浏览(41)
  • c语言全局变量和局部变量问题汇总

    ✅作者简介:嵌入式领域优质创作者,博客专家 ✨个人主页:咸鱼弟 🔥系列专栏:单片机设计专栏  1、static的作用是什么?  定义静态变量  2、static有什么用途?(请至少说明两种)  1).限制变量的作用域(在程序的整个运行期间都不释放)  2).设置变量的存储域(存

    2024年02月06日
    浏览(42)
  • C语言——局部和全局变量

    局部变量 定义在函数内部的变量称为局部变量(Local Variable) 局部变量的作用域(作用范围)仅限于函数内部, 离开该函数后是无效的 离开该函数后,局部变量自动释放 示例代码: 全局变量 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程

    2024年02月10日
    浏览(40)
  • 变量的存储类型(全局,局部,静态,动态)

    存储类型 是指变在内存中的存储方式,有静态存储和动态存储方式。 1.静态存储方式 静态存储方式的变量存储在内存的静态区,在程序编译时就已经分配好了内存空间。在整个程序运行时,该变量一直占有固有的内存空间,程序结束后才释放该部分内存空间。其中静态局部

    2024年02月03日
    浏览(43)
  • 【C语言趣味教学】(6) 作用域:局部变量 | 全局变量 | 局部变量优先原则 | 利用大括号限制作用域 | 变量的生命周期

        🔗 【C语言趣味教程】专栏介绍👈 猛戳了解!!! 0x00 引入:什么是作用域? 变量和常量在程序中都是有作用范围的,这个范围我们称之为变量的  作用域 (scope) 。 作用域也称为 \\\"定义域\\\",是程序中 定义的变量所存在的区域,出了该区域变量就不能被访问。 变量的作

    2024年02月14日
    浏览(33)
  • 【C语言趣味教程】(6) 作用域:局部变量 | 全局变量 | 局部变量优先原则 | 利用大括号限制作用域 | 变量的生命周期

        🔗 【C语言趣味教程】专栏介绍👈 猛戳了解!!! 0x00 引入:什么是作用域? 变量和常量在程序中都是有作用范围的,这个范围我们称之为变量的  作用域 (scope) 。 作用域也称为 \\\"定义域\\\",是程序中 定义的变量所存在的区域,出了该区域变量就不能被访问。 变量的作

    2024年02月14日
    浏览(51)
  • Java中的全局变量和局部变量(看这篇就够了)

    在Java中,全局变量和局部变量是两种不同作用域的变量。 全局变量(成员变量) : 在类中定义的变量称为成员变量,也叫全局变量。它们的作用域是整个类,在类的任何地方都可以被访问。 如果没有显式地初始化,它们会有默认值。 全局变量可以是基本数据类型(如int、

    2024年02月04日
    浏览(45)
  • FPGA设计Verilog基础之Verilog全局变量和局部变量定义

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   在Verilog中,变量可以分为全局变量和局部变量两种类型。全局变量在整个模块中都可以使用,而局部变量只能在某个特定的代码块中使用。

    2024年02月15日
    浏览(38)
  • Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲

    写本章前想起题主初学Labview时面对一个位移台程序,傻傻搞不清局部变量和属性节点值有什么区别,概念很模糊。所以更新这篇文章让大家更具象和深刻的去理解这几个概念,看完记得点赞加关注喔~ 本文程序源代码附在后面,大家可以自行下载学习。 本文的结构还是首先教

    2024年01月20日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包