亚欧大陆科学资源管理

Eurasian Continental Scientific Resource Management

Register    |    Login

Python 核心功能

Release time: Nov. 26, 2024, 3:47 p.m.      

Python 核心功能

本书假定读者已经有一定的 Python 基础。在这里对一些书中要用到的,以及比较重要的用法进行一点说明。

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]

Python 中的字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(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 。 如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合!

合并字典

给定一个字典,然后计算它们所有数字值的和。

  1. 使用 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}

  1. 使用 **,函数将参数以字典的形式导入

In [18]:

dict3 ={dict1, dict2} dict3

Out[18]:

{'a': 10, 'b': 8, 'd': 6, 'c': 4}

Python常用模块介绍

本书中会用到以下通用类库,在后面会直接使用,而不会进行说明。这里集中说明一下。

os 模块

OS,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作, 就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小

os模块的常用功能:

  1. 显示当前使用的平台

In [19]:

import os os.name

Out[19]:

'posix'

  1. 显示当前python脚本工作路径

In [20]:

os.getcwd()

Out[20]:

'/home/bk/jubook/book_python/ws_pytools/jubook_pytools/ch10_intro'

  1. 返回指定目录下的所有文件和目录名

In [21]:

os.listdir()

Out[21]:

['1.txt', 'yeah', 'testfile', 'xiaoma.txt', '.ipynb_checkpoints', 'a.txt', 'sec50_essential.ipynb']

  1. 删除一个文件

In [22]:

os.remove('testfile')

  1. 可生成多层递规目录

In [23]:

os.makedirs('dirname/dirname')

  1. 删除单级目录

In [24]:

os.rmdir('dirname/dirname')

  1. 重命名文件

In [25]:

os.rename("dirname","yeah")

  1. 运行shell命令,注意:这里是打开一个新的shell,运行命令,当命令结束后,关闭shell

In [26]:

os.system('cd /usr/local && mkdir aaa.txt')

Out[26]:

256

  1. 显示当前平台下路径分隔符

In [27]:

os.sep

Out[27]:

'/'

  1. 给出当前平台使用的行终止符

In [28]:

os.linesep

Out[28]:

'\n'

  1. 获取系统环境变量

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匹配的子串都替换为repl
  • escape(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。

  • date类,获取今天的日期。datetime.date(year, month, day)

In [33]:

from datetime import * date.today()

Out[33]:

datetime.date(2020, 8, 23)

  • time类,创建时间。datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )

In [34]:

time(23, 46, 10)

Out[34]:

datetime.time(23, 46, 10)

  • datetime类,datetime相当于date和time结合起来。

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之间的随机整数int,结果∈[n, m),n和m必须都是整数,且a>b或者a==b,而a<b将语法错误

In [36]:

import random random.randint(1,100)

Out[36]:

6

  • 生成0,1之间的随机浮点数float,结果∈[0.0, 1,0)

In [37]:

random.random()

Out[37]:

0.3098707281183486

math 模块

Python 的 math 模块提供了一些基本的数学运行功能,例如求弦、求根、求对数等等。

  • 返回圆周率PI的值

In [38]:

import math math.pi

Out[38]:

3.141592653589793

  • 返回loga x(以a为底x的对数,若不写a默认为e)

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 [ ]:

Scientific - Model