这 10 个 Python 技巧提升代码性

Python 是最受人喜爱的编程语言之一,以其简单、多用和可读性而闻名。然而,在其广为人知的路径之外,还有一些隐藏的瑰宝,鲜为人知的技巧和技术,可以将你的 Python 编程技能提升到新的高度。在本文中,我们将深入探讨十种这样的技巧,它们可能不在你的日常工具包中,但却能在你的编码工作中大显身手。

从简化字典操作到掌握路径操作,从高级迭代模式到轻量级数据结构,每一种技巧都能让你一窥 Python 功能的丰富性和深度。无论您是希望扩充自己知识面的资深 Python 爱好者,还是渴望充分挖掘 Python 语言潜力的新手,这些技巧一定会给您的 Python 之旅带来灵感和力量。

简化字典操作

使用 collections.defaultdict,可以创建具有默认值的字典,从而避免关键字错误,使代码更加简洁。

from collections import defaultdict

# Without defaultdict
word_count = {}
for word in words:
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1

# With defaultdict
word_count = defaultdict(int)
for word in words:
    word_count[word] += 1
print(word_count)

# {'apple': 3, 'banana': 2, 'orange': 1}
defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})

文件路径操作

pathlib 模块提供了一种面向对象的方法来处理文件系统路径,使代码更直观、更易读。

from pathlib import Path

# Creating a Path object
p = Path('/usr/bin')

# Check if path exists
print(p.exists())

# Iterate over directory
for child in p.iterdir():
    print(child)

# Joining paths
q = p / 'local' / 'bin'
print(q)


# True
# /usr/bin/python
# /usr/bin/pip
# /usr/local/bin

索引跟踪

enumerate 是一个内置函数,它允许你循环遍历一个可迭代对象,并自动生成一个计数器,从而简化你的循环。

# Without enumerate
i = 0
for element in iterable:
    print(i, element)
    i += 1

# With enumerate
for i, element in enumerate(iterable):
    print(i, element)
    
    
# 0 apple
# 1 banana
# 2 orange
# 0 apple
# 1 banana
# 2 orange

并行迭代

zip 允许并行迭代多个迭代表,创建对应元素的元组,既高效又可读。

names = ['Alice', 'Bob', 'Charlie']
scores = [85, 90, 95]

# Without zip
for i in range(len(names)):
    print(names[i], scores[i])

# With zip
for name, score in zip(names, scores):
    print(name, score)


# Alice 85
# Bob 90
# Charlie 95
# Alice 85
# Bob 90
# Charlie 95

高级迭代

itertools 模块包含各种函数,可用于创建复杂的迭代模式,使代码更强大、更灵活。

import itertools

# Infinite counting
for i in itertools.count(10, 2):
    if i > 20:
        break
    print(i)

# Cartesian product
for item in itertools.product([1, 2], ['a', 'b']):
    print(item)
    
    
# 10
# 12
# 14
# 16
# 18
# 20
# (1, 'a')
# (1, 'b')
# (2, 'a')
# (2, 'b')

使用 with 进行资源管理

with 语句可简化异常处理,确保资源得到妥善管理,这对编写健壮的代码至关重要。

# Without with
file = open('example.txt', 'r')
try:
    data = file.read()
finally:
    file.close()

# With with
with open('example.txt', 'r') as file:
    data = file.read()

创建轻量级数据结构

集合模块中的 namedtuple 提供了一种创建轻量级、不可变数据结构的简便方法,它能让你的代码更简洁、更自文档化。

from collections import namedtuple

# Define a namedtuple
Point = namedtuple('Point', ['x', 'y'])

# Create an instance
p = Point(10, 20)

print(p.x, p.y)


# 10 20

列表推导式

Python 中的列表提供了一种创建列表的简洁方法,使代码更易读,通常也更快。

# Without list comprehension
squares = []
for x in range(10):
    squares.append(x**2)

# With list comprehension
squares = [x**2 for x in range(10)]


# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

缓存函数结果

functools.lru_cache 装饰器可以用来为一个函数添加一个缓存系统。这个缓存系统会存储函数的输入和对应的输出。如果函数被调用,并且给出了已经缓存过的输入,那么函数就不会重新计算,而是直接从缓存中获取对应的输出。

# Without list comprehension
squares = []
for x in range(10):
    squares.append(x**2)

# With list comprehension
squares = [x**2 for x in range(10)]


# 12586269025

将 _ 用作丢弃变量

在循环或解包中,当不需要 _ 的值时,通常会将其用作丢弃变量,从而使代码更加清晰,并表明有意忽略该变量。

# Loop with throwaway variable
for _ in range(5):
    print("Hello, World!")

# Unpacking with throwaway variable
a, _, b = (1, 2, 3)
print(a, b)

# Hello, World!
# Hello, World!
# Hello, World!
# Hello, World!
# Hello, World!
# 1 3

这些鲜为人知的 Python 技巧可以帮助你编写更高效、更易读、更 Pythonic 的代码。无论是简化字典操作、更直观地管理文件路径,还是利用高级迭代技术,这些技巧都能增强你的开发过程。尝试使用这些技巧,并将它们融入到你的编码实践中,成为一名更精通 Python 的开发者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值