Python日课-2.3-要不要coding声明
本文是 Python 日课 2021-01-12 的内容整理。
今天 SAGITEAM 的毕老板在公司群里面发了一段 Python 代码:
1# -*- coding: UTF-8 -*-
2
3# Filename : helloworld.py
4# author by : caibi
5
6# 该实例输出嘲讽!
7print('不要这样,我们程序员不喜欢')
然后被程序员吐槽了:特别讨厌这种头部加 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-8
,latin-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,我们不需要这个编码声明。
全文完
- 文章ID:2740
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/python-daily-coding/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。