一
#!/usr/bin/python
or
#!/usr/bin/env python
"#!"符号并不是Python 专属,它实际上是类Unix系统中通用的,并且有一个名字叫做“Shebang”。
它的作用是指定将要执行的脚本的解释器,也就是说它规定了接下来的所有代码要由谁来解释。例如,#!/bin/sh 的意思就是用sh shell来执行这个脚本。假如一个脚本连带它的地址叫做path/to/script,而它的第一行写着#!/bin/sh,那么相当于直接在命令行直接输入/bin/sh path/to/script,path/to/script在这里作为/bin/sh 的第一个参数。
Shebang的格式如下:
#!interpreter [optional-arg]
interpreter 是一个绝对地址,指向一个可执行的程序,optional-arg 是一个可选的参数,就如#!/usr/bin/env python中所示,python在这里是env的参数,env在环境变量中寻找名叫python的程序,然后用它来执行某个第一行写了这段代码的程序。另外,"#!"符号后面也可以加空格,不影响它的功能。
显然,#!/usr/bin/env python的写法要比#!/usr/bin/python更有通用性。
除此之外,单独的"#"符号更一般的功能是把整行代码作为注释。在类Unix 系统中,"#!"是个例外,它不被看做注释,而在Windows 系统中没有Shebang 的概念,就算把#和!写在一起,也是会被看成注释。所以在Windows 系统中这行代码其实是没有用的。
二
# -*- coding: utf-8 -*-
这是Python特有的表达方式。类似于Shebang,这段代码前面虽然有注释符号"#",但是却有着特定的功能。它的作用是声明所在的Python文件使用哪种编码方式。
默认的编码方是ASCII码
这个声明需要满足如下正则表达式:
^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)
所以实际上一般见到的那种写法只是为了好看。#coding=utf-8和#encoding:utf-8等等写法也都是可以识别的。
另外,就像"#!"要写在第一行,编码声明也规定要写在第一行(当第一行没有Shebang 时)或第二行。
· 以上规定来自于PEP(Python Enhancement Proposals),PEP 是由Python 社区提议和维护的,可以看作是Python 的编码规范。著名的提案有建议Python编程样式的PEP8。
领取专属 10元无门槛券
私享最新 技术干货