Python常用语法看这些就够了(下篇)
九、Python 模块(Module)
模块是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的 Python 代码段。
1.import语句引入模块
导入方式:import 模块名
在使用模块内的函数时,需要使用 模块名.函数名 的方式调用
例:
一个模块只会被引入一次,不管执行了多少次的import,这样可以防止导入模块一遍又一遍的执行。
2.from...import语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。
3.from...import*
把一个模块的所有内容全都导入到当前的命名空间。然而这种声明不该被过多地使用。
4.命名空间和作用域
一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。
如果要给函数内的全局变量赋值,必须使用 global 语句。
5.dir()函数
dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。
例:输出math模块定义好的所有模块。
6.globals()和locals()函数
根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。
如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。
两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。
7.Python的包
和模块差不多,就是引入一个写好的.py文件
十、Python输入与输出
1.输出方式:
表达式语句、print()函数和使用文件对象的write()方法
2.输出形式:
格式化输出str.format()函数、转成字符串可以使用repr()或str()函数来实现
(1)repr():产生一个解释器易读的表达形式,便于字符串的拼接。
例:输出平方与立方的表
for x in range(1,11): print(repr(x).rjust(2),repr(x*x).rjust(3),repr(x*x*x).rjust(4))
注意:在这个例子中, 每列间的空格由 print() 添加【自动添加】。
除了rjust()还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。
另一个方法 zfill(), 它会在数字的左边填充 0。
(2)str():函数返回一个用户易读的表达形式。
(3)format()方法输出
例1:用format()方式输出平方与立方表
for x in range(1,11): print('{0:2d} {1:3d} {2:4d}'.format(x,x*x,x*x*x))
例2:拼接字符串
注意:如果使用了关键字参数,只能通过指定关键字来调用参数
二者可以结合使用(是参数对应的调用,不是胡乱调用)
(4)旧式字符串格式化
% 操作符也可以实现字符串格式化。 它将左边的参数作为类似 sprintf() 式的格式化字符串, 而将右边的代入, 然后返回格式化后的字符串. 例如:
注意:
%”和字母之间插进数字表示最大场宽。
%4.2f表示输出场宽为4的浮点数,其中小数位为2,整数位为1。(其中小数点占1位,如果是5.2则最左边一位用空格填充)
3.读取键盘输入
例:
4.读和写文件
open() 将会返回一个 file 对象 open(filename,mode) # filename:访问的文件名称 # mode:决定了打开文件的模式:只读,写入,追加等。默认文件打开方式是只读 r
模式
|
r
|
r+
|
w
|
w+
|
a
|
a+
|
读
|
+
|
+
|
|
+
|
|
+
|
写
|
|
+
|
+
|
+
|
+
|
+
|
创建
|
|
|
+
|
+
|
+
|
+
|
覆盖
|
|
|
+
|
+
|
|
|
指针在开始
|
+
|
+
|
+
|
+
|
|
|
指针在结尾
|
|
|
|
|
+
|
+
|
例:将字符串写入一个文件中
我们可以看出,写入文件是不会即时写入的,会在文件对象关闭后才会写入
write方法:如果写入的不是字符串形式,需要先把那个对象转化为字符串写入
在这里可以调用fileobj.flush()函数,直接把内部缓冲区的数据立刻写入文件,而不是被打的等待输出缓冲区的写入。
5.文件对象方法(假设已经创建了一个文件对象 f )
方法
|
解释
|
f.read()
|
为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。当不指定参数size时,会把所有的内容都读取出来并返回。
|
f.readline()
|
会从文件中读取单独的一行, 如果返回一个空字符串, 说明已经已经读取到最后一行。
|
f.readlines()
|
1.f.readlines() 将返回该文件中包含的所有行。
sizehint参数, 可以指定每次读取一定长度的字节, 并且将这些字节按行分割。
2.也可以采用遍历的方式:(但是这种方式不好控制输出)
|
f.write(string)
|
将 string 写入到文件中, 然后返回写入的字符数。 如果要写入一些不是字符串的东西, 那么将需要先进行转换。
|
f.tell()
|
返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
|
f.seek()
|
改变文件当前的位置。
|
f.close()
|
当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源。
|
6.pickle模块(这个没怎么用,具体用到可以再详细查资料)
python的pickle模块实现了基本的数据序列和反序列化。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
十一、Python OS文件/目录方法
系统级别的目录和文件操作,详细看下面的网址:
十二、Python异常处理
1.异常
运行期检测到的错误被称为异常。
大多数的异常都不会被程序处理,都以错误信息的形式展现在这里。
2.异常处理
因为input目标是接受一个数字,但是输入不符,所以或报异常,在except处捕获异常并输出提示信息。
3.抛出异常
Python 使用 raise 语句抛出一个指定的异常
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
4.用户自定义异常
当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类。
异常类继承自 Exception 类,可以直接继承,或者间接继承。
例如:
十三、Python面向对象
1.首先理解类和对象的概念和内涵(这个是面向对象编程思想的核心)
下面假设思想已经学会,我们只需要看一下具体的语法细节就好:
2.类的定义
class ClassName: statement1 statement2 ...... statementN
3.类的方法:
支持属性引用(.的方式)和实例化(实例化一个对象ClassName() )
(1)构造方法:
__init__(),在类的实例化的时候回自动调用。
这里提一句,析构方法是__del__()用于释放对象。
(2)一般方法
当然,__init__()方法也可以有参数,通过参数可以给实例化对象的属性赋值,也可以给这个对象赋属性。
例:
class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart x = Complex(3.0, -4.5) print(x.r, x.i) # 输出结果:3.0 -4.5
self代表类的实例,而非类。 self 代表的是类的实例,代表当前对象的地址
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self,其他名称也可以。
使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数
例:
4.类的继承与多继承
(1)继承
class DerivedClassName(BaseClassName1): statement1 statement2 ...... statementN
例:
父类的构造函数可以直接拿来使用
(2)多继承: 有限的支持多继承形式。
class DerivedClassName(BC1,,BC2,BC3): statement1 statement2 ...... statementN
需要注意圆括号中父类的顺序,若是多个父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
(3)方法的重写
在继承父类后,可以重写父类的方法,以实现子类的需求
上面的父子例子已经演示了。
5.类的私有属性与方法
(1)类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。
类的内部方法使用时self.__private_attrs。
(2)类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。
6.类的专有方法、重载运算符
(1)一些常用的专有方法
方法名
|
解释
|
方法名
|
解释
|
__init__
|
构造函数,在生成对象时调用
|
__del__
|
析构函数,释放对象时使用
|
__repr__
|
打印,转换
|
__setitem__
|
按照索引赋值 |
__getitem__
|
按照索引获取值
|
__add(sub、mul、truediv)__
|
加减乘除运算
|
(2)重载运算符
例:重载加法运算符,用于处理向量的加法
十四、Python命名空间和作用域
1.命名空间:一般有三种:内置名称、全局名称、局部名称
Python 的查找顺序为:局部的命名空间 -> 全局命名空间 -> 内置命名空间。
2.作用域
十五、Python标准库
这里只列出一些标准库,库里面函数可以用到的时候去查。
库
|
说明
|
使用方式
|
操作系统接口
|
对系统进行操作
|
import os
|
文件通配符
|
从目录通配符搜索中生成文件列表
|
import glob
|
命令行参数
|
通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。可以查看参数
|
import sys
|
字符串正则匹配(比较重要)
|
re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案
|
import re
|
数学
|
提供了一些数学方法
|
import math
|
数据压缩
|
支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile
|
import zlib
|
日期时间
|
datetime模块为日期和时间处理同时提供了简单和复杂的方法
|
from datetime import date
|
性能度量
|
解决同一问题的不同方法之间的性能有差异,Python 提供了一个度量工具。
|
from timeit import Timer
|
测试模块
|
在开发过程中经常进行测试
|
import doctest
doctest.testmod()
#自动验证嵌入测试
|