Python全局变量和局部变量

发布时间 2023-07-29 16:41:37作者: 德琪

1.python 的全局变量和局部变量

全局变量定义:在函数外部定义的变量。所有函数内部都可以使用这个变量。

局部变量定义:在函数内部定义的变量。这个变量只能在定义这个变量的函数内部使用。


第一种:global定义全局变量在自定义函数内部

在Python中有一个global关键字用来声明一个全局变量

def first():
    global key
    key = 1
    print(key)

def second():
    print(key)

def third():
    key = 3
    print(key)

first()
second()
third()
print(key)

结论:上面例子说明了 global 定义全局变量:

  • 在自定义函数内部定义global,用于告诉python这是一个全局变量
  • 作用跟在全局作用域 里写下一个 全局变量a 是一样一样的效果
第二种:全局定义全局变量,并给其赋值

(注:在全局内写“key="值"相当于在全局内写“global key; key="值"”)

key = 0

def first():
    key = 1
    print(key)

def second():
    print(key)

first()
second()
print(key)

image-20230719092343115


2.python 类中public,protected,private定义方式

原则:多用 public 属性,少用 private 属性

在Python中可以通过在变量属性以及方法属性是否有下划线“_”进行区分public、protected、private类型。

  • public类型

​ xx 没有以下划线开头的变量或者方法是public类型(python中数据和方法默认都是pubic类型)

​ public类型可以被子类、类内以及类外被访问(全局访问,前提是引用该类)

  • protected类型

​ _xx 以单下划线开头表示的是protected类型的变量或者方法。

​ protected类型只能允许其本身与子类进行访问(类内部使用,而不建议在类外部直接访问)

​ 在Python中,受保护的变量仍然可以被访问。但是,这种直接访问受保护变量的做法是不鼓励的。使用受保护变量的主要目的是通过约定告知其他开发人员,这个变量是用于内部使用的,而不建议在类的外部直接操作。这种约定有助于维护代码的可读性、可维护性和灵活性,以保护内部实现细节并减少不必要的外部依赖。

  • private

​ __xx 双下划线表示的是私有类型的变量或者方法

​ private类型只能允许类内进行访问

例子:

class My(object):
    def __init__(self):
        self.public_field = 5
        self._protect_filed = 8
        self.__private_field = 10
    
    def get_private_filed(self):
        return self.__private_field

obj = My()
print(obj.public_field)  # 访问 public 属性  --全局访问
print(obj._protect_filed)  # 访问 protected 属性  --本类、子类访问
print(obj.__private_field)  # 访问 private 属性会报错  --子类访问

image-20230719101143250

3.python 中类的实例化

class MyObject(object):
    def __init__(self):
        self.public_field = 5
        self._protect_filed = 8
        self.__private_field = 10
  • __init__ 是一个特殊的方法(也称为构造方法或初始化方法),用于在创建类的实例时进行初始化操作。
  • 实例化时,调用类的 __init__ 方法,并传入 self 参数(表示新创建的实例对象)

​ 在 Python 中,self 是一个惯例性参数名,它表示类的实例对象自身。当你定义类的方法时,第一个参数通常被称为 self,它表示该方法是一个实例方法,可以在类的实例对象上调用。