第3章:Python基础知识——注释、变量、数据类型、标识符与关键字、输入输出、运算符、类型转换

各位同学,欢迎来到第3章。说实话,Python基础语法这块,很多教程讲得跟念经似的。我当年刚入行时也踩过不少坑,今天咱们就聊聊这些最基础、但最容易出问题的地方。

3.1 注释——给代码加个“说明书”

注释这东西,说白了就是写给人类看的。机器根本不鸟它。我见过太多新手,要么不写注释,要么写一堆废话。

Python里注释分两种:

  • 单行注释:用 # 开头
  • 多行注释:用三个单引号 ''' 或三个双引号 """ 包裹
# 这是单行注释,我习惯在代码逻辑转折处加一条
print("Hello, NLP!")

'''
这是多行注释
可以写好几行
我一般用来临时屏蔽大段代码
'''
我的小习惯:注释不是越多越好。好的代码本身就像注释,变量名起得清楚,逻辑写得直白。我一般只在“为什么这么写”的地方加注释,而不是“写了什么”。

3.2 变量与数据类型——Python的“盒子”哲学

变量是什么?你可以把它想象成一个盒子。你把数据放进去,然后贴个标签。Python里不需要提前声明盒子的类型,你放什么它就是什么。

常见的数据类型有这些:

类型 例子 说明
int(整型) age = 25 整数,没有小数点
float(浮点型) pi = 3.14 带小数点的数
str(字符串) name = "NLP" 文本,用引号包着
bool(布尔型) is_ok = True 只有 True 或 False
list(列表) nums = [1, 2, 3] 有序的集合,可修改
dict(字典) info = {"name": "Tom"} 键值对,像查字典
# 你看,Python多灵活
my_var = 10        # 现在是整数
print(type(my_var))  # <class 'int'>

my_var = "hello"   # 现在变成字符串了
print(type(my_var))  # <class 'str'>
注意:这种灵活性是把双刃剑。我曾经在项目中因为变量类型被意外改变,排查了整整一下午。建议你在关键地方用 type() 检查一下。

3.3 标识符和关键字——起名字的规矩

标识符就是你给变量、函数、类起的名字。Python对名字有要求:

  • 只能包含字母、数字、下划线
  • 不能以数字开头
  • 不能是Python的关键字
  • 大小写敏感(Namename 是两个东西)

关键字是Python自己保留的词,比如 ifforwhileclass 这些。你不能拿它们当变量名。

# 合法的标识符
my_var = 1
var2 = 2
_name = "private"

# 非法的标识符
# 2var = 3    # 数字开头,报错
# for = 4     # 关键字,报错
# my-var = 5  # 有连字符,报错
我的建议:变量名要见名知意。别用 abc 这种。你想想看,三个月后你回来看代码,看到 a = 100,你知道它代表什么吗?我一般用 max_lengthtotal_count 这种。

3.4 输入函数——让程序和人对话

input() 函数用来接收用户输入。注意一点:它返回的永远是字符串!

name = input("请输入你的名字:")
print("你好," + name)

# 如果你想要数字,得自己转
age = input("请输入年龄:")
age = int(age)  # 转成整数
print("明年你" + str(age + 1) + "岁了")
我曾经踩过的坑:用户输入什么你都得防着。如果用户输入了 "abc",你直接 int() 转换,程序就崩了。实际项目中一定要加异常处理,这个咱们后面会讲。

3.5 输出函数——把结果亮出来

print() 是最常用的输出函数。它有几个小技巧:

  • 默认换行,想不换行用 end=""
  • 多个值用逗号隔开,会自动加空格
  • 可以用 sep 参数指定分隔符
print("Hello", "World")           # 输出:Hello World
print("Hello", "World", sep="-")  # 输出:Hello-World
print("不换行", end="")           # 不换行
print("接着输出")

3.6 运算符——计算的工具

Python的运算符分几大类:

类型 运算符 例子
算术运算符 + - * / // % ** 10 // 3 = 3(整除)
比较运算符 == != > < >= <= 5 > 3 返回 True
赋值运算符 = += -= *= /= x += 1 等价于 x = x + 1
逻辑运算符 and or not True and False 返回 False
成员运算符 in not in "a" in "abc" 返回 True
# 算术运算
print(10 / 3)   # 3.333... 浮点数除法
print(10 // 3)  # 3 整数除法
print(10 % 3)   # 1 取余数
print(2 ** 3)   # 8 幂运算

# 逻辑运算
a = True
b = False
print(a and b)  # False
print(a or b)   # True
print(not a)    # False
重点:Python里 /// 的区别一定要记清楚。我在做NLP数据预处理时,经常用 // 来做分页计算,用 % 来判断是否整除。

3.7 类型转换——让数据“变形”

有时候你需要把一种类型转成另一种。Python提供了几个内置函数:

  • int(x):转成整数
  • float(x):转成浮点数
  • str(x):转成字符串
  • bool(x):转成布尔值
  • list(x):转成列表
# 字符串转数字
s = "123"
n = int(s)      # 123
f = float(s)    # 123.0

# 数字转字符串
num = 456
text = str(num)  # "456"

# 布尔转换——这个有意思
print(bool(0))     # False
print(bool(1))     # True
print(bool(""))    # False
print(bool("abc")) # True
print(bool([]))    # False
print(bool([1]))   # True
注意:不是所有转换都能成功。比如 int("abc") 就会报错。还有,把浮点数转成整数会直接截断小数部分,不是四舍五入。int(3.9) 得到的是 3,不是 4。

3.8 避坑指南——我踩过的那些坑

最后,分享几个我实际工作中遇到的坑:

  1. 字符串拼接 vs 数字相加"5" + 3 会报错,因为类型不同。得先转成同类型。
  2. 浮点数精度问题0.1 + 0.2 不等于 0.3,而是 0.30000000000000004。做金融计算时千万别用浮点数。
  3. 布尔值的陷阱True 其实等于 1,False 等于 0。所以 True + True 结果是 2。嗯,这个我当年也懵过。
  4. input() 返回字符串:你输入 123,它返回的是 "123",不是 123。做比较时特别容易出错。

好了,这一章的内容就这些。说白了,Python基础语法就是这些规矩,记住它们,后面写代码就顺了。下一章咱们聊聊流程控制,到时候见。