基础篇_001_初识_Python文件内容中头两行的意义

  相信有部分同学上网“欣赏”大佬的代码时,会注意到有些大佬喜欢在前面俩行加上两句注释,很好奇有什么作用,然后就用高中生物实验的研究方法——控制变量法——来研究,但是发现删除后并没有什么改变,所以感觉会有些懵B。但是在这里想跟大家说的是:不用怕,这个很简单,也不是很重要。理由就是:既然是注释,那就表明对于一般的人来说,这两句话是无关紧要的【滑稽】。如果你确实很想知道这是啥、有何作用,那下面我就带领大家拨开这层迷雾!

 

----第一句:Python解释器的路径(只针对Linux操作系统下运行的Python文件) ===》#!/usr/bin/env python

  在Windows操作系统下,这一句写了和没写是一码事;而在Linux操作系统下就不是这样了。

  在Linux操作系统下执行Python文件有两种方法:

  ----与Windows操作系统下一样的:python 文件名.py ===》python就是解释器(这里已经配置好了环境变量,如果没有就必须写出其完整路径)

  ----Linux操作系统下独有的:  ./文件名.py    ===》大家不难发现在这样一条命令行中并没有指定解释器,所以,在文件的最开头要表明Python解释器的地址,这样,文件才能正确的被解释器解释。

 

----第二句:Python解释器解释文件内容所用的编码(只针对于Python2系列)  ===》# -*- coding:utf8 -*-

  这句话的意思就是用utf8的字符编码格式来编码文件内容,避免Python2系列中对中文的不兼容,因为Python2系列中只含有ASCII码编码的字符;需要注意的是:用了这句话之后,并不是保证中文输出不乱码,而是保证当文件内容中含有中文字符的时候,解释器仍能继续解释。

--------------------------------------------------------------------------------------------------------------------------------

补充字符的编码:

----编码的历史与进化

  1. 最开始计算机诞生于美国,所以当时的计算机只编码了英文字母 ===》创建了首个字符编码系统:ASCII码——只有8位,最多只能表示256个字符。

  2. 随着时代的发展,计算机被多个国家所接受,8为编码显然就已经不够人们使用了 ===》于是创建了一种新的编码方式:Unicode,它规定至少要16位,这样才能将世界上所有的字符表示完。

  3. 但是这又出现了一个问题,就是资源浪费 ===》我们先假设在ASCII码中“&”符号的编码是8位编码“0000 0001”,那么在Unicode编码中,由于硬性规定编码字长必须 ≥ 16,所以在Unicode编码中,“&”符号的编码不得不为16为编码“0000 0000 0000 0001”,这样,既然在ASCII码中能用8位列表示,那么何必还要在前面画蛇添足呢? ===》所以产生了现在最为流行的编码方式:UTF-8,它规定:能少就少(就是能用ASCII码表示的就尽量用ASCII码来表示,实在不行就增加位数)。

 

以下内容不完整,勿看↓

----Python2中文的乱码问题(我猜测应该是Python解释器用UTF-8解码字符,但是print()函数用的是ANSI编码:GBK,大家可以用UltraEdit来辅助验证)

首先我们来看一下这两种编码的区别,但是有一点时时刻刻要清楚:他们这2种编码都是对Unicode编码的压缩 ===》

  1. UTF-8:英文是直接使用ASCII码编码,占用一个字节;包含世界上所有的字符,所以中文占用3个字节。

  2. ANSI——GBK:英文是直接使用ASCII码编码,占用一个字节;但是,由于这种编码是专门为中国人设计的,所以中文只需占用2个字节。

所以说,当我们用UTF-8的编码方式去编码一个文件,但是在Windows终端是以默认的编码方式——GBK去打开、显示的时候,显然就会出现乱码。这就是Python2系列用了中文字符串后,再以UTF-8的编码方式去编码文件,最后在终端却以GBK编码规则解码,导致显示乱码的原因。

  但是,各位,为什么Python3系列就行呢,难道是它能改变终端?——答案显然是否定的,还记得让各位时时刻刻要记住的那一点嘛?就是因为他们这两个编码在实质上都是对万国码——Unicode编码的压缩,所以,他们必然可以通过Unicode来搭桥,而Python3系列在内存中做的就这个转换的事:首先大家要清楚一点,在Python3系列中,已经没有了“字符串”这样一种数据类型了,每一个字符都以Unicode编码的方式被替换成了一个个的字节,

  

 

posted @ 2020-02-02 22:37  BNTU  阅读(184)  评论(0)    收藏  举报