Python学习笔记1(变量,字符编码)

跟着老男孩教育Alex的视频学习Python,写博客记录自己的学习过程,记录所讲授的知识点。  

此篇微博直接从学习一个程序的仪式感“Hello word”开始写起,例如Python的介绍、发展史、Python2和3的区别、安装、优缺点等,将不会在此记录。

这是我第一次编写博客,不管是内容总结还是外观形式都肯定会有所欠缺。不过这博客主要是给自己记录学习过程的,如果想自学的话,在此推荐给你Alex金角大王和Eric银角大王的微博。

金角大王传送门:http://www.cnblogs.com/alex3714

银角大王传送门:http://www.cnblogs.com/wupeiqi

1.Hello word程序

在PyCharm里创建一个hello.py的文件,并且写下如下的代码:

1 print("Hello,world!")
hello word

 然后执行,这时候我的Python的程序就有了生命,就开启了新的冒险之旅。

2.变量

变量定义的规则

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字
  • 以下关键字不能声明为变量名
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

变量赋值

Python变量赋值不需要声明类型。

等号(=)左边为变量名,右边是存储在变量中的值,例如:

1 school = "zgcm"

 这时就声明了一个变量,变量名为school,且变量school的值为zgcm。使用school时,school将会指向zgcm的内存地址,找到zgcm这个值。因此,声明变量之后再使用school时,其实就是在使用zgcm(先不考虑作用域的存在)。

多个变量赋值

1 a = b = c = 1
2 x , y , z = 1 , 1.1 , 'zifuchuan'

第一行代码,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。

第二行代码,创建整型对象1赋值给变量名x,浮点型对象1.1赋值给变量名y,字符串对象赋值给变量名z。

其他类型的赋值

1 str = "this is string 1"                         #字符串赋值
2 list = ['this', 'is', 'list', 2]                 #列表赋值
3 tuple = ('this', 'is', 'tuple', 3)               #元组赋值
4 dict = {1:'this', 2:'is', 3:'dictionary', 4:4}   #字典赋值

 赋值内容替换

1 name1 =  "zhangyan"
2 name2 = name1
3 print(name1,name2)
4 name1 = "zy"
5 print(name1,name2)

 上述代码输出的结果为:

zhangyan zhangyan
zy             zhangyan

1.zhangyan赋值给nama1,name1存储的是zhangyan的内存地址。

2.name1又赋值给了name2,其实是把zhangyan的内存地址给了name2(相当于name1给name2指了一下路,让name2找到了zhangyan)。

3.因此第三行print输出的时候name1和name2都为zhangyan。

4.再将zy赋值给name1的时候,name1里存储的就变成了zy的内存地址,而不再指向zhangyan。此时name2无变化,指向的还是zhangyan的内存地址。

5.因此第五行输出的name1为zy,name2为zhangyan。 

3.字符编码

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

关于中文

为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。
注:此处说的的是最少2个字节,可能更多

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

前面我们已经学会了如何用 Python 输出 "Hello, world!",英文没有问题,但是如果你输出中文字符"你好,世界"就有可能会碰到中文编码问题。

Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了。

1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3  
4 print("你好,世界");

注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。

注意:如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似以下错误信息:

SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0:
invalid continuation byte

Pycharm 设置步骤:

但是,如果你文件已经指定了编码 # -*- coding: UTF-8 -*-,这里就不能修改了:

posted @ 2017-08-16 12:42  爱锁屏  阅读(271)  评论(0编辑  收藏  举报