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实现的简单抽奖系统实例
May 22 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
python如何求解两数的最大公约数
Sep 27 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
在Python中表示一个对象的方法
Jun 25 Python
通过python检测字符串的字母
Feb 18 Python
Django ValuesQuerySet转json方式
Mar 16 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
用python批量下载apk
Dec 29 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
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
关于JSON与JSONP简单总结
2016/08/16 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
小程序转发探索示例
2019/02/19 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
python读写LMDB文件的方法
2018/07/02 Python
Python for循环中的陷阱详解
2018/07/13 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
python基于event实现线程间通信控制
2020/01/13 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
信访工作者先进事迹
2014/01/17 职场文书
2014新年寄语
2014/01/20 职场文书
运动会的口号
2014/06/09 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
作文批改评语
2014/12/25 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS