Python初学笔记(二)变量和基础类型比想象中重要

发表于 2025-02-20 22:36 1078 字 6 min read

Spring AI学习笔记(四)工具调用和MCPSpring AI学习笔记(三)RAG从文档入库到回答Spring AI学习笔记(二)ChatClient从怎么调到怎么封装Spring AI学习笔记(一)它到底解决什么问题java新版本-java25学习笔记(四)用JFR和GC日志做一次体检java新版本-java25学习笔记(三)虚拟线程要和资源边界一起看java新版本-java25学习笔记(二)运行时基线先统一java新版本-java25学习笔记(一)LTS版本对比和学习路线主流AI Agent能力对比与工程选型我用Kiro做了个自己的工具站盘一盘虚拟线程我用Trae做了个AstrBot的AI角色扮演插件Python初学笔记(六)常用标准库先学这几个Python初学笔记(五)读写文件和处理异常Python初学笔记(四)函数让代码开始有结构Python初学笔记(三)条件、循环和推导式Python初学笔记(二)变量和基础类型比想象中重要Python初学笔记(一)先把环境和运行方式弄明白主流AI大模型能力对比Java 21和Spring Boot 3升级笔记(五)日志指标与可观测性Java 21和Spring Boot 3升级笔记(四)数据访问层适配Java 21和Spring Boot 3升级笔记(三)虚拟线程使用边界Java 21和Spring Boot 3升级笔记(二)Jakarta迁移要点Java 21和Spring Boot 3升级笔记(一)工程基线整理魔法値をどうやって我慢する?JPAのSpecification大改造!处理生僻字乱码:JPA框架对于Oracle的NVarchar2,NChar,NClob类型支持Redis Stream能不能当轻量消息队列用RocketMQ 5学习笔记:普通消息之外要看什么事件流不是换个消息队列这么简单Kubernetes学习笔记04:发布、排障和观测Kubernetes学习笔记03:配置、密钥和存储Kubernetes学习笔记02:Deployment、Service和IngressKubernetes学习笔记01:Pod和控制器mysql索引原理02--存储引擎索引的实现mysql索引原理01--索引的数据结构
この投稿は「日本語」では表示できません。元の投稿を表示しています。
  学 Python 很容易觉得变量没什么好讲。   不像 Java 要写类型,Python 里直接就行。看起来确实简单,但变量、类型、可变对象、字符串、列表这些基础如果没理解好,后面写代码会出很多奇怪问题。   这篇主要记录 Python 变量和基础类型。不是把所有细节都列一遍,而是把初学时最容易混淆的地方理清楚。 变量不是盒子那么简单...

前言

  学 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 的布尔值是TrueFalse,首字母大写。

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 判断;字典好用但不要滥用。

  这些基础理解清楚以后,后面写函数、循环、文件处理和数据脚本时,会少很多莫名其妙的问题。

気に入ったならばコメントを残してくださいね~

© 2019 - 2026 VincentHo @VincentHo
Powered by theme astro-koharu · Inspired by Shoka