看见 a = 10,左边的 a 就是 Python 变量:给当前这份数据挂个名字,后面才能反复引用。
名字怎么取有规则。
所谓常量并没有关键字护着,全靠全大写这类约定提醒人别改。
而 10、"hi"、True 以及 0b1010 这类直接写在代码里的值,叫字面量。
给数据起个名字
变量就是内存里一块有名字的存放位置,内容可以随时改掉。Python 语言不必事先声明类型,解释器看赋值就会推断,重新赋不同类型的值也没问题:
number = 10
print(number) # 10
number = 1.1 # 重新赋值,类型也跟着变
print(number) # 1.1一次给多个变量赋值
右侧写成逗号分隔时,可以一次解包给多个名字。
若几个变量要先挂上同一个初值,也可以连着写等号:
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 10None 与集合字面量
None 表示目前还没有具体值,常用来初始化还没准备好的变量。
列表、元组、字典、集合也都有各自的字面量写法:
food = None
print(food) # Nonefruits = ["apple", "mango", "orange"] # 列表
numbers = (1, 2, 3) # 元组
alphabets = {'a': 'apple', 'b': 'ball'} # 字典
vowels = {'a', 'e', 'i', 'o', 'u'} # 集合常见误区
- 用了关键字当变量名:class = 1 直接语法错误,选名字时避开。
- 数字开头命名:1st_name 会报错。
- 以为常量真不能改:Python 语言的常量只是约定,改了不会报错,别依赖解释器替你拦住。