返回

你所不知道的 Python 冷知识(建议收藏)

人工智能

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)}  # 生成一个从 09 的键值对,值为键的两倍

7. 集合解析

集合解析是 Python 中一种生成集合的简洁方式。它使用一对大括号 {} 和一个表达式来创建集合。集合解析可以让你在一个语句中创建并填充集合。例如:

my_set = {x for x in range(10)}  # 生成一个从 09 的集合

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