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的文件,并且写下如下的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 print("Hello,world!")
然后执行,这时候我的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 -*-,这里就不能修改了: