构成表达式的基本元素。
字面值是表示固定值的基本元素。它们是表达式中最简单的元素,直接表示数据而不需要计算。
imagnumber ::= (floatnumber | digitpart) ("j" | "J")
-1
等负数是由一元运算符 -
和字面值 1
合成的。字符串是由字符组成的文本数据,可以包含字母、数字、符号以及其他字符。字符串字面值用引号包围,可以使用单引号'...'
、双引号"..."
,也可以用三重引号'''...'''
或"""..."""
来定义。
'''...'''
和 """..."""
:用于定义多行字符串或包含复杂内容的字符串,如长文本、带有换行的字符串等。'...'
和双引号 "..."
:用于定义单行字符串。两者之间没有区别,主要用于方便嵌套引号。single_quote_string = 'Hello, World!' # 使用单引号定义
double_quote_string = "Hello, World!" # 使用双引号定义
multi_line_string = """This is a
multi-line string
using triple double quotes."""
another_multi_line = '''This is another example
of a multi-line string
using triple single quotes.'''
"""
\' :单引号
\" :双引号
\\ :反斜杠
\n :换行符
\t :制表符(Tab)
\r :回车符
\b :退格符
\u 或 \U :插入Unicode字符(如\u00A9表示©)
\xhh :插入十六进制字符(如\x41表示A)
"""
escaped_string = "This is a \"quoted\" word with newline:\nNew line here."
print(escaped_string)
# 输出:
# This is a "quoted" word with newline:
# New line here.
raw_string = r"C:\Users\Name\Folder" # 反斜杠不会被转义
print(raw_string) # 输出 "C:\Users\Name\Folder"
unicode_string = "你好!"
print(unicode_string) # 你好!
字节串用于表示二进制数据。它们不是由字符组成的,而是由字节(8位组成的数值)组成的。字节串字面值用前缀b或B加上引号(单引号或双引号)表示。
byte_string = b'Hello, World!' # 使用单引号定义字节串
byte_string2 = B"Another byte string." # 使用双引号定义字节串
type(byte_string) # bytes
byte_string = b'你好世界!' # SyntaxError: bytes can only contain ASCII literal characters.
"""
\n:换行符
\t:制表符
\r:回车符
\\:反斜杠
\':单引号
\":双引号
\xhh:十六进制值为hh的字节
"""
escaped_byte_string = b"This is a byte string with newline:\nNew line here."
print(escaped_byte_string)
# 字符串转字节串
string = "Hello, 世界"
byte_data = string.encode('utf-8') # 使用UTF-8编码
print(byte_data) # 输出 b'Hello, \xe4\xb8\x96\xe7\x95\x8c'
# 字节串转字符串
decoded_string = byte_data.decode('utf-8') # 解码为字符串
print(decoded_string) # 输出 "Hello, 世界"
None字面量
:None
,表示空值或无值。True
和False
。标识符是用来命名变量、函数、类、模块和其他对象的名称。它们是用户定义的,并遵循一系列的命名规则和规范。
用于对操作数进行运算的符号。
类别 | 符号 |
---|---|
算术操作符 | +、-、*、/、%、**、// |
比较操作符 | ==、!=、<、>、<=、>= |
逻辑操作符 | and、or、not |
赋值操作符 | =、+=、-=、*=、/= |
位操作符 | &、|、^、~、<<、>> |
成员运算符 | in(成员)、not in(非成员) |
身份运算符 | is(是)、is not(不是) |
用于明确优先级和操作。
类别 | 符号 |
---|---|
小括号 () |
用于分组或函数调用。 |
中括号 [] |
用于列表、元组索引和切片。 |
大括号 {} |
用于集合和字典。 |
容器是用于存储和组织数据的数据结构。它们可以通过特定的括号形式来创建,支持不同类型的数据操作,如索引、迭代、添加、删除等。
类别 | 符号 | 描述 | 示例 |
---|---|---|---|
列表(List) | [ ] |
可变的有序集合,支持索引、切片、添加、删除等操作。 | numbers = [1, 2, 3, 4] |
元组(Tuple) | ( ) |
不可变的有序集合,一旦创建就不能修改,适用于需要固定内容的数据。 | coordinates = (10.5, 20.3) |
集合(Set) | { } |
无序且不重复的元素集合,支持集合运算,如并集、交集、差集。 | unique_numbers = {1, 2, 3, 4} |
字典(Dictionary) | {key: value} |
键值对的无序集合,通过键来访问对应的值。键是唯一的,可以是不可变类型,如字符串或数字。 | student_info = {'name': 'Alice', 'age': 22} |
编程语言中最紧密绑定的操作。
表达式中对数据进行操作的方式。
primary ::= atom(基本构成元素) | attributeref(属性引用) | subscription(抽取) | slicing(切片) | call(调用)
.
操作符来访问对象的属性或方法。属性可以是数据属性(变量)或方法。object.attribute
class MyClass:
def __init__(self):
self.value = 42
def show(self):
print("Hello, World!")
my_instance = MyClass()
print(my_instance.value) # 访问数据属性
my_instance.show() # 调用方法
[]
操作符来访问序列(如列表、元组、字符串等)中的单个元素。索引从0开始。sequence[index]
my_list = [1, 2, 3, 4, 5]
print(my_list[2]) # 访问列表中的第三个元素,输出: 3
my_string = "Hello, World!"
print(my_string[7]) # 访问字符串中的第八个字符,输出: W
[]
操作符和冒号(:)
来获取序列的子集。切片可以指定起始索引、结束索引以及步长。sequence[start:end:step]
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(my_list[2:5]) # 输出: [2, 3, 4]
print(my_list[::2]) # 输出: [0, 2, 4, 6, 8],步长为2
()
操作符来执行函数或方法。可以传递位置参数、关键字参数、可变参数列表和关键字参数字典。function(arguments)
def greet(name, message="Hello"):
print(f"{message}, {name}!")
greet("Alice") # 调用函数,输出: Hello, Alice!
greet("Bob", message="Hi") # 使用关键字参数调用函数,输出: Hi, Bob!
用于执行数学运算的表达式,包括加法、减法、乘法、除法、取余等操作。
# 基本算术运算
a = 10
b = 3
sum_result = a + b # 13
diff_result = a - b # 7
product = a * b # 30
quotient = a / b # 3.333...
integer_division = a // b # 3
modulus = a % b # 1
power = a ** b # 1000 (10的3次方)
用于比较两个值的关系,返回布尔值True或False。通常用于条件判断和循环中。
x = 5
y = 10
print(x == y) # False
print(x != y) # True
print(x < y) # True
print(x > y) # False
print(x <= 5) # True
print(y >= 15) # False
用于布尔值之间的逻辑运算,可以连接多个条件表达式,常用于复杂条件判断。
a = True
b = False
print(a and b) # False
print(a or b) # True
print(not a) # False
# 复杂条件判断
age = 25
has_ticket = True
# 检查是否可以进入
can_enter = (age >= 18) and has_ticket # True
用于将表达式的结果赋值给变量。Python支持多种赋值运算符,包括复合赋值运算符(如
+=、*=
等)。
x = 10
x += 5 # 相当于 x = x + 5,结果为15
x *= 2 # 相当于 x = x * 2,结果为30
x -= 10 # 相当于 x = x - 10,结果为20
x /= 4 # 相当于 x = x / 4,结果为5.0
用于检查元素是否存在于某个序列(如列表、元组、字符串)或集合中。
常用操作符
fruits = ['apple', 'banana', 'cherry']
# 成员检查
print('apple' in fruits) # True
print('grape' in fruits) # False
print('orange' not in fruits) # True
用于比较两个对象的身份(即内存地址),检查它们是否是同一个对象。
a = [1, 2, 3]
b = a # b引用了a
c = [1, 2, 3]
print(a is b) # True,因为b是a的引用
print(a is c) # False,尽管内容相同,但a和c是不同的对象
print(a is not c) # True
用于按位处理整数。操作符作用在数字的二进制位上。
a = 0b1010 # 二进制表示10
b = 0b1100 # 二进制表示12
print(bin(a & b)) # 0b1000,按位与
print(bin(a | b)) # 0b1110,按位或
print(bin(a ^ b)) # 0b0110,按位异或
print(bin(~a)) # -0b1011,按位取反
print(bin(a << 2)) # 0b101000,左移两位,相当于乘以4
print(bin(b >> 2)) # 0b11,右移两位,相当于除以4
条件表达式(也称三元表达式)用于根据条件选择值。常见于简单的条件选择。
value_if_true if condition else value_if_false
age = 20
status = "Adult" if age >= 18 else "Minor"
print(status) # 输出 "Adult"
Lambda
表达式用于定义匿名函数,通常用于简洁地表示短小的函数。它们没有名称,可以在需要函数的地方内联使用。
lambda arguments: expression
# 简单的lambda表达式
square = lambda x: x ** 2
print(square(5)) # 输出 25
# 在排序中使用lambda
points = [(1, 2), (3, 1), (0, 4)]
sorted_points = sorted(points, key=lambda p: p[1])
print(sorted_points) # 输出 [(3, 1), (1, 2), (0, 4)]
生成器表达式用于创建一个生成器对象,它是一种惰性求值的迭代器,在需要时才会计算生成的值,而不是一次性生成所有值。因此,它非常适合处理大量数据或需要延迟计算的场景。
(expression for item in iterable if condition)
# 生成器表达式:创建一个生成1到10之间所有偶数的生成器
even_numbers = (x for x in range(1, 11) if x % 2 == 0)
# 使用生成器
for num in even_numbers:
print(num) # 输出:2 4 6 8 10
yield
表达式列表推导式(List Comprehension)是Python中一种简洁且强大的创建列表的方式。它能够在一行内基于已有的列表或其他可迭代对象生成新的列表,支持条件过滤和变换,是编写简洁代码的有力工具。
[expression for item in iterable if condition]
# 从 0 到 9 的整数生成平方列表
squares = [x ** 2 for x in range(10)]
print(squares) # 输出 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 生成 0 到 9 的偶数列表
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # 输出 [0, 2, 4, 6, 8]
# 生成笛卡尔积,例如 (x, y) 组合,其中 x 来自 [1, 2, 3],y 来自 [4, 5, 6]
cartesian_product = [(x, y) for x in [1, 2, 3] for y in [4, 5, 6]]
print(cartesian_product) # 输出 [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
# 生成 0 到 19 的偶数且大于 10 的数字
filtered_numbers = [x for x in range(20) if x % 2 == 0 and x > 10]
print(filtered_numbers) # 输出 [12, 14, 16, 18]
# 生成一个 3x3 的二维矩阵
matrix = [[x * y for y in range(1, 4)] for x in range(1, 4)]
print(matrix) # 输出 [[1, 2, 3], [2, 4, 6], [3, 6, 9]]