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中实现单例模式的三种方法
Apr 08 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
Django web框架使用url path name详解
Apr 29 Python
python3实现猜数字游戏
Dec 07 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Python序列化pickle模块使用详解
Mar 05 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
如何用python批量调整视频声音
Dec 22 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
Python 中的Selenium异常处理实例代码
2018/05/03 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
python函数与方法的区别总结
2019/06/23 Python
python的命名规则知识点总结
2019/10/04 Python
python和c语言哪个更适合初学者
2020/06/22 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
假日旅行社实习自我鉴定
2013/09/24 职场文书
监理员的岗位职责
2013/11/13 职场文书
小车司机岗位职责
2013/11/25 职场文书
小学音乐教学反思
2014/02/05 职场文书
《颐和园》教学反思
2014/02/26 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
Python经常使用的一些内置函数
2022/04/11 Python
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js
mysql sock文件存储了什么信息
2022/07/15 MySQL