摘要: Python 核心功能¶ 本书假定读者已经有一定的 Python 基础。在这里对一些书中要用到的,以及比较重要的用法进行一点说明。 Python中的序列¶在Python中,最基本的数据结构是序列(sequence)。序列中的每个...
Python 核心功能¶
本书假定读者已经有一定的 Python 基础。在这里对一些书中要用到的,以及比较重要的用法进行一点说明。
Python中的序列¶
在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是 0,第二个则是 1,以此类推。序列中的最后一个元素标记为 -1
,倒数第二个元素为 -2
,依次类推。
Python包含 6 中内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。本文重点讨论列表和元组,列表和元组的主要区别在于,列表可以修改,元组则不能。
所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing
)、分片(sliceing
)、加(adding
)、乘(multiplying
)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
序列中的所有元素都是有编号的——从 0 开始递增。这些元素可以通过编号分别访问,如下:
两种相同类型的序列才能进行连接操作。
序列操作方法¶
为了检查一个值是否在序列中,可以使用 in 运算符。
permissions = 'rw'
'w' in permissions
'x' in permissions
序列去重
:不管顺序的去重转为set即可。
for 循环里,同时引用了两个变量,在 Python 里是很常见的; 如果要显示[(1,2),(2,3),(3,4)]怎么实现迭代显示?
列表生成式
列表生成式,其实就是生成列表的一种方式,是python内置的;
返回1-10平方的一个列表;
[ i*i for i in range(10) ]
对列表的每个元素执行某个函数操作;
有时我们会需要初始化一个嵌套着几个列表的列表,最好的选择是使用列表推导.
列表推导写法¶
board = [['_'] * 3 for i in range(3)]
board
使用 for...if
语句,返回1-10之间所有的偶数:
[ i*i for i in range(1,10) if i%2==0]
返回1-10之间所有的质数,判断质数的函数是自定义的;
[ i for i in range(1,10) if i % 2 == 0]
Python 中的字典¶
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value
)对用冒号(:
)分割,每个对之间用逗号(,
)分割,整个字典包括在花括号({}
)中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典的增、删、改¶
创建字典
xiaoming = {
"name":"xiaoming",
"Age":17
}
xiaoming["name"]
如果Key不存在会报错,一种好的处理方法是使用 get()
函数:
xiaoming.get('name', None)
如果Key存在,会修改新增键值对
xiaoming["Age"]=18
如果Key不存在,会修改已经存在的键值对
xiaoming["Gender"]=True
删除。为了避免出现异常,可以传递参数:
xiaoming.pop("name", None)
xiaoming
字典的遍历循环¶
for循环内部使用的key的变量”in字典
for k in xiaoming:
print("%s: %s" % (k, xiaoming[k]))
字典的键映射多个值¶
将下面的列表转成字典
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]
一个字典就是一个键对应一个单值的映射,而上面的列表中有相同键。如果你想要一个键映射多个值,那么就需要将这多个值放到另外的序列中,比如 list 或者 set 里面,像下面这样:
d = {
'a': [1, 2, 3],
'b': [4, 5]
}
e = {
'a': {1, 2, 3},
'b': {4, 5}
}
你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值。
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]
from collections import defaultdict
d = defaultdict(list)
for key, value in l:
d[key].append(value)
d
当然这个默认的容器不一定是 list, 也可以是集合 set。根据自己的需求选择用 list 还是 set 。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合!
dict1 = {'a': 10, 'b': 8}
dict2 = {'d': 6, 'c': 4}
dict2 合并了 dict1
dict2.update(dict1)
dict2
- 使用
**
,函数将参数以字典的形式导入
dict3 ={**dict1, **dict2}
dict3
Python常用模块介绍¶
本书中会用到以下通用类库,在后面会直接使用,而不会进行说明。这里集中说明一下。
os
模块¶
OS,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小
os模块的常用功能:
- 显示当前使用的平台
import os
os.name
- 显示当前python脚本工作路径
os.getcwd()
- 返回指定目录下的所有文件和目录名
os.listdir()
- 删除一个文件
os.remove('testfile')
- 可生成多层递规目录
os.makedirs('dirname/dirname')
- 删除单级目录
os.rmdir('dirname/dirname')
- 重命名文件
os.rename("dirname","yeah")
- 运行shell命令,注意:这里是打开一个新的shell,运行命令,当命令结束后,关闭shell
os.system('cd /usr/local && mkdir aaa.txt')
- 显示当前平台下路径分隔符
os.sep
- 给出当前平台使用的行终止符
os.linesep
- 获取系统环境变量
os.environ
os.path
模块包含很多与路径相关的操作,在后面会展开说明。
sys
模块¶
Python中的sys模块是一个用来处理Python运行时环境的模块,它提供了许多函数和变量来处理Python运行时环境的不同部分。
以下是sys模块的常见函数列表:
sys.argv
: 实现从程序外部向程序传递参数。sys.exit([arg])
: 程序中间的退出,arg=0
为正常退出。sys.getdefaultencoding()
: 获取系统当前编码,一般默认为ascii。sys.setdefaultencoding()
: 设置系统默认编码,执行dir(sys)
时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys)
,在执行setdefaultencoding('utf8')
,此时将系统默认编码设置为utf-8
。(见设置系统默认编码 )sys.getfilesystemencoding()
: 获取文件系统使用编码方式,Windows下返回'mbcs
',mac下返回'utf-8
'.sys.path
: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。sys.platform
: 获取当前系统平台。sys.stdin,sys.stdout,sys.stderr: stdin , stdout
, 以及stderr
变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备(device
), 或者以非标准的方式处理它们
以上就是python sys模块是什么的详细内容,更多请关注php中文网其它相关文章!
re
模块¶
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
模块re中一些重要的函数
compile(pattern[, flags])
根据包含正则表达式的字符串创建模式对象search(pattern, string[, flags])
在字符串中查找模式match(pattern, string[, flags])
在字符串开头匹配模式split(pattern, string[, maxsplit=0])
根据模式来分割字符串findall(pattern, string)
返回一个列表,其中包含字符串中所有与模式匹配的子串sub(pat, repl, string[, count=0])
将字符串中与模式pat匹配的子串都替换为replescape(string)
对字符串中所有的正则表达式特殊字符都进行转义
import time
time.time()
struct_time
时间元组,共有九个元素组。
time.localtime()
format time
格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
time.strftime("%Y-%m-%d %X")
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
- date类,获取今天的日期。
datetime.date(year, month, day)
from datetime import *
date.today()
- time类,创建时间。
datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )
time(23, 46, 10)
- datetime类,datetime相当于date和time结合起来。
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
返回一个表示当前本地时间的datetime对象
datetime.now()
random
模块¶
随机模块,可以生成随机数字,或者根据要求从序列中选择生成随机字符串。
- 生成n,m之间的随机整数int,结果
∈[n, m)
,n和m必须都是整数,且a>b
或者a==b
,而a<b
将语法错误
import random
random.randint(1,100)
- 生成0,1之间的随机浮点数float,结果
∈[0.0, 1,0)
random.random()
import math
math.pi
- 返回loga x(以a为底x的对数,若不写a默认为e)
math.log(2,5)
pprint
模块¶
Python中使用pprint函数进行格式化输出的
pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图。格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅读。输出尽可能放在一行上,分解为多行时则需要缩进。
data = [(1,{'a':'A','b':'B','c':'C','d':'D'}),
(2,{'e':'E','f':'F','g':'G','h':'H',
'i':'I','j':'J','k':'K','l':'L'
}),]
print(data)
from pprint import pprint
pprint(data)
异常处理¶
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
try/except
语法¶
捕捉异常可以使用try/except
语句。try/except
语句用来检测try
语句块中的错误,从而让except
语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try
里捕获它。
语法:
以下为简单的try....except...else的语法:
try:<语句>
先运行try
语句,如果try
部份引发了'name'异常,则运行except
的语句。
except <name>:<语句>
如果引发了'name'异常,获得附加的数据。
except <name>,<数据>:<语句>
也可以不带任何异常类型使用except
,它将捕获所有的异常。
except:<语句>
也可以使用相同的except语句来处理多个异常信息。
except(Exception1[, Exception2[,...ExceptionN]]]):
如果没有异常发生则运行else
语句。
else:<语句>
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
如果在 try
子句执行时没有发生异常,Python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print ("Error: 没有找到文件或读取文件失败")
else:
print ("内容写入文件成功")
fh.close()

在微信里搜索“开源集思”或微信扫描上方二维码关注微信公众号。