最实用的20个python小技巧

  • Post category:Python

最实用的20个Python小技巧完整攻略

在这篇文章中,我们将深入探讨20个实用的Python小技巧,这些技巧可以让你的Python编程更加高效、简洁和容易理解。这些技巧包括:

  1. 列表推导式
  2. 字典推导式
  3. 集合推导式
  4. 三元表达式
  5. 使用enumerate()函数遍历列表
  6. 通过zip()函数将两个列表合并为一个字典
  7. 通过any()和all()函数判断列表中的布尔值
  8. 对字典按值进行排序
  9. 使用默认字典处理缺少的键
  10. 使用zip_longest()函数对不等长的列表进行合并
  11. 使用sorted()函数对复杂对象进行排序
  12. 使用partial()函数创建部分函数
  13. 在异常处理块中使用with语句关闭文件
  14. 注释函数参数
  15. 使用collections.defaultdict()处理嵌套字典
  16. 使用装饰器简化函数调用
  17. 使用setdefault()方法更新字典
  18. 使用Python 3.8中的walrus运算符
  19. 使用zip()函数对多个列表进行操作
  20. 在循环中使用else语句

下面我们将详细介绍这些小技巧及其用法。

1. 列表推导式

列表推导式可以简化创建列表的过程。它是一种快速创建列表的方法,它使得代码更加简短,更易于阅读和理解。

示例:

a = [i for i in range(5)]
print(a)

输出:

[0, 1, 2, 3, 4]

在这个例子中,我们使用一个for循环和range()函数来创建一个从0到4的列表。然后我们使用列表推导式将其简化为一行代码。

2. 字典推导式

字典推导式可以简化创建字典的过程。它是一种快速创建字典的方法,它使得代码更加简短,更易于阅读和理解。

示例:

a = {i:i*2 for i in range(5)}
print(a)

输出:

{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

在这个例子中,我们使用一个for循环和range()函数来创建从0到4的键值对。然后,我们使用字典推导式将其简化为一行代码。

3. 集合推导式

集合推导式可以简化创建集合的过程。它是一种快速创建集合的方法,它使得代码更加简短,更易于阅读和理解。

示例:

a = {i for i in range(5)}
print(a)

输出:

{0, 1, 2, 3, 4}

在这个例子中,我们使用一个for循环和range()函数来创建一个从0到4的集合。然后,我们使用集合推导式将其简化为一行代码。

4. 三元表达式

三元表达式是一种简洁的条件语句,使得代码更加简化和容易理解。

示例:

b = 5
a = "b大于等于5" if b >= 5 else "b小于5"
print(a)

输出:

b大于等于5

在这个例子中,我们使用一个if/else语句来判断b是否大于等于5。然后,我们使用三元表达式将其简化为一行代码。

5. 使用enumerate()函数遍历列表

enumerate()函数可以同时遍历列表的索引和值,使得代码更加短小而简洁。

示例:

a = ["apple", "orange", "banana"]
for i, val in enumerate(a):
    print(i, val)

输出:

0 apple
1 orange
2 banana

在这个例子中,我们使用enumerate()函数来遍历列表a中的索引和值。然后,我们打印出索引和值的对应关系。

6. 通过zip()函数将两个列表合并为一个字典

zip()函数可以将两个列表按照索引对应起来,然后创建一个字典。

示例:

keys = ["a", "b", "c"]
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict)

输出:

{'a': 1, 'b': 2, 'c': 3}

在这个例子中,我们使用zip()函数将keys和values两个列表按照索引对应起来,然后创建一个新的字典my_dict。

7. 通过any()和all()函数判断列表中的布尔值

any()函数返回列表中任意一个元素为True,则返回True。all()函数则返回列表中所有元素均为True,则返回True。

示例:

a = [True, False, True]
print(any(a))  # True
print(all(a))  # False

在这个例子中,我们使用any()和all()函数来判断列表a中的布尔值。

8. 对字典按值进行排序

可以使用sorted()函数和lambda表达式来按照字典值进行排序并返回一个字典。

示例:

a = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_a = dict(sorted(a.items(), key=lambda item: item[1]))
print(sorted_a)

输出:

{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

在这个例子中,我们使用sorted()函数和lambda表达式来按照字典值进行排序。然后,我们使用dict()函数将其转换为一个新的字典。

9. 使用默认字典处理缺少的键

可以使用collections模块中的defaultdict()函数来处理缺少的键。

示例:

from collections import defaultdict
a = defaultdict(lambda: "missing")
a["key1"] = "value1"
print(a["key1"])
print(a["key2"])

输出:

value1
missing

在这个例子中,我们使用defaultdict()函数创建一个新的字典a。如果访问字典中缺少的键,它会返回默认值“missing”。

10. 使用zip_longest()函数对不等长的列表进行合并

zip_longest()函数可以将两个不等长的列表进行合并,然后用默认值填充缺少的部分。

示例:

from itertools import zip_longest
a = [1, 2, 3, 4]
b = ["a", "b", "c"]
zipped = list(zip_longest(a, b, fillvalue="missing"))
print(zipped)

输出:

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'missing')]

