又有几个Python小技巧分享
云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!
今天这篇文章为大家带来几个Python使用的小技巧:
- 快速生成依赖文件
- 文件路径处理
- 通过set将对象去重
- 单元测试unitest捕获异常
快速生成依赖文件
Python通过requirements.txt来管理项目所依赖的库,通过pip install -r requirements.txt命令可以直接安装项目所需要的依赖文件。
常见的requirements.txt生成方法由两种
- 原生pip工具pip freeze > requirements.txt,这种方法会将当前环境中所安装的库全部导出,即使你在项目中没有使用,只是之前实验时安装的依赖库。
- 第三方工具pipreqs requirements.txt --encoding=utf-8,该工具使用前需要安装pip install pipreqs,pipreqs的优点它会扫描项目的依赖,只导出使用的依赖;pipreqs还可以指定扫描目录pipreqs ./ --encoding=utf-8。
文件路径处理
Python中常见的文件路径处理方式是通过os.path进行处理。
1In[2]: import os
2# 获取当前目录的绝对路径
3In[3]: os.path.abspath('./')
4Out[3]: 'D:\\Work\\CommonTools'
5# 进行路径拼接
6In[4]: os.path.join(os.path.abspath('./'),'new_file.py')
7Out[4]: 'D:\\Work\\CommonTools\\new_file.py'
8# 获取父目录
9In[5]: os.path.abspath(os.path.dirname(os.getcwd()))
10Out[5]: 'D:\\Work'
11# 获取文件后缀名
12In[6]: os.path.splitext('new_file.py')[-1]
13Out[6]: '.py'
os.path处理文件路径时,比较复杂、难用,因此可以使用pathlib替代os.path。
1In[2]: import pathlib
2# 获取当前目录的绝对路径
3In[3]: path = pathlib.Path('./')
4In[4]: path=path.absolute()
5In[5]: path.as_posix()
6Out[5]: 'D:/Work/CommonTools'
7# 进行路径拼接
8In[6]: file_path = path / 'new_file.py'
9In[7]: file_path.as_posix()
10Out[7]: 'D:/Work/CommonTools/new_file.py'
11# 获取父目录
12In[8]: path.parent
13Out[8]: WindowsPath('D:/Work')
14# 获取文件后缀名
15In[9]: file_path.suffix
16Out[9]: '.py'
17# 列出当前目录下的py文件
18In[13]: list(path.glob('*.py'))
19Out[13]: [WindowsPath('D:/Work/CommonTools/tools.py')]
更多os.pah库和pathlib库的方法对照,请查看官方文档。
通过set将对象去重
通过set将对象去重要求对象必须实现三个方法:
- eq:判断两个对象是否相等。
- ne:判断两个对象是否不等。
- hash:生成对象的hash值。
set内部可以视作为字典,以对象的hash值作为键,通过hash来判断对象是否重复。但是hash值可能出现冲突,因此还需在hash值相同时,对比两个对象是否相等,这也是为什么需要实现这三个方法的原因。
1In[2]: class Person(object):
2 ...: def __init__(self, name, age):
3 ...: self._name = name
4 ...: self._age = age
5 ...:
6 ...: def __eq__(self, other):
7 ...: if isinstance(other, Person):
8 ...: return (self._name == other._name) and (self._age == other._age)
9 ...: else:
10 ...: return False
11 ...:
12 ...: def __ne__(self, other):
13 ...: return not self.__eq__(other)
14 ...:
15 ...: def __hash__(self):
16 ...: return hash(self._name + str(self._age))
17 ...:
18 ...: def __repr__(self):
19 ...: return f'{self._name}:{self._age}'
20 ...:
21In[3]: p1 = Person('martin', 24)
22 ...:p2 = Person('martin', 24)
23In[4]: set([p1, p2])
24Out[4]: {martin:24}
25In[5]: p2 = Person('martin', 25)
26In[6]: set([p1, p2])
27Out[6]: {martin:24, martin:25}
单元测试unitest捕获异常
单元测试unitest中提供了两个方法用于捕获异常,判断异常信息是否符合预期:
- assertRaises():只支持指定异常判断。
- assertRaisesRegex(异常类型,异常信息正则表达式,测试方法,参数):支持匹配异常信息。
1import unittest
2
3def divide_exactly(a, b):
4 return a // b
5
6class MyTestCase(unittest.TestCase):
7 def test_division(self):
8 self.assertEqual(divide_exactly(6, 6), 1)
9
10 # 捕获指定异常
11 self.assertRaises(ZeroDivisionError, divide_exactly, 5, 0)
12 # 可以作为上下文管理器使用
13 with self.assertRaises(ZeroDivisionError):
14 divide_exactly(5, 0)
15
16 # 捕获指定异常
17 self.assertRaisesRegex(ZeroDivisionError, 'integer division or modulo by zero', divide_exactly, 5, 0)
18 # 可以作为上下文管理器使用
19 with self.assertRaisesRegex(ZeroDivisionError, 'integer division or modulo by zero'):
20 divide_exactly(5, 0)
21
22
23if __name__ == '__main__':
24 unittest.main()
云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!
原文发布时间:2020-02-11
本文作者:有只猪在飞
本文来自:“简说Python公众号”,了解相关信息可以关注“简说Python”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
学了这么久,你知道Python是如何运作的吗?
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 作为一名机器学习工程师,我使用Python已经一年多了。 最近出于兴趣,我也开始学习C ++。接触C++后,才意识到Python是多么容易和直观。我对Python与其他语言的不同之处及其工作机制愈加好奇。于是,本文诞生。 本篇文章将尝试讨论Python的内部工作机制。 Python最初是Guido Van Rossum在业余时开发的一个项目,于1991年首次发布。作为一门通用语言,Python为Netflix和Instagram等许多公司提供了强大支持。在一次采访中,Guido将Python与Java/Swift等语言进行了比较,他表示Java/Swift对于日常工作即是编程的软件开发人员是一个不错的选择,而Python针对的目标用户是日常工作与软件开发无关的人,他们编写代码主要是为了处理数据。 在阅读有关Python的文章时,经常会遇到诸如“编译型vs解释型”、“字节码vs机器码”、“动态类型vs静态类型”、“垃圾回收站”等词语。维...
-
下一篇
第一代中国手机厂商是怎么经历非典疫情的?
新型冠状病毒肺炎疫情对工作和生活的影响,每个人都有目共睹。为了控制疫情扩散避免人群聚集,民众减少了出行频率,公共交通和公共场合的频次和开放时间也明显减少,大多数企业也都延后开工。 作为中国商业环境中的一环,手机市场也无法避免被波及的命运。无论是苹果、小米等各厂商的线下门店宣布暂停营业,还是供应链上的工厂生产能力损失,或是原本计划召开的新品发布会全部变成线上直播,中国手机行业发生了实打实的变化。 受到影响的不仅仅是中国手机市场,调研机构Strategy Analytics在日前发表预测,中国手机第一季度出货量将有30%以上下滑,全年出货量比预期减少5%,而与中国产业链紧密相关的全球手机市场也会减少2%。 本次疫情中,不少经历过非典的企业都做出了较为积极的举动,以求平稳度过。2003年非典疫情期间,手机行业也不例外和各行各业一样都遭受影响,因此我们有必要对过往进行一番回顾,看看哪些观点和动作在今天也拥有价值。 非典期间手机销售下滑,但通信时长增加 非典疫情在中国爆发的时间主要集中在2003年上半年,确切来说是2月到6月,也就是前两个季度。这个时间段一直是手机以及整个通信行业发布新品,定下全...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL数据库在高并发下的优化方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19