Python⽂件头注释的含义
本⽂档描述了Python语⾔⽂件头⾥典型注释的含义。
1. 指定解释器
不管在linux还是在windows下,要运⾏⼀个python⽂件(⽐如hello.py)的⽅式⼀般都是
python ./hello.py
然⽽,有⼀种⽅式可以直接运⾏hello.py⽂件,那就是直接在python⽂件开头指定所使⽤的python解释器。然后就可以直接⽤./hello.py
运⾏了(当然得先chmod +x ./hello.py让这个⽂件有可执⾏权限)。
“在python⽂件开头指定解释器”的⽅式有两种。
1.1. 直接指定解释器路径
#!/usr/bin/python
上⾯这种⽅式,指定了必须⽤/usr/bin/python这个解释器来解释本python⽂件。
当然了,也可以写成
#!/usr/local/python3/bin/python3.4
只要那个路径下有python解释器。
1.2. 指定系统环境变量设定的解释器路径
#!/usr/bin/env python
⽽这种⽅式,指定了使⽤linux环境变量$PATH⾥某个路径下名为python的解释器来解释本python⽂件。
python解释器下载(注意到开头/usr/bin/env是linux⾥读写环境变量的⼀个程序)
如果环境变量$PATH的内容是/usr/bin:/usr/local/bin:/usr/local/python3/bin,那么上⾯的注释就意味着会依序寻这些路径:
1. /usr/bin/python
2. /usr/local/bin/python
3. /usr/local/python3/bin/python
第⼀个存在的路径,就会作为python解释器使⽤。
当然,如果写成这样
#!/usr/bin/env python3
那么查解释器的路径顺序就会变成
1. /usr/bin/python3
2. /usr/local/bin/python3
3. /usr/local/python3/bin/python3
2. 标明本py⽂件的编码类型
前置知识:⽂本⽂件保存在硬盘上时,是需要按照⼀定编码规则来保存的。⽐如GBK、UTF-8、UCS2之类。⽽⽂本编辑器、阅读器、浏览器打开硬盘上的⽂本⽂件时,需要知道这个⽂本⽂件的编码规则。
以下是正⽂——
python⽂件第⼆⾏⼀般是下⾯两种之⼀:
# -*- coding: utf-8 -*-
或者
# coding: utf-8
这⼀⾏的意思是:告诉python解释器,这个⽂件是以UTF-8⽅式编码存储的。其实类似⽂本⽂件开头的BOM。
对于全⽂都是ASCII编码的py⽂件⽽⾔,这⾏注释⼀般没⽤,因为ASCII字符在绝⼤多数编码存储⽅式中都是相同的(除了UCS2这种)。但是,如果代码中出现了明⽂的中⽂、⽇⽂之类⾮ASCII的字符(作为字符串常量或注释),他们在不同编码存储⽅式下,在硬盘上的字节流是不同的。
例如下⾯这段python代码
s = "函数"
在硬盘上保存时会这样
编码字节流
GBK73 20 3D 20 22 BA AF CA FD 22
UTF-873 20 3D 20 22 E5 87 BD E6 95 B0 22
(注意到除了两个汉字,其他字符对应的字节都是⼀样的,⽐如最后那个0x22表⽰最后那个双引号)
如果不告诉Python解释器如何理解这个py⽂件,就会出现乱码。
⽐如,如果py⽂件实际上是以UTF-8⽅式存储的(就是表格第⼆⾏),但python解释器却以GBK编码存储去理解它,那么这段代码会被理解为
s = "鍑芥暟"
那么⽤
print(s)
打印字符串时,就会看到乱码⽂字了。
综上,为了让python解释器在解释py⽂件时能正确理解这个py⽂件⾥的⾮ASCII字符,就需要
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论