Py2学习笔记
一个超级实用的Py2学习网站:https://www.runoob.com/
一、中文编码
- Py2 通过在py文件的第一行或第二行设置: # -- coding: utf-8 -- 或 # coding=utf-8(注意等号两边没有空格)来设置unicode编码,这样Py2程序才能识别中文。
- Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
二、标识符
- 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
- Python 中的标识符是区分大小写的。
- 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
- 以双下划线开头的 __foo 代表类的私有成员
- 以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
- Python 可以同一行显示多条语句,方法是用分号 ; 分开
三、基础语法
- 使用\写多行语句 (注意/是除法呀( ̄︶ ̄)↗ )
- 三引号可以当成多行注释来使用
- 空行也是程序代码的一部分。
- raw_input(“按下 enter 键退出,其他任意键显示…\n”)
- 在 Python 2.x 中,print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 。
- 在 Python 3.x 中,我们可以在 print() 函数中添加 end=“” 参数,这样就可以实现不换行效果。在 Python3 中, print 函数的参数 end 默认值为 “\n”,即end=“\n”,表示换行,给 end 赋值为空, 即end=“”,就不会换行了
- $ python -h 参数查看命令行参数各参数帮助信息
- print语句在打印时会在结尾和每个变量之间加上一个空格
四、变量类型
-
Python2和3都允许同时为多个变量赋值 x, y, z = 1, 2, 3
-
Python有五个标准的数据类型:
Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典) -
Numbers是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。可以使用del语句删除一些对象的引用。
a=1 str=[a] a=2 # 数字类型是不可变数据类型,重新开辟一块内存,把新地址与变量名绑定,并非改变原空间内的值 print (str) 输出结果不是 [2] 是 [1]。
-
Python支持四种不同的数字类型:
int(有符号整型)
long(长整型,也可以代表八进制和十六进制)
float(浮点型)
complex(复数) -
长整型也可以使用小写 l,但是还是建议您使用大写 L,避免与数字 1 混淆。Python使用 L 来显示长整型。
-
long 类型只存在于 Python2.X 版本中,在 2.2 以后的版本中,int 类型数据溢出后会自动转为long类型。在 Python3.X 版本中 long 类型被移除,使用 int 替代。
-
int(x, base=10) 函数用于将一个字符串或数字转换为整型。base – 进制数,默认十进制。
-
Py2的字符串支持切片操作,最后一个字符的下标的-1
-
加号(+)是字符串连接运算符,星号(*)是重复操作
-
切片的第三个参数是步进,默认步进为1,为2就是走两步,中间隔了一个数。
-
使用type()和isinstance(a, int)可以判断数据类型。区别就是:
type()不会认为子类是一种父类类型。所以不推荐使用 type(instance) == class 来判断数据类型
isinstance()会认为子类是一种父类类型。
五、运算符
- Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。
- 但在 Python 3 中,它总是执行真除法。
- Py2 和 Py3 中 // 都是地板除。
- <> 不等于 - 比较两个对象是否不相等。python3 已废弃。(能看懂,但不要使用)
- x**y, 返回x的y次幂
- Py2 和 Py3 中都没有自增运算符
- 注意Py2 和 Py3 的逻辑运算符是:and、or、not
- Py2 和 Py3还支持成员运算符 in、not in
- Python身份运算符,身份运算符用于比较两个对象的存储单元is、is not,x is y, 类似 id(x) == id(y),id() 函数用于获取对象内存地址。
- Python运算符优先级
- 列表的赋值和拷贝
- Python中的常量池
六、条件语句
- for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。
七、 Py2 Number
- print dir(math) 查看math包下的所有函数
八、字符串
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用
九、列表 和 元组
- 列表元素的添加使用:append()
- 删除使用pop() 或 del list[n]
- * 可以重复列表中的元素
十、字典
- dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict。
- 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。(元组可以作为key)
- 删除字典中的条目:del tinydict[‘Name’] # 删除键是’Name’的条目、tinydict.clear() # 清空字典所有条目
- key()、values()、pop(key)
十一、函数
- 不带表达式的return相当于返回 None。
- a=[1,2,3]; a=“Runoob” 在 python 中,类型属于对象,变量是没有类型的:
[1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。 - 不可变类型(Number\strings\tuples)是值传递,可变类型(List\dict)等是引用传递
- 全局变量和局部变量
十二、模块
-
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
-
模块的引入:
- import 语句:当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
- 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
- from…import 语句:Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。
-
搜索路径
-
PYTHONPATH 变量
-
当 .py 文件以模块形式被导入时,if name == 'main’之下的代码块不被运行
十三、命名空间和作用域
- 变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。
- 一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。
- global VarName 的表达式会告诉 Python, VarName 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。
- 例如,我们在全局命名空间里定义一个变量 Money。我们再在函数内给变量 Money 赋值,然后 Python 会假定 Money 是一个局部变量。然而,我们并没有在访问前声明一个局部变量 Money,结果就是会出现一个 UnboundLocalError 的错误。取消 global 语句前的注释符就能解决这个问题。
十四、Python中的包
- 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
- 简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。init.py 用于标识当前文件夹是一个包。
十五、Python I/O
- 读取键盘输入
- raw_input:输入什么就返回什么。
- input 函数和 raw_input 函数基本类似,但是 input 可以接收一个Python表达式作为输入,并将运算结果返回。
- 打开和关闭文件
- open 函数:你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。 file object = open(file_name [, 打开文件的模式][, 缓冲区])
- File对象的属性:
- close()方法:File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
- write()方法:write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。write()方法不会在字符串的结尾添加换行符(‘\n’)
- read()方法:read(n) 从一个打开的文件中读取n个字符。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
十六、Python 异常处理
- 捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
- try的工作原理:
- 使用except而不带任何异常类型:捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。
- 使用except而带多种异常类型:注意是用括号把所有异常扩起来
- try-finally 语句:try-finally 语句无论是否发生异常都将执行最后的代码。
- 异常的参数:
- 触发异常
- 用户自定义异常