看见 a = 10,左边的 a 就是 Python 变量:给当前这份数据挂个名字,后面才能反复引用。

名字怎么取有规则。

所谓常量并没有关键字护着,全靠全大写这类约定提醒人别改。

而 10、"hi"、True 以及 0b1010 这类直接写在代码里的值,叫字面量。

给数据起个名字

变量就是内存里一块有名字的存放位置,内容可以随时改掉。Python 语言不必事先声明类型,解释器看赋值就会推断,重新赋不同类型的值也没问题:

number = 10
print(number)   # 10

number = 1.1    # 重新赋值,类型也跟着变
print(number)   # 1.1

一次给多个变量赋值

右侧写成逗号分隔时,可以一次解包给多个名字。

若几个变量要先挂上同一个初值,也可以连着写等号:

Python 变量多重赋值与解包示例运行
a, b, c = 5, 3.2, "Hello"   # 元组解包
print(a, b, c)              # 5 3.2 Hello

x = y = z = "same"          # 同一个值给三个变量
print(x, y, z)              # same same same

常量靠约定

Python 语言没有真正的常量关键字,习惯做法是把常量放到单独模块(.py 文件)里,用全大写加下划线命名,提醒自己和协作者不要改动:

# constant.py
PI = 3.14
GRAVITY = 9.8
# main.py
import constant
print(constant.PI)       # 3.14
print(constant.GRAVITY)  # 9.8

这只是命名约定,解释器并不会拦着你给 PI 重新赋值,约束完全靠自觉。

命名规则

  • 名称由字母、数字、下划线组成,不能数字开头。
  • 不能用 if、for、class 等关键字。
  • 不能用 !、@、#、$、% 等特殊符号。
  • 普通变量用 snake_case(小写加下划线),如 my_name、current_salary。
  • 常量用全大写,如 SPEED_OF_LIGHT。
  • 名字要有意义:vowel 比 v 好得多。

字面量(Literal)

字面量是直接写在代码里的原始数据。数字字面量除了十进制,还可以用 0b / 0o / 0x 前缀写二进制、八进制、十六进制,浮点也能用科学计数法,复数则带 j 后缀:

a = 0b1010     # 二进制字面量,等于 10
b = 100        # 十进制
c = 0o310      # 八进制字面量,等于 200
d = 0x12c      # 十六进制字面量,等于 300

float_1 = 10.5     # 浮点
float_2 = 1.5e2    # 科学计数法,等于 150.0

x = 3.14j          # 复数

print(a, b, c, d)  # 10 100 200 300(都按十进制打印)
print(float_1, float_2)   # 10.5 150.0
print(x, x.imag, x.real)  # 3.14j 3.14 0.0

字符串与布尔字面量

字符串可以用单引号、双引号或三引号书写。

True、False 是布尔字面量,在 Python 语言里还能直接参与算术(True 当作 1,False 当作 0):

strings = "This is Python"
char = 'C'
multiline = """跨越多行的
字符串"""

a = True + 4     # 5
b = False + 10   # 10
print(a, b)      # 5 10

None 与集合字面量

None 表示目前还没有具体值,常用来初始化还没准备好的变量。

列表、元组、字典、集合也都有各自的字面量写法:

food = None
print(food)   # None
fruits = ["apple", "mango", "orange"]   # 列表
numbers = (1, 2, 3)                     # 元组
alphabets = {'a': 'apple', 'b': 'ball'} # 字典
vowels = {'a', 'e', 'i', 'o', 'u'}      # 集合

常见误区

  • 用了关键字当变量名:class = 1 直接语法错误,选名字时避开。
  • 数字开头命名:1st_name 会报错。
  • 以为常量真不能改:Python 语言的常量只是约定,改了不会报错,别依赖解释器替你拦住。