11-Python变量
1-变量
1-1-概念
用于存储可变数值的内存单元,称为变量
1-2-语法
变量: 给它一个名字,并使用等号(=)将其与某个值关联起来
x = 10 # 创建一个整数变量 y = "Hello" # 创建一个字符串变量 z = True # 创建一个布尔变量
变量名必须遵循一定的规则和约定:
- 变量名只能包含字母(a-z, A-Z)、数字(0-9)和下划线(_)。
- 变量名不能以数字开头。
- 变量名区分大小写(age 和 Age 是不同的变量)。
- 避免使用Python关键字作为变量名。
1-3-特点
- 动态类型:Python是一种动态类型语言,这意味着你不需要声明变量的类型。变量类型是在运行时根据赋给它的值自动确定的
- 重新赋值:可以随时改变变量的值,甚至可以将不同类型的值赋给同一个变量
- 内存管理:Python会自动管理内存,当你不再需要某个对象时,垃圾收集器会释放相应的内存空间。
- 引用传递:当变量被赋值给另一个变量时,实际上是创建了一个指向同一内存地址的新引用,而不是复制了该对象
- 三个特征:每个变量都有三个基本特征——标识(id)、类型(type)和值(value)。你可以通过内置函数 id()、type() 来获取这些信息
2-变量种类
在Python中,变量的作用域决定了它们可以在程序的哪些部分被访问。根据作用域的不同,变量可以分为全局变量(global variables)和局部变量(local variables)。以下是关于这两种变量类型的语法、区别以及例子的详细介绍。
2-1-全局变量
2-1-1-定义与特性:
- 在函数外部定义的变量称为全局变量。
- 它们可以在整个模块内使用,包括所有函数内部。
- 如果在函数内部需要修改全局变量,则必须使用 global 关键字声明。
2-1-2-语法示例:
x = 10 # 这是一个全局变量
def some_function():
print(x) # 可以直接访问全局变量
some_function()
如果想要在函数内部修改全局变量:
x = 10 # 这是一个全局变量
def modify_global():
x = 3
print(x) # 3
global x # 声明我们要使用并修改全局变量x
x = x + 5 # 修改全局变量的值
print(x) # 15
modify_global()
# 输出结果先是3,此时3是局部变量,再输出是15,因为全局变量x已被修改
2-2-局部变量
2-2-1-定义与特性:
- 在函数内部定义的变量是局部变量。
- 它们仅在定义它们的函数内部有效,函数执行完毕后这些变量将被销毁。
- 函数内部不能直接修改未用 global 声明的同名全局变量。
2-2-2-语法示例:
def some_function():
y = 20 # 这是一个局部变量
print(y)
some_function()
# 下面这行代码会导致错误,因为y是局部变量,在函数外不可访问
# print(y)
尝试修改一个看起来像全局变量但实际上是在函数内部使用的变量时会发生错误:
z = 30 # 全局变量
def attempt_to_modify():
z = z + 10 # 错误:试图在未声明为全局变量的情况下修改它
attempt_to_modify() # 这会抛出UnboundLocalError
要修正上述错误,你需要声明 z 为全局变量:
z = 30 # 全局变量
def correctly_modify():
global z # 正确地声明我们将使用全局变量z
z = z + 10 # 现在可以安全地修改全局变量了
correctly_modify()
print(z) # 输出将是40,全局变量z已被正确修改
2-3-区别总结
- **作用域**:全局变量在整个模块范围内可用;局部变量只在其定义的函数内部有效。
- **生命周期**:全局变量从程序开始到结束一直存在;局部变量在函数调用时创建,在函数结束后销毁。
- **修改规则**:如果不使用 global 关键字,函数内部不能修改全局变量;而局部变量在函数内部可以自由修改。
通过上面的例子,我们可以清楚地看到全局变量和局部变量的区别以及如何正确地在Python中使用它们。