Python每日一题:标准库
时间:2022-07-23
本文章向大家介绍Python每日一题:标准库,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:你使用过哪些 Python 的标准库?
答案要点:
1. 在 Python 中我们经常听到 模块、包、库、标准库、第三方库 这些概念,首先要对这些概念进行区分
- 模块:在 Python 中一个 .py 文件就是一个模块,我们也可以自定义模块
- 包:将一系列相关的 .py 文件打包,包目录下必须有一个 init__.py文件。可以嵌套子目录,子目录里也必须有 __init.py 文件
- 库:一些 .py 文件的集合。这也是 Python 的一大特色之一
- 标准库:Python 安装好后自带的模块。Python 的一个显著特点是具有庞大的模块标准库,这些模块可以帮助我们方便地执行很多的任务。
- 第三方库:由第三方机构自行研发的库
- 其实都是模块的意思,只是单个与集合的区别
2. 比如 dict.setdefault() 赋默认值。示例如下:
days_dict = {'Mon':1, 'Tues':2, 'Wed':3, 'Thur':4, 'Fri':5, 'Sat':6, 'Sun':7}
# 给一个 key 赋默认值,会返回当前 key 对应的 value
other_day = days_dict.setdefault('Others', 0)
print(other_day) # 0
# 如果当前 key 已经有对应的值,是不会影响的,同时返回值也是原来 dict 中的值
tues = days_dict.setdefault('Tues', 10)
print(tues) # 2 not 10
3. 比如 collections 模块中的 defaultdict() ,用于新建一个带默认值的 dict。它接受一个参数,这个参数必须是一个函数。可以使用函数 int()、list()、或者 dict() 来返回对应默认的值。int() 返回 0 ,list() 返回空列表,dict() 返回空字典。当然也可以自定义函数。示例如下:
from collections import defaultdict
# s = defaultdict('a')
# 如果指定一个具体的值,是会报错的
# first argument must be callable or None
# 从报错信息,必须是 callable ,表示要能通过 xx() 访问,所以是一个函数名
# 使用 Python 自带的函数(示例源自文档)
s = 'mississippi'
d = defaultdict(int) # 代表初始默认值是 0
for k in s:
d[k] += 1 # 如果没有默认值,则直接 +=1 是会报错的
sorted(d.items()) # [('i', 4), ('m', 1), ('p', 2), ('s', 4)]
# 自定义函数(示例代码源自《Python语言及其应用》)
def no_idea():
return 'Huh?'
bestiary = defaultdict(no_idea)
destiary['A'] = 'Abominable'
print(destiary['A']) # Abominable
print(destiary['B']) # Huh?
4. 比如 collections 中的 OrderedDict。有序字典,个人觉得这个很好用。示例请看第二篇文章。
5. 比如 collections 中的 namedtuple(),具名元组。它用于创建一个 tuple-like 的对象。它不仅有正常的 tuple 该有的功能,同时它还支持通过里面的key来访问值。可以简单理解为它是一个带 key 的元组。这个比较常用。定义及示例如下:
# 定义
# collections.namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
"""
第一个参数,接受一个 String 类型,表示定义的元组的类型。这里需要注意它和返回值的区别。
该方法返回的是 typename 类型的一个元组,返回值可以和 typename 不一致,返回值是用来定义一个 typename 类型的名称。
第二个参数,接受用空格或者字符串间隔元素的字符串,它表示元组里的 key 值。也可以是一个字符串的序列,比如列表,元组等
这里需要注意的是,除了以下划线开头的名称外,任何有效的 Python 标识符都可以用于 filedname,不能是关键字
第三个参数 verbose 已经过时,表示定义完就返回定义信息
第四个参数 rename,如果为 True,会自动过滤掉不合规定的 fieldname
第五个参数 module,如果为 True,表示 __module__ 会返回该值
"""
from collections import namedtuple
# 如果 filedname 里有不符合要求的字符串并且 rename 不为 True 时
# Test = namedtuple('Test1', ['def', 'a', 'a', '_abc'])
# 上述语句会报错
# 当有非法 filedname 时,rename 必须为 True
Test = namedtuple('Test1', ['def', 'a', 'a', '_abc'], rename=True)
print(Test) # __main__.Test1 表示了返回值与 typename 的区别
t1 = Test(1, 2, 3 ,4)
print(t1) # Test1(_0=1, a=2, _2=3, _3=4)
# 可以看到,非法字符都自动作了转换
print(t1[0]) # 可以通过下标访问
print(t1.a) # 可以通过 key 访问
扩展:
对于 dict,当使用 dict['key'] 时,当 key 不存在,会报错,而用 dict.get('key') 时则不会。同时我们也可以使用setdefault 和 defaultdict 来解决这个问题
PS:这里只举了几个简单的常用的标准模块,后面如果还有机会,会再进行总结。
愿关注我们的人都能找到
属于自己的皮球
- 自适应页面高度
- 用CSS制作可交换带事件处理的图片按钮
- tomcat相关配置技巧梳理
- 用Layer.search快速查询图元
- Ado.Net连接池的速度测试
- Excel小账本使用说明
- Enterprise Library 4.1学习笔记8----缓存应用程序块之FileDependency
- CSS实现按钮的两张图片的同步出现
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(6)--在线调整虚拟机的大小
- 关于vb中的容器
- 关于vb中的容器
- Mysql数据库之Binlog日志使用总结
- 揭秘新人机大战柯洁对手天壤 AI排名已力压Deepzen
- 一路走到java工程师,java都快出java9了,到底该如何学java?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go语言函数间传递数组的问题
- Kubernetes v1.8 对 GPU 的支持
- 【教程】checkra1n越狱教程+常用插件推荐
- 【教程】抓取网页内视频的五种方法
- 了解 Anaconda
- 【实用】教你识别下载“全家桶”
- 【iOS】修改checkra1n+chimera环境(chimera1n)
- 在 istio 中限制 namespace 访问外部资源
- 【iOS】浅析近期越狱工具+“平刷”工具
- XGBoost Operator源码分析
- 【杂货】制作checkra1n启动盘思路
- 【iOS】chimera13指日可待,libhooker基板独立啦
- 类加载器之URLClassLoader
- 【iOS】较全的合并flex补丁教程
- R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题