ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

python全局变量和局部变量

python全局变量和局部变量

1. 现在的人一看就懂, 指的是全局变量这一块的事情。

所谓全局变量的定义情况, 它是指在函数外部来定义的变量, 这个状况使得所有函数内部都可以使用到那个变量。

所谓局部变量的定义, 是指在一个函数的内部所创建的变量。对于这种变量而言, 它只能在定义了它的这个函数里面得到使用。

第一种情况是这样子的, 就是说在一个自定义的函数内部, 去定义一个那个全局变量。

在那个地方, 存在一个关键字, 这个关键字的主要作用是用来声明一个全局变量。

def first():

global key

key = 1

print(key)

def second():

print(key)

def third():

key = 3

print(key)

first()

second()

third()

print(key)

结论部分指出, 前文所给出的例子起到了一个说明的作用, 具体而言是用来阐释关于定义全局变量这一事情。

咱们采取第二种方案, 那就是先去定义一个全局变量, 然后呢, 再给它进行赋值操作。

(需要注意的一个情况是, 如果在整个程序的范围内使用key="值"这种写法的话, 它的意思其实跟在全局里面写一个单独的key, 然后再写一句key="值"这两句话组合在一起的效果是一样的)

key = 0

def first():

key = 1

print(key)

def second():

print(key)

first()

second()

print(key)

2. 在类里面, 这种定义的写法。

在一般情况下, 我们需要大量地去使用属性, 与此同时, 我们也需要尽量少地进行属性的使用。

在中, 大家可以通过看看变量属性还有方法属性里面是不是带有下划线“_”这个东西来进行区分工作, 这样就能把相应的类型给分开。

xx 不存在以那个下划线符号作为开头特征的变量, 同时也并不存在使用此种方式命名的方法情况, 请注意在这里提及的数据内容以及其对应的方法行为, 它们在默认的规则体系之下都是处于一个公开允许使用的类型状态。

这个类型是可以被类内或者是类外进行访问的, 同时它也可以被子类所访问, 前提条件是如果要在外部使用的话, 必须得引用到这个类, 这样就能实现全局性的访问操作了。

单下划线开头用来表示类型的变量或者方法。

这个访问类型只允许让它的本身, 还有它的子类来进行访问, 意思就是在类的内部去使用了的话, 是本类以及其子类可以进行访问的。

在代码里面, 那个被标记成受保护的变量,它还是能被直接给找到并使用的, 然而, 这种把受保护变量直接拿出来就用的做法, 是不被提倡的, 之所以要这样做, 主要就是因为想要通过一种大家都能默认的规矩来告诉其他一起写代码的人, 这个变量是为了内部自己使用才存在的, 所以才建议不要在类的范围外面就直接去对它进行任何操作, 这种大家都遵守的规矩能够帮着让读代码变得更清晰, 让改代码更简单, 也让整个系统更灵活, 从而能够保护好那些内部的实现细节, 并且减少那些没有必要的从外面进来的依赖关系。

你提交的__xx这个词, 它是被那个双下划线给框住的那个形式, 这个情况所代表的意义是, 它是一个私有的那种类型的变量或者是方法。

这个类型是只允许在类内部来进行访问的, 外面的其他类还有子类都是不能直接去访问私有成员的。

例子:

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 属性会报错 --本类访问

3. 中类的实例化

class MyObject(object):

def __init__(self):

self.public_field = 5

self._protect_filed = 8

self.__private_field = 10

在代码里面, self 这个地方用的是一个大家都会遵守的习惯性叫法, 它指的就是那个类对象本身。你要是在写类里面的函数, 也就是定义方法的时候, 排在最前面的那个参数一般是叫作 self 的, 这个 self 就说明了这是个给实例用的方法, 是可以让类创建出来的那些具体对象去直接调用的那个东西。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进