前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:冰火梦幻 

本文档描述了Python语言文件头里典型注释的含义。

1. 指定解释器

不管在linux还是在windows下,要运行一个python文件(比如hello.py)的方式一般都是

python ./hello.py
  • 1

然而,有一种方式可以直接运行hello.py文件,那就是直接在python文件开头指定所使用的python解释器。然后就可以直接用

./hello.py
  • 1

运行了(当然得先chmod +x ./hello.py让这个文件有可执行权限)。

“在python文件开头指定解释器”的方式有两种。另外如果你python刚学不久,建议可以先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题多跟里面的人交流,进步更快哦!

1.1. 直接指定解释器路径

#!/usr/bin/python
  • 1

上面这种方式,指定了必须用/usr/bin/python这个解释器来解释本python文件。 
当然了,也可以写成

#!/usr/local/python3/bin/python3.4
  • 1

只要那个路径下有python解释器。

1.2. 指定系统环境变量设定的解释器路径

#!/usr/bin/env python
  • 1

而这种方式,指定了使用linux环境变量$PATH里某个路径下名为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

那么查找解释器的路径顺序就会变成 
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 -*-
  • 1

或者

# coding: utf-8
  • 1

这一行的意思是:告诉python解释器,这个文件是以UTF-8方式编码存储的。其实类似文本文件开头的BOM。

对于全文都是ASCII编码的py文件而言,这行注释一般没用,因为ASCII字符在绝大多数编码存储方式中都是相同的(除了UCS2这种)。但是,如果代码中出现了明文的中文、日文之类非ASCII的字符(作为字符串常量或注释),他们在不同编码存储方式下,在硬盘上的字节流是不同的。 
例如下面这段python代码

s = "函数"
  • 1

在硬盘上保存时会这样

编码 字节流
GBK 73 20 3D 20 22 BA AF CA FD 22
UTF-8 73 20 3D 20 22 E5 87 BD E6 95 B0 22

(注意到除了两个汉字,其他字符对应的字节都是一样的,比如最后那个0x22表示最后那个双引号) 
如果不告诉Python解释器如何理解这个py文件,就会出现乱码。 
比如,如果py文件实际上是以UTF-8方式存储的(就是表格第二行),但python解释器却以GBK编码存储去理解它,那么这段代码会被理解为

s = "鍑芥暟"
  • 1

那么用

print(s)
  • 1

打印字符串时,就会看到乱码文字了。 另外如果你python刚学不久,建议可以先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题多跟里面的人交流,进步更快哦!
综上,为了让python解释器在解释py文件时能正确理解这个py文件里的非ASCII字符,就需要

Python文件头注释的含义,你肯定不懂的更多相关文章

  1. pycharm新建py文件时,自动补充文件头注释信息

    步骤: 1.File -->Settings 2.选择 File and Code Templates -> Files -> Python Script 文件头注释信息代码样式: ...

  2. goland 文件头注释

    打开GoLand的setting选项 依次选择Editor,CodeStyle ,File and Code Templates ,Go File 根据自己需要添加即可 /* @Time : ${DA ...

  3. VA中用文件头注释和函数头注释Suggestions

    写C++代码,不能不用VA,这里贴两个我最常用的注释Suggestions. [1.File Header 文件头注释] /*** @file     $FILE_BASE$.$FILE_EXT$* ...

  4. Vim 自动文件头注释与模板定义

    Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...

  5. myeclipse中java文件头注释格式设置

    转载:http://www.blogjava.net/yxhxj2006/archive/2014/01/14/408940.html myeclipse中java文件头注释格式设置  windows ...

  6. 使用korofileheader插件vs code添加文件头注释和函数注释

    korofileheadervs code添加文件头注释和函数注释1.extensions搜索fileheader,安装koroFileHeader2.设置:edit=>perference=& ...

  7. vim创建程序文件自动添加头部注释/自动文件头注释与模板定义

    Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...

  8. IDEA 自定义文件头注释

    什么是 IDEA 自定义文件头注释 IDEA 自定义文件头注释指的是创建 Java 类文件时,IDEA 可以自动设置文件头的注释信息,如下: 如何设置 IDEA 自定义文件头注释 打开 File-&g ...

  9. python文件头的#-*- coding: utf-8 -*- 的作用

    这一句其实是告诉编辑器,我的代码使用的格式是utf-8,如果没有这句编辑器就会自动去识别代码的文件格式,如果发现文件格式不是utf-8,就有可能去将编码格式转换为utf-8,比如本来是gbk的,编辑器 ...

随机推荐

  1. 三石之道之Ansible自动化运维工具部署

    centos6默认python版本为2.6 centos7默认python版本为2.7 ansible需要最低python2.7的支持 总结:centos6要部署ansible工具,需要先升级pyth ...

  2. 2018年航空概论课后作业(PS:部分答案不正确, 综合得分:83.6)

    1 [单选题]航空是指载人或不载人的飞行器在地球____的航行活动. • A.高空• B.大气层内• C.宇宙• D.大气层外我的答案:B 得分: 33.3分 2 [多选题]军用飞机可分为____两大 ...

  3. 领扣(LeetCode)单调数列 个人题解

    如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i]> = ...

  4. Centos7安装redis5.0.7

    1. 安装依赖包 yum install -y gcc gcc-c++ 2. 下载最新版redis安装包并解压安装 cd /usr/local/src wget http://download.red ...

  5. 手摸手带你认识https涉及的知识,并实现https加密解密,加签解签

    目录 http访问流程 https访问流程 证书 加密/解密 加签/验签 Java实现https 拓展 @ 看完整的代码,直接去完整代码实现,看实现完后会遇到的坑,直接去测试过程中的问题,包括经过代理 ...

  6. PHP-会话控制Cookie和Session

    会话控制:就是为了我们在访问页面和页面之间的跳转是,能够识别到你的登录状态,已经你的登录时长等 在php的会话控制当中,涉及到两个概念Cookie和Session Cookie 会话控制 原理:在登录 ...

  7. mybatis精讲(三)--标签及TypeHandler使用

    目录 话引 XML配置标签 概览 properties 子标签property resource 程序注入 settings 别名 TypeHandler 自定义TypeHandler EnumTyp ...

  8. PHP提高SESSION响应速度的方法有哪些

    1.设置多级目录存储SESSION 默认session的存储目录是1级目录,如果用户量比较大,session文件数量就比较大,我们可以设置目录数为2,使用2级目录可以提交查找和存取速度.不过这种方式对 ...

  9. .NET高级特性-Emit(2.2)属性

    关于Emit的博客已经进入第四篇,在读本篇博文之前,我希望读者能先仔细回顾博主之前所编写的关于Emit的博文,从该篇博文开始,我们就可以真正的使用Emit,并把知识转化为实战,我也会把之前的博文链接放 ...

  10. linux 内核版本和发行版本区别

    内核版本:我的理解是,内核是系统的心脏,是linux中最基层的代码.版本号如 Linux version 3.10.0-514.el7.x86_64 查看内核版本可使用.uname -a 或者cat ...