在这个例子中,我们使用zip_longest()函数将两个不等长的列表a和b进行合并。然后,我们使用fillvalue=”missing”来填充缺少的部分。

11. 使用sorted()函数对复杂对象进行排序

可以使用sorted()函数和key参数来对复杂对象进行排序。

示例:

a = [{"name":"John", "age":25}, 
     {"name":"Jack", "age":24}, 
     {"name":"Jane", "age":26}]
sorted_a = sorted(a, key=lambda x: x["age"])
print(sorted_a)

输出:

[{'name': 'Jack', 'age': 24}, {'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 26}]

在这个例子中,我们使用sorted()函数和lambda表达式来对复杂对象进行排序。然后,我们使用key参数来指定按照哪个键进行排序。

12. 使用partial()函数创建部分函数

可以使用functools模块中的partial()函数来创建部分函数,从而减少重复代码。

示例:

from functools import partial
def multiply(a, b):
    return a * b
double = partial(multiply, b=2)
triple = partial(multiply, b=3)
print(double(5))
print(triple(5))

输出:

10
15

在这个例子中,我们使用partial()函数创建了两个部分函数double和triple,它们都调用了原始函数multiply。然后,我们分别使用double(5)和triple(5)来调用这些部分函数。

13. 在异常处理块中使用with语句关闭文件

可以在异常处理块中使用with语句来确保文件在使用后被关闭。

示例:

try:
    with open("file.txt") as f:
        lines = f.readlines()
except FileNotFoundError:
    print("file not found")

在这个例子中,我们使用with语句打开文件file.txt,然后读取文件中的所有行。如果文件不存在,我们就输出异常处理块中的信息。

14. 注释函数参数

在函数中添加注释可以提高代码的可读性和可维护性。

示例:

def foo(bar: int, baz: str) -> float:

在这个例子中,我们使用注释来说明函数foo的参数类型。(在 Python 3.5 之前,注释是函数定义的一部分,可以通过函数的 annotations 属性进行访问。在 Python 3.5 之后,注释已经成为函数定义的一个标准组成部分。)

15. 使用collections.defaultdict()处理嵌套字典

可以使用collections模块中的defaultdict()函数处理嵌套字典的情况。

示例:

from collections import defaultdict
a = defaultdict(lambda: defaultdict(int))
a["fruit"]["apple"] = 1
a["fruit"]["orange"] = 2
print(a)

输出:

defaultdict(<function <lambda> at 0x000001>, {'fruit': defaultdict(<class 'int'>, {'apple': 1, 'orange': 2})})

在这个例子中,我们使用defaultdict()函数处理a中的嵌套字典。默认情况下,我们可以将其设置为int类型。

16. 使用装饰器简化函数调用

可以使用装饰器来简化函数调用。

示例:

def my_decorator(func):
    def wrapper():
        print("Before the function is called.")
        func()
        print("After the function is called.")
    return wrapper
@my_decorator
def say_hello():
    print("Hello!")
say_hello()

输出:

Before the function is called.
Hello!
After the function is called.

在这个例子中,我们定义了一个简单的装饰器my_decorator。我们然后使用@my_decorator修饰say_hello函数。在调用say_hello函数时,会先执行装饰器中的代码,然后再执行原始函数中的代码。

17. 使用setdefault()方法更新字典

可以使用setdefault()方法更新字典,这将避免在没有找到键值(key)的情况下再次查询字典。

示例:

a = {"apple": 1, "banana": 2}
a.setdefault("orange", 3)
a.setdefault("apple", 4)
print(a)

输出:

{'apple': 1, 'banana': 2, 'orange': 3}

在这个例子中,我们使用setdefault()方法向字典a中添加键”orange”及其对应的值。由于键”apple”已经在字典中存在,因此setdefault()方法不会对其进行更改。

18. 使用Python 3.8中的walrus运算符

Python 3.8中新增加了walrus运算符:=,可以将表达式中的值分配给变量。

示例:

n = 5
while (n:=n-1) > 0:
    print(n)

输出:

4
3
2
1

在这个例子中,我们使用了walrus运算符:=来将表达式(n-1)的值分配给变量n。在循环中,变量n的值不断减小并打印输出。

19. 使用zip()函数对多个列表进行操作

zip()函数也可以对多个列表进行操作。

示例:

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
zipped = zip(a, b, c)
for i in zipped:
    print(i)

输出:

(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

在这个例子中,我们使用zip()函数同时遍历列表a、b和c。然后,将它们打包成一个新的元组并输出。

20. 在循环中使用else语句

在Python中,可以在循环中使用else语句,在循环结束时执行一些操作。

示例:

a = [1, 2, 3, 4]
for i in a:
    if i == 5:
        break
else:
    print("No items were found.")

输出:

No items were found.

在这个例子中,我们使用else语句来在循环结束时输出一条信息。由于a中不存在值为5的元素,因此我们输出了相应的信息。

结论

在本文中,我们详细介绍了20个实用的Python小技巧,这些技巧可以让你的Python编程更加高效、简洁和容易理解。通过阅读这篇文章,您应该能够比较自如地使用这些技巧来提高您的编程水平。