19 个Sweet的 Python Syntax Sugar,用于改善您的编码体验
文章目录
- 19 个Sweet的 Python Syntax Sugar,用于改善您的编码体验
-
- 1. 联合运算符Union Operators:合并 Python 字典的最优雅方式
- 2. 类型提示Type Hints:使您的 Python 程序类型安全
- 3. F-Strings:一种 Pythonic 字符串格式化方法
- 4. 使用省略号Ellipsis作为未编写代码的占位符
- 5. Python 中的装饰器Decorators:一种模块化功能和分离关注点的方法
- 6.列表推导式List Comprehension:用一行代码创建一个列表
- 7.用于定义小型匿名函数的 Lambda 函数
- 8.三元条件操作符Ternary Conditional Operators:将 If 和 Else 放进一行代码中
- 9.使用 "枚举Enumerate" 方法优雅地迭代列表Iterate Lists
- 10.上下文管理器Context Manager自动关闭资源
- 11.Python 列表的花式切片技巧Fancy Slicing Tricks
- 12.海象运算符Walrus Operator:表达式内的赋值
- 13.连续比较Continuous Comparisons:一种更自然的方式来编写 If 条件
- 14.Zip 函数:轻松组合多个可迭代对象Multiple Iterables
- 15.直接交换两个变量Swapping Two Variables Directly
- 16.解构赋值技巧Destructuring Assignments Tricks
- 17.用星号拆包可迭代对象Unpacking Iterables
- 18.Any() 和 All() 函数
- 19.数字中的下划线
- 9 个可大幅优化代码的 Python 内置装饰器Built-In Decorators
-
- 1.@lru_cache:通过缓存加快程序运行速度
- 2.@total_ordering:补全缺失的排序方法的类装饰器
- 3.@contextmanager:创建自定义上下文管理器Customized Context Manager
- 4.@property:为 Python 类设置访问器Getters和修改器Setters
- 5.@cached_property:将方法Method的结果缓存为属性Attribute
- 6.@classmethod:在 Python 类中定义类方法
- 7.@staticmethod:在 Python 类中定义静态方法
- 8.@dataclass: 用更少的代码定义特殊类
- 9.@atexit.register:注册在正常程序终止时要执行的函数
使函数正常工作是一回事,使用精确而优雅的代码实现它是另一回事。
正如 Python 的禅宗所提到的,“美丽总比丑陋好”。
像 Python 这样好的编程语言总是会提供适当的语法糖,以帮助开发人员轻松编写优雅的代码。
本文重点介绍了 Python 中的 19 个关键语法糖。掌握的旅程涉及理解和熟练地利用它们。
1. 联合运算符Union Operators:合并 Python 字典的最优雅方式
在 Python 中合并多个字典的方法有很多种,但在 Python 3.9 发布之前,没有一种方法可以被描述为优雅。
例如,我们如何在 Python 3.9 之前合并以下三个字典?
其中一种方法是使用 for 循环:
cities_us = {
'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {
'London': 'UK', 'Birmingham': 'UK'}
cities_jp = {
'Tokyo': 'JP'}
cities = {
}
for city_dict in [cities_us, cities_uk, cities_jp]:
for city, country in city_dict.items():
cities[city] = country
print(cities)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK', 'Tokyo': 'JP'}
它很体面,但远非优雅和 Pythonic。
Python 3.9 引入了联合运算符,这是一种语法糖,使合并任务变得超级简单:
cities_us = {
'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {
'London': 'UK', 'Birmingham': 'UK'}
cities_jp = {
'Tokyo': 'JP'}
cities = cities_us | cities_uk | cities_jp
print(cities)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK', 'Tokyo': 'JP'}
如上面的程序所示,我们可以使用一些管道符号pipe symbols,在这种情况下称为联合运算符union operators,来合并任意数量的 Python 字典。
是否可以通过联合运算符进行就地合并?
cities_us = {
'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {
'London': 'UK', 'Birmingham': 'UK'}
cities_jp = {
'Tokyo': 'JP'}
cities_us |= cities_uk | cities_jp
print(cities_us)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK', 'Tokyo': 'JP'}
当然,只需将联合运算符移动到等号的左侧,如上面的代码所示。
2. 类型提示Type Hints:使您的 Python 程序类型安全
动态类型化Dynamic typing,即在运行时确定变量的类型,是使 Python 灵活方便的关键特性。但是,如果变量类型不正确,也可能导致隐藏的错误和错误。
为了解决这个问题,Python 在 3.5 版本中引入了键入提示功能typing hint feature。它提供了一种在代码中注释变量类型annotate variable types的方法,现代 IDE 可以在开发过程中为开发人员及早发现类型错误。
例如,如果我们将一个变量定义为整数,但将其更改为字符串,如下所示,IDE(在本例中为 PyCharm)将为我们突出显示意外的代码:
除了原始类型之外,还有一些高级类型提示技巧。
例如,在 Python 中使用所有大写字母定义常量是一种常见的约定。
DATABASE = 'MySQL'
但是,这只是一种约定,没有人可以阻止您为这个“常量constant”分配新值。
为了改进它,我们可以使用 Final
类型提示,它指示变量旨在成为常量值,不应重新赋值:
from typing import Final
DATABASE: Final = "MySQL"
如果我们真的更改了“常量constant”,IDE肯定会提醒我们:
3. F-Strings:一种 Pythonic 字符串格式化方法
Python 支持几种不同的字符串格式化技术,例如使用 %
符号的 C 样式格式化、内置 format()
函数和 f-strings。
除非您仍在使用比 Python 3.6 更旧的版本,否则 f-strings 绝对是执行字符串格式的最 Python 方式。因为它们可以用最少的代码完成所有格式化任务,甚至可以在字符串中运行表达式。
from datetime import datetime
today = datetime.today()
print(f"Today is {
today}")
# Today is 2023-12-28 13:43:13.944146
print(f"Today is {
today:%B %d, %Y}")
# Today is December 28, 2023
print(f"Today is {
today:%m-%d-%Y}")
# Today is 12-28-2023
如上面的代码所示,使用 f-strings 只需做两件事:
- 在字符串前添加字母“f”以指示它是 f-string。
- 使用带有变量名称的大括号和字符串 (
{variable_name:format}
) 内的可选格式说明符,以特定格式插值变量的值。
“简单总比复杂好。 f-strings 很好地反映了 Python 禅宗中的这句话。
更重要的是,我们可以直接在 f-string 中执行一个表达式:
from datetime import datetime
print(f"Today is {
datetime.today()}")
# Today is 2023-12-28 13:46:18.905805
4. 使用省略号Ellipsis作为未编写代码的占位符
在 Python 中,我们通常将 pass
关键字作为未编写代码的占位符。但是我们也可以使用省略号来实现此目的。
def write_an_article():
...
class Author:
...
Python 之父 Guido van Rossum 在 Python 中加入了这种语法糖,因为他觉得这种语法糖很可爱。
5. Python 中的装饰器Decorators:一种模块化功能和分离关注点的方法
Python 装饰器的理念是允许开发者在不修改现有对象原始逻辑的情况下为其添加新功能。
我们可以自己定义装饰器。此外,还有许多出色的内置装饰器可供使用。
例如,Python 类中的静态方法static methods并不与实例instance或类class绑定。它们被包含在类中只是因为它们在逻辑上属于这个类。
要定义静态方法,我们只需使用 @staticmethod
装饰器,如下所示:
class Student:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
self.nickname = None
def set_nickname(self, name):
self.nickname = name
@staticmethod
def suitable_age(age):
return 6 <= age <= 70
print(Student.suitable_age(99)) # False
print(Student.suitable_age(27)) # True
print(Student('zhang', 'san').suitable_age(27)