Python 核心功能

Python 核心功能


发布日期: 2021-09-07 更新日期: 2021-09-07 编辑:admin 浏览次数: 2422

标签 :

摘要: 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 运算符。

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 [ ]:
 
关注本站微信公众号,回复“u3483”,获取验证码。

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

关注公众号
获取免费资源

  • 1 Python 核心功能
  • 2 Python基础


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org