前言
学 Python 很容易觉得变量没什么好讲。
不像 Java 要写类型,Python 里直接name = "Tom"就行。看起来确实简单,但变量、类型、可变对象、字符串、列表这些基础如果没理解好,后面写代码会出很多奇怪问题。
这篇主要记录 Python 变量和基础类型。不是把所有细节都列一遍,而是把初学时最容易混淆的地方理清楚。
变量不是盒子那么简单
很多入门教程会说变量像盒子,里面放值。
这个比喻能帮助理解赋值,但在 Python 里,更准确一点说,变量名是对象的引用。
a = [1, 2, 3]
b = a
b.append(4)
print(a)
输出是:
[1, 2, 3, 4]
因为 a 和 b 指向同一个列表对象。b 修改列表,a 看到的也是修改后的内容。
这和不可变类型的体验不一样。
x = 1
y = x
y = 2
print(x)
这里 x 还是 1。因为整数是不可变对象,y = 2只是让 y 指向另一个对象,不会修改原来的 1。
数字类型
Python 常见数字类型有 int、float。
age = 18
price = 19.9
int 可以表示整数,float 表示浮点数。
Python 的整数不用像 Java 那样区分 int、long,写起来轻松很多。但浮点数仍然有精度问题。
print(0.1 + 0.2)
结果可能不是你直觉里的0.3。这不是 Python 独有问题,而是浮点数表示方式导致的。
如果是金额计算,不要随便用 float。应该使用 Decimal。
字符串
字符串是 Python 里非常常用的类型。
name = "Alice"
message = f"hello {name}"
f-string 很好用,可以把变量直接嵌进字符串里。
常见方法:
text = " hello python "
print(text.strip())
print(text.upper())
print(text.replace("python", "world"))
字符串是不可变对象。看起来像修改字符串的方法,其实返回的是新字符串。
text = "abc"
text.upper()
print(text)
这里 text 仍然是abc。要写成:
text = text.upper()
列表
列表 list 是可变序列。
numbers = [1, 2, 3]
numbers.append(4)
它很像 Java 里的 ArrayList,但语法更轻。
可以通过下标访问:
print(numbers[0])
print(numbers[-1])
-1表示最后一个元素,这个写法很方便。
列表可变,所以要注意引用问题。
a = [1, 2]
b = a
b.append(3)
a 也会变。想复制列表,可以:
b = a.copy()
元组
元组 tuple 和列表很像,但不可变。
point = (10, 20)
不能对元组 append,也不能改某个位置的值。
元组适合表达固定结构,比如坐标、返回多个值。
def get_user():
return "Tom", 18
name, age = get_user()
Python 函数返回多个值,本质上经常就是返回元组,再解包。
字典
字典 dict 是键值对结构。
user = {
"name": "Tom",
"age": 18,
}
访问:
print(user["name"])
如果 key 不存在,直接用中括号会报错。可以用 get:
print(user.get("email"))
字典非常适合表达 JSON 类数据。写接口脚本、处理配置、解析响应时会经常用。
但字典也容易被滥用。所有东西都用 dict,字段名写错也不容易发现。复杂项目里还是要用 dataclass、Pydantic 这类更结构化的方式。
布尔值和 None
Python 的布尔值是True和False,首字母大写。
is_active = True
None 表示空值。
email = None
判断 None 时,推荐用:
if email is None:
print("empty")
不要写成email == None,虽然很多时候也能工作,但is None更符合 Python 习惯。
类型转换
常见转换:
age = int("18")
price = float("19.9")
text = str(100)
转换可能失败。
int("abc")
会抛异常。所以处理用户输入时,不能默认转换一定成功。
小结
Python 变量和基础类型看起来简单,但里面有几个很关键的点。
变量名指向对象;字符串、数字、元组是不可变的;列表和字典是可变的;None 要用 is 判断;字典好用但不要滥用。
这些基础理解清楚以后,后面写函数、循环、文件处理和数据脚本时,会少很多莫名其妙的问题。
喜欢的话,留下你的评论吧~