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 15 Python
python使用scrapy解析js示例
Jan 23 Python
初学Python函数的笔记整理
Apr 07 Python
python实现Zabbix-API监控
Sep 17 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
Python基于gevent实现高并发代码实例
May 15 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 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 快速生成 Flash 动画的方法
2007/03/06 PHP
php 常用字符串函数总结
2008/03/15 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php旋转图片90度的方法
2013/11/07 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
php判断目录存在的简单方法
2019/09/26 PHP
Javascript模块模式分析
2008/05/16 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
js继承实现方法详解
2016/12/16 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
Python制作词云的方法
2018/01/03 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Python实现元素等待代码实例
2019/11/11 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
小学数学教研活动总结
2014/07/01 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
民事起诉书范本
2015/05/19 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python