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中的URLError异常的方法
Apr 30 Python
详解Python的Django框架中的中间件
Jul 24 Python
详解Python核心对象类型字符串
Feb 11 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
对pandas中Series的map函数详解
Jul 25 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
Python守护进程实现过程详解
Feb 10 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python虚拟环境venv用法详解
May 25 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 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删除指定目录的方法
2015/04/03 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
理解Javascript_09_Function与Object
2010/10/16 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python help函数实例用法
2020/12/06 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
存储过程和函数的区别
2013/05/28 面试题
教师查摆问题自查报告
2014/10/11 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
详解nginx location指令
2022/01/18 Servers
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python