Python日课-2.3-要不要coding声明

本文是 Python 日课 2021-01-12 的内容整理。

曾老师的 Python 课 第一课的所有内容已经全部发布,包括课程 PPT、课程视频都可以免费获取,可以使用微信扫描下面的二维码进群获取。

请进群索取课程 PPT 以及视频播放地址

这套课程有两条教学线:

  1. 现场教学,约两周一次,每次一小时,主要为实际案例的讲解。
  2. 微信群教学,每日一次,由易到难讲解 Python 知识点,Python 相关的小故事,业界八卦,IT 行业最新信息。

今天 SAGITEAM 的毕老板在公司群里面发了一段 Python 代码:

1# -*- coding: UTF-8 -*-
2
3# Filename : helloworld.py
4# author by : caibi
5
6# 该实例输出嘲讽!
7print('不要这样,我们程序员不喜欢')

然后被程序员吐槽了:特别讨厌这种头部加 UTF-8 的东西。

特别讨厌头部加 UTF-8 的东西

如果大家经常阅读 Python 源码,可能也会看到类似的源码头部声明。那么问题来了:Python 源代码头部类似于 coding: utf-8 这样的声明是否需要呢?

来看看 PEP 263 的内容: https://www.python.org/dev/peps/pep-0263/

在 Python2 中,默认的 Python 源码是使用 ASCII 编码保存的。但 ASCII 编码是不支持中文、日文、韩文字符的。因此我们需要将 Python 源码使用 UTF-8 编码来保存。这可能导致 Python 解密源码的时候出错。

因此, PEP 263 定义了在源码开头加入声明的方式来让 Python 解析器能识别 UTF-8 编码的源文件。

把下面内容放在源码开头就可以了 <encoding name> 代表字符编码。比如 utf-8latin-1

1# coding=<encoding name>

实际上,并不是必须遵循上面的格式,只要遵循下面的正则表达式,Python 就可以识别这行代码。

1^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

但是 Python3 已经默认使用 UTF-8 编码来保存源码,因此在 Python3 中不需要加入编码声明。

详见:PEP 3120 -- Using UTF-8 as the default source encoding :https://www.python.org/dev/peps/pep-3120/

曾老师的 Python 课全部课程使用 Python3 来讲解,而且代码仅支持 Python3,我们不需要这个编码声明。

全文完