你所不知道的 Python 冷知识(建议收藏)
2023-09-12 18:42:30
1. 省略号也是对象 ...
省略号,在 Python 中,一切皆对象。它也不例外。在 Python 中,它叫做 Ellipsis。在 Python 3 中你可以直接写…来得到这玩意。而在 2 中没有…这个语法,只能直接写 Ellipsis 来获取。最后,这东西是一个单例,也就是说内存中只有一个省略号。
2. 负数索引
Python 允许你使用负数索引来访问列表或元组中的元素。负数索引从列表或元组的末尾开始计数,-1 是最后一个元素,-2 是倒数第二个元素,以此类推。例如:
my_list = [1, 2, 3, 4, 5]
print(my_list[-1]) # 输出:5
print(my_list[-2]) # 输出:4
**3. 解包运算符 * 和 ** **
解包运算符 * 和 ** 可以用于将可迭代对象(如列表、元组或字符串)中的元素分配给多个变量。* 用于解包一个可迭代对象,而 ** 用于解包嵌套的可迭代对象。例如:
my_list = [1, 2, 3]
a, b, c = my_list # 解包 my_list
my_tuple = ((1, 2), (3, 4))
a, b = my_tuple # 解包 my_tuple 的第一层
c, d = a # 解包 my_tuple 的第二层
4. 字符串格式化
Python 提供了多种字符串格式化方法,包括 % 格式化、format() 方法和 f-字符串。% 格式化是传统的字符串格式化方法,但现在已经不推荐使用了。format() 方法更加灵活,可以格式化任意类型的对象。f-字符串是 Python 3.6 中引入的一种新的字符串格式化方法,它使用类似于 C 语言 printf() 函数的语法。
5. 列表解析
列表解析是 Python 中一种生成列表的简洁方式。它使用一对方括号 [] 和一个表达式来创建列表。列表解析可以让你在一个语句中创建并填充列表。例如:
my_list = [x for x in range(10)] # 生成一个从 0 到 9 的列表
my_list = [x * 2 for x in range(10)] # 生成一个从 0 到 18 的偶数列表
6. 字典解析
字典解析是 Python 中一种生成字典的简洁方式。它使用一对大括号 {} 和一个表达式来创建字典。字典解析可以让你在一个语句中创建并填充字典。例如:
my_dict = {x: x * 2 for x in range(10)} # 生成一个从 0 到 9 的键值对,值为键的两倍
7. 集合解析
集合解析是 Python 中一种生成集合的简洁方式。它使用一对大括号 {} 和一个表达式来创建集合。集合解析可以让你在一个语句中创建并填充集合。例如:
my_set = {x for x in range(10)} # 生成一个从 0 到 9 的集合
8. 生成器
生成器是一种特殊的迭代器,它允许你在不创建整个列表或元组的情况下遍历一个序列。生成器使用 yield 来生成元素。例如:
def my_generator():
for x in range(10):
yield x # 生成元素
for x in my_generator():
print(x) # 输出:0 1 2 3 4 5 6 7 8 9
9. 装饰器
装饰器是一种在不修改函数源代码的情况下修改函数行为的机制。装饰器使用 @ 符号来修饰函数。例如:
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before calling the function")
result = func(*args, **kwargs)
print("After calling the function")
return result
return wrapper
@my_decorator
def my_function():
print("I'm a function")
my_function()
输出:
Before calling the function
I'm a function
After calling the function
10. 多重继承
多重继承允许一个类从多个父类继承属性和方法。多重继承在 Python 中使用逗号分隔的父类列表来实现。例如:
class A:
def method_a(self):
print("Method A")
class B:
def method_b(self):
print("Method B")
class C(A, B):
def method_c(self):
print("Method C")
obj = C()
obj.method_a() # 输出:Method A
obj.method_b() # 输出:Method B
obj.method_c() # 输出:Method C