Release time: Aug. 20, 2024, 10:53 a.m.
本书假定读者已经有一定的 Python 基础。在这里对一些书中要用到的,以及比较重要的用法进行一点说明。
在Python中,最基本的数据结构是序列(sequence)。 序列中的每个元素被分配一个序号——即元素的位置,也称为索引。 第一个索引是 0,第二个则是
1,以此类推。序列中的最后一个元素标记为 -1
,倒数第二个元素为 -2
,依次类推。
Python包含 6 中内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。 本文重点讨论列表和元组,列表和元组的主要区别在于,列表可以修改,元组则不能。
所有序列类型都可以进行某些特定的操作。
这些操作包括:索引(indexing
)、分片(sliceing
)、加(adding
)、乘(multiplying
)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
序列中的所有元素都是有编号的——从 0 开始递增。这些元素可以通过编号分别访问,如下:
两种相同类型的序列才能进行连接操作。
为了检查一个值是否在序列中,可以使用 in 运算符。
In [1]:
permissions = 'rw' 'w' in permissions
Out[1]:
True
In [2]:
'x' in permissions
Out[2]:
False
序列去重
:不管顺序的去重转为set即可。
for 循环里,同时引用了两个变量,在 Python 里是很常见的; 如果要显示[(1,2),(2,3),(3,4)]怎么实现迭代显示?
列表生成式
列表生成式,其实就是生成列表的一种方式,是python内置的;
返回1-10平方的一个列表;
In [3]:
[ i*i for i in range(10) ]
Out[3]:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
对列表的每个元素执行某个函数操作;
有时我们会需要初始化一个嵌套着几个列表的列表,最好的选择是使用列表推导.
In [4]:
board = [['_'] * 3 for i in range(3)] board
Out[4]:
[['', '', ''], ['', '', ''], ['', '', '_']]
使用 for...if
语句,返回1-10之间所有的偶数:
In [5]:
[ i*i for i in range(1,10) if i%2==0]
Out[5]:
[4, 16, 36, 64]
返回1-10之间所有的质数,判断质数的函数是自定义的;
In [6]:
[ i for i in range(1,10) if i % 2 == 0]
Out[6]:
[2, 4, 6, 8]
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value
)对用冒号(:
)分割,每个对之间用逗号(,
)分割, 整个字典包括在花括号({}
)中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
创建字典
In [7]:
xiaoming = { "name":"xiaoming", "Age":17 } xiaoming["name"]
Out[7]:
'xiaoming'
如果Key不存在会报错,一种好的处理方法是使用 get()
函数:
In [8]:
xiaoming.get('name', None)
Out[8]:
'xiaoming'
如果Key存在,会修改新增键值对
In [9]:
xiaoming["Age"]=18
如果Key不存在,会修改已经存在的键值对
In [10]:
xiaoming["Gender"]=True
删除。为了避免出现异常,可以传递参数:
In [11]:
xiaoming.pop("name", None) xiaoming
Out[11]:
{'Age': 18, 'Gender': True}
for循环内部使用的key的变量”in字典
In [12]:
for k in xiaoming: print("%s: %s" % (k, xiaoming[k]))
Age: 18 Gender: True
将下面的列表转成字典
In [13]:
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]
一个字典就是一个键对应一个单值的映射,而上面的列表中有相同键。 如果你想要一个键映射多个值,那么就需要将这多个值放到另外的序列中,比如 list 或者 set 里面,像下面这样:
In [14]:
d = { 'a': [1, 2, 3], 'b': [4, 5] } e = { 'a': {1, 2, 3}, 'b': {4, 5} }
你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。 defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值。
In [15]:
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
Out[15]:
defaultdict(list, {'a': [2, 1, 3, 1], 'b': [3, 4, 3]})
当然这个默认的容器不一定是 list, 也可以是集合 set。根据自己的需求选择用 list 还是 set 。 如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合!
给定一个字典,然后计算它们所有数字值的和。
update()
方法,第二个参数合并第一个参数In [16]:
dict1 = {'a': 10, 'b': 8} dict2 = {'d': 6, 'c': 4}
dict2 合并了 dict1
In [17]:
dict2.update(dict1)
dict2
Out[17]:
{'d': 6, 'c': 4, 'a': 10, 'b': 8}
**
,函数将参数以字典的形式导入In [18]:
dict3 ={dict1, dict2} dict3
Out[18]:
{'a': 10, 'b': 8, 'd': 6, 'c': 4}
本书中会用到以下通用类库,在后面会直接使用,而不会进行说明。这里集中说明一下。
os
模块OS,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作, 就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小
os模块的常用功能:
In [19]:
import os os.name
Out[19]:
'posix'
In [20]:
os.getcwd()
Out[20]:
'/home/bk/jubook/book_python/ws_pytools/jubook_pytools/ch10_intro'
In [21]:
os.listdir()
Out[21]:
['1.txt', 'yeah', 'testfile', 'xiaoma.txt', '.ipynb_checkpoints', 'a.txt', 'sec50_essential.ipynb']
In [22]:
os.remove('testfile')
In [23]:
os.makedirs('dirname/dirname')
In [24]:
os.rmdir('dirname/dirname')
In [25]:
os.rename("dirname","yeah")
In [26]:
os.system('cd /usr/local && mkdir aaa.txt')
Out[26]:
256
In [27]:
os.sep
Out[27]:
'/'
In [28]:
os.linesep
Out[28]:
'\n'
In [29]:
os.environ
Out[29]:
environ({'LANG': 'en_US.UTF-8', 'LC_ALL': 'en_US.UTF-8', 'SUPERVISOR_SERVER_URL': 'unix:///var/run/supervisor.sock', 'USER': 'bk', 'JOURNAL_STREAM': '9:14319', 'SUPERVISOR_ENABLED': '1', 'SUPERVISOR_PROCESS_NAME': 'jubk', 'SUPERVISOR_GROUP_NAME': 'jubk', 'HOME': '/home/bk', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'INVOCATION_ID': '3104728a9ee248ee97d3072e3327c8b1', 'JPY_PARENT_PID': '765', 'TERM': 'xterm-color', 'CLICOLOR': '1', 'PAGER': 'cat', 'GIT_PAGER': 'cat', 'MPLBACKEND': 'module://ipykernel.pylab.backend_inline'})
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)
对字符串中所有的正则表达式特殊字符都进行转义datetime
,time
模块time模块中时间表现的格式主要有三种:
timestamp
时间戳,时间戳表示的是从1970年1月1日00:00:00
开始按秒计算的偏移量In [30]:
import time time.time()
Out[30]:
1598188833.2456446
struct_time
时间元组,共有九个元素组。In [31]:
time.localtime()
Out[31]:
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=23, tm_hour=21, tm_min=20, tm_sec=33, tm_wday=6, tm_yday=236, tm_isdst=0)
format time
格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。In [32]:
time.strftime("%Y-%m-%d %X")
Out[32]:
'2020-08-23 21:20:33'
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
datetime.date(year, month, day)
In [33]:
from datetime import * date.today()
Out[33]:
datetime.date(2020, 8, 23)
datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )
In [34]:
time(23, 46, 10)
Out[34]:
datetime.time(23, 46, 10)
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ ,
microsecond[ , tzinfo] ] ] ] ] )
返回一个表示当前本地时间的datetime对象
In [35]:
datetime.now()
Out[35]:
datetime.datetime(2020, 8, 23, 21, 20, 33, 264151)
random
模块随机模块,可以生成随机数字,或者根据要求从序列中选择生成随机字符串。
∈[n, m)
,n和m必须都是整数,且a>b
或者a==b
,而a<b
将语法错误In [36]:
import random random.randint(1,100)
Out[36]:
6
∈[0.0, 1,0)
In [37]:
random.random()
Out[37]:
0.3098707281183486
math
模块Python 的 math
模块提供了一些基本的数学运行功能,例如求弦、求根、求对数等等。
In [38]:
import math math.pi
Out[38]:
3.141592653589793
In [39]:
math.log(2,5)
Out[39]:
0.43067655807339306
pprint
模块Python中使用pprint函数进行格式化输出的
pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图。 格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅读。 输出尽可能放在一行上,分解为多行时则需要缩进。
In [40]:
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)
[(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'})]
In [41]:
from pprint import 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'})]
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在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语句。
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:
In [42]:
try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError: print ("Error: 没有找到文件或读取文件失败") else: print ("内容写入文件成功") fh.close()
内容写入文件成功
In [ ]: