Python文件头注释的含义,你肯定不懂
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:冰火梦幻
本文档描述了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文件头注释的含义,你肯定不懂的更多相关文章
- pycharm新建py文件时,自动补充文件头注释信息
步骤: 1.File -->Settings 2.选择 File and Code Templates -> Files -> Python Script 文件头注释信息代码样式: ...
- goland 文件头注释
打开GoLand的setting选项 依次选择Editor,CodeStyle ,File and Code Templates ,Go File 根据自己需要添加即可 /* @Time : ${DA ...
- VA中用文件头注释和函数头注释Suggestions
写C++代码,不能不用VA,这里贴两个我最常用的注释Suggestions. [1.File Header 文件头注释] /*** @file $FILE_BASE$.$FILE_EXT$* ...
- Vim 自动文件头注释与模板定义
Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...
- myeclipse中java文件头注释格式设置
转载:http://www.blogjava.net/yxhxj2006/archive/2014/01/14/408940.html myeclipse中java文件头注释格式设置 windows ...
- 使用korofileheader插件vs code添加文件头注释和函数注释
korofileheadervs code添加文件头注释和函数注释1.extensions搜索fileheader,安装koroFileHeader2.设置:edit=>perference=& ...
- vim创建程序文件自动添加头部注释/自动文件头注释与模板定义
Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...
- IDEA 自定义文件头注释
什么是 IDEA 自定义文件头注释 IDEA 自定义文件头注释指的是创建 Java 类文件时,IDEA 可以自动设置文件头的注释信息,如下: 如何设置 IDEA 自定义文件头注释 打开 File-&g ...
- python文件头的#-*- coding: utf-8 -*- 的作用
这一句其实是告诉编辑器,我的代码使用的格式是utf-8,如果没有这句编辑器就会自动去识别代码的文件格式,如果发现文件格式不是utf-8,就有可能去将编码格式转换为utf-8,比如本来是gbk的,编辑器 ...
随机推荐
- Linux(ubuntu)下切换root用户
输入命令su root切换用户,会提示输入root密码,如果不记得或者是没设置过,那么可以输入sudo passwd root来设置密码,会让你输入两次密码确认.输入完即可使用su root命令切换r ...
- tornado的使用-数据库篇
tornado的使用-数据库篇
- 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)
一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...
- lqb 基础练习 字母图形 (循环)
基础练习 字母图形 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBAB ...
- 发送大数据时,PDU的问题?
昨天发现通过 Ice发送请求传递一个大块数据时,当请求的体积大于1.2M后,直接抛出异常Connection Lost,对方peer或是断开了.通过防火墙配置排查,以及对同一网络同一机器的php服务p ...
- HTML建立超链接
链接是HTML文档的最基本特征之一.超文本链接英文名为hyperlink,它能够让浏览器在各个独立的页面之间方便地跳转.超链接有外部链接.电子邮件链接.锚点链接等. a标签 网页中<a& ...
- windows版的mysql主从复制环境搭建
背景 最近在学习用Spring Aop来实现数据库读写分离的功能. 在编写代码之前,首先是要部署好mysql的环境,因为要实现读写分离,所以至少需要部署两个mysql实例,一主一从,并且主从实例之间能 ...
- flex一些属性
// 改变主轴的方向 flex-direction: column; // display:flex的子元素无法设置宽度 // 子元素有个flex-shrink属性,表示在父元素宽度不够的情况下是否自 ...
- 标准库flag和cobra
package main import "flag" var b bool var q *bool func init(){ var b bool //方式一 flag.Type( ...
- LXC容器文件系统设计优化
在HOST上面,一个LXC container包含一个config文件和一个rootfs目录. 早期我们在交叉编译系统上编译出container的rootfs之后,直接在编译系统上将其用tar压缩打包 ...