Searching...
简体中文
English
Español
简体中文
Français
Deutsch
日本語
Português
Italiano
한국어
Русский
Nederlands
العربية
Polski
हिन्दी
Tiếng Việt
Svenska
Ελληνικά
Türkçe
ไทย
Čeština
Română
Magyar
Українська
Bahasa Indonesia
Dansk
Suomi
Български
עברית
Norsk
Hrvatski
Català
Slovenčina
Lietuvių
Slovenščina
Српски
Eesti
Latviešu
فارسی
മലയാളം
தமிழ்
اردو
Python Tricks

Python Tricks

A Buffet of Awesome Python Features
by Dan Bader 2017 301 pages
Programming
Computer Science
Coding
9 minutes

重点摘要

1. Python的函数是第一类对象

函数是对象——它们可以被赋值给变量,存储在数据结构中,传递给其他函数并从其他函数返回。

函数作为数据。 在Python中,函数被视为第一类公民,这意味着它们可以像其他对象一样被操作。这种特性允许强大的编程范式:

  • 将函数赋值给变量
  • 将函数存储在列表、字典或其他数据结构中
  • 将函数作为参数传递给其他函数
  • 从其他函数返回函数
  • 在函数内部定义函数(嵌套函数)

这种灵活性使得高级编程技术如高阶函数、闭包和函数式编程模式成为可能,使Python成为解决复杂问题的多功能且富有表现力的语言。

2. 装饰器增强和修改函数行为

装饰器定义了可重用的构建块,你可以将其应用于可调用对象以修改其行为,而无需永久修改该可调用对象。

语法糖用于修改。 装饰器提供了一种干净且可重用的方式来扩展或修改函数或类的行为:

  • 它们包装一个函数,修改其行为而不改变其源代码
  • 常见用途包括日志记录、计时、访问控制和缓存
  • 装饰器可以堆叠,允许对单个函数进行多重修改
  • 它们促进了关注点分离的原则,使代码保持模块化

装饰器使用@语法实现,使代码更具可读性和可维护性。它们利用Python的第一类函数和闭包提供了一种强大的元编程机制。

3. *args和**kwargs实现灵活的函数参数

*args和**kwargs让你可以编写接受可变数量参数的函数。

可变参数的灵活性。 这些特殊的语法元素允许函数接受任意数量的位置参数或关键字参数:

  • *args将额外的位置参数收集到一个元组中
  • **kwargs将额外的关键字参数收集到一个字典中
  • 它们为函数定义提供了灵活性,允许未来的扩展
  • 对于创建包装函数或具有可选参数的API非常有用

这个特性使得创建更通用的函数成为可能,并有助于编写能够适应不断变化的需求而无需修改函数签名的代码。

4. 推导式提供简洁的集合创建语法

推导式只是简单for循环模式的高级语法糖。

优雅的集合创建。 列表、集合和字典推导式提供了一种基于现有可迭代对象创建集合的紧凑方式:

  • 它们将集合的创建和填充结合在一行中
  • 通常比等效的for循环更具可读性和速度
  • 可以包含条件以过滤元素
  • 可用于列表、集合和字典

示例:

  • 列表推导式: [x*2 for x in range(10) if x % 2 == 0]
  • 集合推导式: {word.lower() for word in words}
  • 字典推导式: {k: v**2 for k, v in my_dict.items()}

虽然强大,但重要的是在简洁性和可读性之间取得平衡,避免过于复杂的推导式可能会掩盖代码的意图。

5. 生成器函数和表达式简化迭代器创建

生成器抽象了编写基于类的迭代器所需的大量样板代码。

轻松迭代。 生成器提供了一种无需完整类实现即可创建迭代器的简单方法:

  • 使用yield关键字生成一系列值
  • 内存高效,因为它们按需生成值
  • 可以在for循环、列表推导式和其他可迭代上下文中使用
  • 生成器表达式为简单生成器提供了简洁的语法

生成器函数:

def countdown(n):
    while n > 0:
        yield n
        n -= 1

生成器表达式:

squares = (x*x for x in range(10))

生成器在处理大型数据集或无限序列时特别有用,因为它们不会一次性将所有值存储在内存中。

6. 字典是多功能且强大的数据结构

字典是Python中的核心数据结构。

高效的键值存储。 字典提供快速、灵活且功能丰富的关联数组:

  • 键查找、插入和删除的平均时间复杂度为O(1)
  • 支持任何可哈希对象作为键(字符串、数字、元组)
  • 提供如get()方法以安全地访问键并提供默认值
  • 可以用来模拟其他语言中的switch/case语句

高级字典特性:

  • OrderedDict: 记住插入键的顺序
  • defaultdict: 为缺失的键提供默认值
  • ChainMap: 将多个字典作为单个映射进行搜索

字典是Python实现的基础,并在语言本身以及许多Python库和框架中广泛使用。

7. 有效的循环技术提高代码可读性

