# Python 增强提案

Python Enhancement Proposals (opens new window)(PEPs)是 Python 社区用于提出、讨论和记录 Python 语言改进和新特性的一种正式化文档。

PEPs 的类型主要包括:

  • 标准跟踪 PEP(Standards Track PEPs):这些提案涉及对 Python 语言本身的变更、标准库的变更或者新的标准。
  • 信息性 PEP(Informational PEPs):这些提案提供一般性指导或者信息,但不提出新的特性或功能。
  • 流程 PEP(Process PEPs):这些提案描述 Python 社区的流程、决策过程和其他运营方面的事务。

# 定义源代码编码

PEP 263 (opens new window) 建议引入一种语法来声明 Python 源文件的编码。默认情况下,Python 源码文件的编码是 UTF-8。如果不使用默认编码,则要声明文件的编码,文件的第一行要写成特殊注释。

# -*- coding: encoding -*-

其中,encoding 可以是 Python 支持的任意一种 codecs (opens new window)

比如,声明使用 utf8 编码。

# -*- coding: utf8 -*-

第一行的规则也有一种例外情况,源码以 UNIX Shebang (opens new window) 开头。此时,编码声明要写在文件的第二行。

#!/usr/bin/env python3
# -*- coding: utf8 -*-

# 导入多行模块

PEP 328 (opens new window) 实现了更优雅的从一个模块或包中导入多个标识符。

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END)

# 类型提示

PEP 484 (opens new window) 实现了类型提示。

函数参数中的冒号,是参数的类型建议符,告诉程序员希望传入的实参的类型。

def func(a: int, b: int):
    print(a + b)

func(1, 2)

函数后面的箭头,是函数返回值的类型建议符,用来说明该函数返回的值是什么类型。

def func(a, b) -> int:
    return a + b

func(1, 2)

# 数字字面量下划线

PEP 515 (opens new window) 提议扩展 Python 的语法和 number-from-string 构造函数,以便下划线可以用作视觉分隔符,用于整数、浮点和复数文字中的数字分组目的。

以千为单位对十进制数进行分组。

amount = 10_000_000.0

按单词对十六进制地址进行分组。

addr = 0xCAFE_F00D

在二进制文字中将位分组为半字节。

flags = 0b_0011_1111_0100_1110
flags = int('0b_1111_0000', 2)