五个必备的Python技巧,程序员必知

发表时间: 2023-11-14 05:43

1 — 列表推导式

列表推导式是在 Python 中创建列表的一种简洁而强大的方法。它们允许通过将表达式应用于可迭代中的每个项目来创建列表。

示例 1:创建 1 到 10 的列表。

squares = [x**2 for x in range(1, 11)] print(squares)

输出[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

示例 2:创建 1 到 20 之间的偶数列表。

Evens = [x for x in range(1, 21) if x % 2 == 0] print(evens)

输出[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

示例 3:从字符串创建大写字母列表。

string = "Hello, World!"uppercase = [char.upper() for char in string if char.isalpha()]print(uppercase)

输出['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']

2 — 上下文管理

上下文管理器是 Python 中管理资源的有用工具。它们允许自动分配和释放资源,确保它们被正确清理而不是悬而未决。

示例 1:使用上下文管理器打开文件。

with open('file.txt', 'r') as file:     for line in file:         print(line)

示例 2:使用上下文管理器获取和释放锁。

import threading lock = threading.Lock() with lock:     # 做一些线程安全的工作

示例 3:使用上下文管理器连接到数据库。

import sqlite3 with sqlite3.connect('mydb.sqlite') as conn:     # 做一些数据库工作

3 — 装饰器

装饰器是修改 Python 中函数行为的强大工具。它们允许向函数添加功能而无需修改其源代码。

示例 1:使用装饰器测量函数的执行时间。

import timedef measure_time(func):    def wrapper(*args, **kwargs):        start = time.time()        result = func(*args, **kwargs)        end = time.time()        print(f"Execution time: {end - start:.3f} seconds")        return result    return wrapper@measure_timedef my_function():    # do some work

示例 2:使用装饰器记录函数的参数和返回值。

def log_function(func):    def wrapper(*args, **kwargs):        print(f"Function {func.__name__} called with args={args} kwargs={kwargs}")        result = func(*args, **kwargs)        print(f"Function {func.__name__} returned {result}")        return result    return wrapper@log_functiondef my_function(arg1, arg2):    # do some work    return result

示例 3:使用装饰器缓存函数的返回值。

def cache_result(func):    cache = {}    def wrapper(*args):        if args in cache:            print(f"Using cached result for {args}")            return cache[args]        result = func(*args)        cache[args] = result        return result    return wrapper@cache_resultdef expensive_function(arg1, arg2):    # do some work

4 — Lambda 函数

Lambda 函数是您可以在代码中内联定义的匿名函数。它们是创建小型一次性函数的一种便捷方法,而不会因不必要的函数定义而使代码变得混乱。

示例 1:按第二个元素对元组列表进行排序。

my_list = [(1, 4), (2, 3), (3, 2), (4, 1)]my_list.sort(key=lambda x: x[1])print(my_list)

输出: [(4, 1), (3, 2), (2, 3), (1, 4)]

示例 2:过滤数字列表以仅保留偶数。

my_list = [1, 2, 3, 4, 5, 6] Even_numbers = list(filter(lambda x: x % 2 == 0, my_list)) print(even_numbers)

输出: [2, 4, 6]

示例 3:将字符串列表映射到其长度。

my_list = ["foo", "bar", "baz"] lengths = list(map(lambda x: len(x), my_list)) print(lengths)

输出:[3, 3, 3]

5 — 命名元组

命名元组是在 Python 中创建轻量级、不可变数据结构的便捷方法。它们的行为类似于元组,但具有命名字段,可以更轻松地访问其元素。

示例 1:定义一个命名元组来表示 2D 点。

来自集合导入namedtuple Point =namedtuple("Point", ["x", "y"]) p = Point(1, 2) print(px, py)

输出:1 2

示例 2:创建代表人的命名元组列表。

from collections import namedtuplePerson = namedtuple("Person", ["name", "age"])people = [    Person("Alice", 25),    Person("Bob", 30),    Person("Charlie", 35),]for person in people:    print(f"{person.name} is {person.age} years old")

输出:

Alice is 25 years oldBob is 30 years oldCharlie is 35 years old

示例 3:使用命名元组作为函数的返回值。

from collections importnamedtuple defdivide(a,b):     Result =namedtuple("Result", ["quotient", "remainder"])     return Result(a // b, a % b) result =divide(10, 3) print(f"10 除以 3 为 {result.quotient},余数为 {result.remainder}")

输出: 10 divided by 3 is 3 with a remainder of 1.