Skip to content

Python 变量

定义

  • 变量的定义不使用关键字
  • 变量名使用小写蛇形命名 ( snake_case )
  • 变量定义时必须赋值
  • 变量并且必须先定义后使用,否则报错NameError

普通变量

py
变量 =
py
# 同时赋值相同的值
变量1 = 变量2 = 变量3 = 值

# 同时赋值不同的值
变量1, 变量2 = 值1, 值2
变量1, 变量2 = ( 值1, 值2 )
例子:实现变量值交换 ( 通过元组解包 )
py
a, b, c = 1, 2, 3
a, b, c = c, b, a

print(a, b, c)      # 3 2 1

常量

Python 没有强制常量的概念,常量实质是一个约定为不应被修改的变量

常量名约定使用大写蛇形命名 ( SNAKE_CASE )

py
ALLOWED_HOSTS = ["www.example1.com", "www.example2.com"]
DEBUG = False

临时变量

临时变量用于存储不使用的值,可避免变量未使用的解析器报错

约定使用单下划线_命名

py
_ =
py
a, _, b =  ("A", "B", "C")
print(a, b)  # "A" "C"

受保护变量

受保护变量多用于在类中表示一个不应该被外部访问的、仅供当前类与其子类使用的属性

约定在名字前面加上前缀单下划线_

受保护变量 vs 类私有成员

  • 受保护变量 ( _成员 ) 仅作为一种约定,表示不建议直接使用但仍然可以访问
  • 类私有成员 ( __成员 ) 会改写属性名使其在外部无法直接访问,但可通过实例._类名__属性名访问到
py
class A:
   def __init__(self):
       self._成员 = 1
       self.__成员 = 2


a = A()

print(a._成员)     # 1

print(a.__成员)    # AttributeError
print(a._A__成员)  # 2

解构赋值

py
字符1位置的变量, 字符1位置的变量 = 字符串
元素1位置的变量, 元素2位置的变量 = 元组
元素1位置的变量, 元素2位置的变量 = 列表
例子:对字符串、元组、列表进行解构赋值
py
a, b, c = "123"

print(a, b, c)  # 1 2 3
py
a, b, c = (1, 2, 3)

print(a, b, c)  # 1 2 3
py
a, b, c = [1, 2, 3]

print(a, b, c)  # 1 2 3

实参解构

py
def 函数(形参1, 形参2):
    pass


函数(**字典)
函数(*列表)
例子:验证调用函数传参时将整个字典、列表解包

如下:

py
def my_func(a, b, c):
    print(a, b, c)


# 字典
d = {"a": 1, "b": 2, "c": 3}
my_func(**d)    # 1 2 3

# 列表
l = [1, 2, 3]
my_func(*l)     # 1 2 3

# 字符串
s = "123"
my_func(*s)     # 1 2 3

变量作用域

Scope

作用域是指变量的可访问范围,变量根据其在定义时所处位置决定其所属的作用域

py
变量 =# 全局变量


def 函数():
    变量 =# 局部变量

全局作用域

Global Scope

全局作用域范围是在函数外部的整个程序中

定义在全局作用域中的变量被称为全局变量 ( Global Variable )


局部作用域

Local Scope

全局作用域范围是在某个函数的内部

定义在局部作用域中的变量被称为 局部变量 ( Local Variable )

局部变量仅在当前作用域内有效,无法被外部直接访问,也无法直接影响到外部的同名全局变量

py
变量 =# 全局变量


def 函数():
    变量 =# 局部变量不关联全局变量

局部变量前加上关键字global后便可与全局作用域中的同名变量相关联,但容易产生全局污染

py
def 函数():
    global 变量   # 局部变量关联了全局变量
    变量 = 新值
例子:验证global关键字对函数内的局部变量与同名的全局变量之间的影响
py
num = 100


def fun1():
    num = 200
    print(num)


def fun2():
    global num
    num = 200
    print(num)


print(num)      # 100
fun1()          # 200
print(num)      # 100

fun2()          # 200
print(num)      # 200