在Python中编写C风格的循环被认为是不Pythonic的。

Pythonic迭代。 Python提供了几种惯用的方式来遍历序列和执行迭代:

  • 使用for item in iterable而不是索引
  • 当需要索引和值时使用enumerate()
  • 利用zip()同时遍历多个序列
  • 利用itertools模块进行复杂迭代

示例:

# 代替:
for i in range(len(items)):
    print(i, items[i])

# 使用:
for i, item in enumerate(items):
    print(i, item)

# 遍历两个列表:
for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

这些技术使代码更简洁、可读且高效,符合Python追求清晰和简洁的哲学。

8. 面向对象编程概念优化代码组织

抽象基类(ABCs)确保派生类实现基类中的特定方法。

结构化代码设计。 Python的面向对象特性为组织和结构化代码提供了强大的工具:

  • 类封装数据和行为
  • 继承允许代码重用和专门化
  • 抽象基类定义接口并强制实现
  • 属性提供对属性的受控访问
  • 特殊方法(双下划线方法)允许自定义对象行为

Python中的关键OOP概念:

  • 通过鸭子类型实现多态性
  • 多重继承和方法解析顺序(MRO)
  • 组合作为继承的替代方案
  • 元类用于高级类创建控制

有效使用OOP原则可以使代码结构更具可维护性、可扩展性和模块化。

9. Python中的数据结构提供多样化的功能

如果你不需要并行处理支持,collections.deque提供的实现是实现FIFO队列数据结构的绝佳默认选择。

定制的数据组织。 Python提供了一组丰富的内置和标准库数据结构以满足各种需求:

  • 列表:用于通用序列的动态数组
  • 元组:用于固定集合的不可变序列
  • 集合:唯一元素的无序集合
  • 双端队列:用于高效插入/删除的双端队列
  • Heapq:优先队列实现
  • Counter:用于计数可哈希对象的多重集

选择合适的数据结构可以显著影响代码的性能和清晰度。考虑因素包括:

  • 所需操作(例如,频繁插入、删除、查找)
  • 内存使用
  • 线程安全要求
  • 是否需要排序或排序

了解不同数据结构的特性和权衡可以实现更高效和优雅的编程问题解决方案。

10. 高效的字符串格式化增强代码清晰度

如果你的格式字符串是用户提供的,请使用模板字符串以避免安全问题。否则,如果你使用的是Python 3.6+,请使用字面字符串插值;如果不是,请使用“新样式”字符串格式化。

清晰且安全的字符串构建。 Python提供了多种字符串格式化方法,每种方法都有其优点:

  • %-格式化:旧样式,仍然广泛使用
  • str.format():更具可读性和灵活性
  • f-字符串:简洁且强大,适用于Python 3.6+
  • 模板字符串:对用户提供的格式更安全

f-字符串示例:

name = "Alice"
age = 30
print(f"{name} is {age} years old")

用户输入的模板字符串:

from string import Template
user_input = Template("Hello, $name!")
print(user_input.substitute(name="Bob"))

选择适当的字符串格式化方法可以提高代码的可读性、可维护性和安全性,特别是在处理用户提供的数据或复杂的字符串构建时。

Last updated:

评论

4.44 out of 5
Average of 1k+ ratings from Goodreads and Amazon.

《Python Tricks》因其简洁而深刻的中高级Python主题讲解而备受赞誉。读者们欣赏其实用的技巧、清晰的解释以及对最佳实践的关注。许多人发现这本书有助于填补知识空白并提高编码技能。书中的对话式语气和系统化结构使其既易于理解又令人愉快。尽管一些有经验的开发者觉得它的挑战性较低,但大多数人一致认为,这本书是那些希望深入掌握Python并编写更地道代码的人的绝佳资源。

关于作者

Dan Bader 是一位备受尊敬的Python专家和教育家。他以能够清晰、易懂地解释复杂的编程概念而闻名。Bader是Real Python的创始人,这是一个广受欢迎的Python教程和课程在线资源。他在软件开发方面拥有丰富的经验,并曾与谷歌和微软等公司合作。Bader的写作风格因其友好和引人入胜而备受赞誉,使技术内容对学习者来说更加易于接近。他的工作重点是帮助开发者提高Python技能并在编码中采用最佳实践。

0:00
-0:00
1x
Create a free account to unlock:
Bookmarks – save your favorite books
History – revisit books later
Ratings – rate books & see your ratings
Listening – audio summariesListen to the first takeaway of every book for free, upgrade to Pro for unlimited listening.
Unlock unlimited listening
Your first week's on us!
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 5: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Sep 29,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to full summaries
Free users can listen to the first takeaway only
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
15,000+ readers
“...I can 10x the number of books I can read...”
“...exceptionally accurate, engaging, and beautifully presented...”
“...better than any amazon review when I'm making a book-buying decision...”
Save 62%
Yearly
$119.88 $44.99/yr
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.