Python中一些不为人知的基础技巧总结


Posted in Python onMay 19, 2018

前言

本文主要给大家总结介绍了关于Python的一些基础技巧,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

1.startswith()和endswith()参数可以是元组

当检测字符串开头或结尾时,如果有多个检测值,可以用元组作为startswith()和endswith()参数:

# bad
if image.endswith('.jpg') or image.endswith('.png') or image.endswith('.gif'):
 pass
# good
if image.endswith(('.jpg', '.png', '.gif')):
 pass
# bad
if url.startswith('http:') or url.startswith('https:') or url.startswith('ftp:'):
 pass
# good
if url.startswith(('http:', 'https:', 'ftp:')):
 pass

2.enumerate()设置start参数做为索引起始值

当用enumerate()迭代同时要得到索引时,可以设置start参数作为索引起始值:

# bad
for index, v in enumerate(data):
 print(index+1, v)
# good
for index, v in enumerate(data, start=1):
 print(index, v)

3.对切片命名

当代码中到处都是硬编码的切片索引时,我们的代码将变得无法阅读。可以对切片命名解决此问题:

record = '....................100.................513.25......'
# bad
cost = int(record[20:23]) * float(record[40:46])
# good
SHARES = slice(20, 23)
PRICE = slice(40, 46)
cost = int(record[SHARES]) * float(record[PRICE])

作为一条基本准则,代码中如果有很多硬编码的索引值,将导致可读性合可维护性都不佳。一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。例如:

>>> items = [0, 1, 2, 3, 4, 5, 6]
>>> a = slice(2, 4)
>>> items[2:4]
[2, 3]
>>> items[a]
[2, 3]
>>> items[a] = [-2, -3]
>>> items
[0, 1, -2, -3, 4, 5, 6]
>>> del items[a]
>>> items
[0, 1, 4, 5, 6]
>>>

4.上下文管理器可以同时管理多个资源

假设你要读取一个文件的内容,经过处理以后,写入到另一个文件。你能写出pythonic的代码,所以你使用了上下文管理器,满意地的写出了下面这样的代码:

with open('input.txt', 'r') as source:
 with open('output.txt', 'w') as target:
  target.write(source.read())

你已经做的很好了,但是上下文管理器可以同时管理多个资源,上面这段代码还可以这样写:

with open('input.txt', 'r') as source, open('output.txt', 'w') as target:
  target.write(source.read())

5.else子句

Python中的else子句不仅能在if语句中使用,还能在for、while、和try语句中使用。

在for循环或是while循环正常运行完毕时(而不是通过break语句或是return语句或是异常退出循环),才会运行else块。

举个例子:

>>> for i in range(3):
...  print(i)
... else:
...  print('Iterated over everything')
... 
0
1
2
Iterated over everything
>>>

如上,for循环正常结束,所以运行了后面的else块。

>>> for i in range(3):
...  if i == 2:
...   break
...  print(i)
... else:
...  print('Iterated over everything')
... 
0
1
>>>

由此可以看出,for循环如果没有正常运行完毕(如上面是break结束循环的),是不会运行后面的else块。

仅当try块中没有异常抛出时才运行else块。一开始,你可能觉得没必要在try/except块中使用else子句。毕竟,在下述代码片段中,只有dangerous_call()不抛出异常,after_call()才会执行,对吧?

try:
 dangerous_call()
 after_call()
except OSError:
 log('OSError...')

然而,after_call()不应该放在try块中。为了清晰明确,try块中应该只包括抛出预期异常的语句。因此,向下面这样写更好:

try:
 dangerous_call()
except OSError:
 log('OSError...')
else:
 after_call()

现在很明确,try块防守的是dangerous_call()可能出现的错误,而不是after_call()。而且很明显,只有try块不抛出异常,才会执行after_call()。但要注意一点,else子句抛出的异常不会由前面的except子句处理,也就是说此时after_call()如果抛出异常,将不会被捕获到。

还有更多的python技巧,大家可以参考这篇文章:https://3water.com/article/137695.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python的一些用法分享
Oct 07 Python
python服务器端收发请求的实现代码
Sep 29 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
Python常见字典内建函数用法示例
May 14 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
Python初学者必备的文件读写指南
Jun 23 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
Python编程编写完善的命令行工具
Sep 15 Python
Python + selenium自动化环境搭建的完整步骤
May 19 #Python
pandas中去除指定字符的实例
May 18 #Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 #Python
对pandas replace函数的使用方法小结
May 18 #Python
基于DataFrame筛选数据与loc的用法详解
May 18 #Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 #Python
pandas.loc 选取指定列进行操作的实例
May 18 #Python
You might like
PL-880隐藏功能
2021/03/01 无线电
十天学会php之第五天
2006/10/09 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
PHP获取文件行数的方法
2015/06/10 PHP
PHP7新增函数
2021/03/09 PHP
js比较和逻辑运算符的介绍
2013/03/10 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
J2EE中常用的名词进行解释
2015/11/09 面试题
终止劳动合同协议书
2014/10/05 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
运动会加油稿50字
2015/07/21 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
如何书写邀请函?
2019/06/24 职场文书
python基础之while循环语句的使用
2021/04/20 Python
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
数据设计之权限的实现
2022/08/05 MySQL