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列出目录下指定文件与子目录的方法
Jul 03 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
Python正则表达式和元字符详解
Nov 29 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
pymysql的简单封装代码实例
Jan 08 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
python实现拼图小游戏
Feb 22 Python
Python如何安装第三方模块
May 28 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
初识laravel5
2015/03/02 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
python删除列表内容
2015/08/04 Python
Python使用爬虫猜密码
2016/02/19 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
自我评价200字分享
2013/12/17 职场文书
名人演讲稿范文
2013/12/28 职场文书
电大本科自我鉴定
2014/02/05 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
公司捐书倡议书
2015/04/27 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
师范生小学见习总结
2015/06/23 职场文书
高老头读书笔记
2015/06/30 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
python中数组和列表的简单实例
2022/03/25 Python