Python编程练习小结
变量是编程中的一个基本概念,用来存储数据。在 Python 中,变量的使用非常灵活,可以存储不同类型的数据,如整数、浮点数、字符串、列表、字典等。以下是 Python 中变量的一些基本用法和规则:
1. 变量的命名规则
- 变量名必须以字母或下划线
_
开头,不能以数字开头。 - 变量名可以包含字母、数字和下划线,但不能包含空格或其他特殊字符。
- 变量名对大小写敏感,例如
myVar
和myvar
是两个不同的变量。
2. 变量的声明和赋值
在 Python 中,无需显式声明变量的类型,只需直接赋值即可创建变量。变量的类型由赋给它的值决定。
# 整数
a = 10
# 浮点数
b = 3.14
# 字符串
c = "Hello, World!"
# 列表
d = [1, 2, 3, 4, 5]
# 字典
e = {"name": "Alice", "age": 25}
3. 变量类型的动态性
Python 是动态类型语言,变量的类型可以在程序运行过程中发生改变。
x = 10 # x 是一个整数
x = "Hello" # 现在 x 是一个字符串
4. 变量的使用
可以通过变量名来访问和操作存储在变量中的数据。
# 使用变量进行计算
a = 5
b = 3
c = a + b # c 的值是 8# 使用变量打印输出
print(c) # 输出 8# 修改变量的值
a = a + 1 # 现在 a 的值是 6
print(a) # 输出 6
5. 全局变量和局部变量
- 全局变量:在函数外部定义的变量,可以在整个程序中访问。
- 局部变量:在函数内部定义的变量,只能在函数内部访问。
# 全局变量
x = 10def my_function():# 局部变量y = 5print("局部变量 y:", y)print("全局变量 x:", x)my_function()
print("全局变量 x:", x)
# print(y) # 这行会报错,因为 y 是局部变量,无法在函数外部访问
6. 修改全局变量
如果需要在函数内部修改全局变量,可以使用 global
关键字。
x = 10def my_function():global xx = 5 # 修改全局变量 xmy_function()
print("全局变量 x:", x) # 输出 5
python: 好的,我们继续深入了解 Python 中变量的高级用法和一些最佳实践。
7. 多变量赋值
Python 允许一次性给多个变量赋值,这在某些情况下非常方便。
# 同时给多个变量赋值
a, b, c = 1, 2, 3# 交换两个变量的值
a, b = b, a# 使用列表或元组进行赋值
data = [4, 5, 6]
x, y, z = dataprint(a, b, c) # 输出:2 1 3
print(x, y, z) # 输出:4 5 6
8. 解包(Unpacking)
解包是一种从数据结构(如列表、元组或字典)中提取元素并赋值给变量的操作。
# 解包元组
t = (1, 2, 3)
a, b, c = t
print(a, b, c) # 输出:1 2 3# 解包字典
d = {'name': 'Alice', 'age': 25}
name, age = d.values()
print(name, age) # 输出:Alice 25# 使用 * 解包剩余元素
numbers = [1, 2, 3, 4, 5]
first, *rest = numbers
print(first) # 输出:1
print(rest) # 输出:[2, 3, 4, 5]
9. 变量作用域(Scope)
变量的作用域决定了变量在程序中的可见性和生命周期。主要有以下几种作用域:
- 局部作用域(Local Scope):在函数内部定义的变量,其作用域仅限于函数内部。
- 全局作用域(Global Scope):在函数外部定义的变量,可以在整个模块中访问。
- 内置作用域(Built-in Scope):Python 内置的名字空间,例如
print
、len
等函数。
x = "global"def my_function():x = "local"print(x) # 输出:localmy_function()
print(x) # 输出:global
使用 nonlocal
关键字可以在嵌套函数中修改外围函数的变量。
def outer_function():x = "outer"def inner_function():nonlocal xx = "inner"print(x) # 输出:innerinner_function()print(x) # 输出:innerouter_function()
10. 常量
在 Python 中没有真正的常量,但可以通过约定来定义常量。通常使用全大写字母来表示常量,表示这些变量的值不应改变。
PI = 3.14159
GRAVITY = 9.8# 尽管这只是一个约定,实际上它们的值仍然可以被改变
PI = 3.14 # 不推荐这么做
11. 类型注解(Type Hints)
Python 3.5 引入了类型注解,可以用来明确变量的类型,有助于代码的可读性和静态类型检查。
# 类型注解
a: int = 10
b: float = 3.14
c: str = "Hello"
d: list = [1, 2, 3]
e: dict = {"name": "Alice", "age": 25}# 函数的类型注解
def greet(name: str) -> str:return "Hello, " + nameprint(greet("World")) # 输出:Hello, World
12. 可变和不可变对象
Python 中的对象分为可变对象和不可变对象。可变对象的值可以改变,而不可变对象一旦创建,其值就不能改变。
- 不可变对象:整数、浮点数、字符串、元组等。
- 可变对象:列表、字典、集合等。
# 不可变对象示例
x = 10
x = 20 # 创建了新的整数对象,x 不再指向 10# 可变对象示例
my_list = [1, 2, 3]
my_list.append(4) # 修改了列表对象
python: 让我们继续深入探讨 Python 中变量的更多高级用法和最佳实践。
13. 变量的生命周期
变量的生命周期指的是变量在内存中存在的时间。在 Python 中,变量的生命周期通常由其作用域决定。
- 局部变量:在函数执行期间存在,一旦函数执行完毕,局部变量就会被销毁。
- 全局变量:在整个程序的执行期间存在,直到程序结束或显式删除它。
def my_function():local_var = "I'm local" # 局部变量print(local_var)my_function()
# print(local_var) # 这行代码会报错,因为 local_var 已经被销毁
14. 内存管理和垃圾回收
Python 使用自动内存管理和垃圾回收机制来管理变量的内存。Python 的垃圾回收机制主要通过引用计数和循环垃圾收集来实现。
- 引用计数:每个对象都维护一个引用计数,当引用计数为零时,内存会被释放。
- 循环垃圾收集:用于检测和处理引用计数无法解决的循环引用问题。
import sysa = []
b = a
print(sys.getrefcount(a)) # 输出 3,因为 a 和 b 都引用了同一个对象,另一个引用来自 getrefcount 的参数del a
print(sys.getrefcount(b)) # 输出 2,因为 a 被删除,但 b 仍然引用对象
15. 全局变量的修改和访问
在函数内部访问和修改全局变量时,需要使用 global
关键字。如果在函数内部修改全局变量而不使用 global
,将会创建一个新的局部变量。
x = 10def modify_global():global x