Python中一些不为人知的基础技巧总结
作者:大师兄 发布时间:2023-07-19 21:59:42
前言
本文主要给大家总结介绍了关于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://www.jb51.net/article/137695.htm
来源:http://www.revotu.com/python-some-common-tricks.html#more


猜你喜欢
- 介绍本文中探索三个流行的 Python 图像增强库。图像分类器通常在训练更多的图像时表现得更好。在图像分类模型中,一个常见的问题是,模型不能
- Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍p
- 实体有五种预定义的XML实体,HTML编码者应该熟悉。XML文档中的字符&、<、>、"和'被分别表示为
- <body oncontextmenu = "return false"> <body onconte
- Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节。因此会导致带有表情的昵称插入数据库时出错。只要修改MySQ
- 本篇的主题是 rbac权限控制的详细操作步骤,注意是操作步骤哦,关于配置与rbac的搭建,我们在yii2搭建完美后台并实现rbac权限控制实
- 本文研究的主要是python模块之paramiko的相关用法,具体实现代码如下,一起来看看。paramiko模块提供了ssh及sft进行远程
- 本文实例讲述了Python过滤列表用法。分享给大家供大家参考,具体如下:过滤列表[mapping-expression for elemen
- 概述在数据库当中,索引就跟树的目录一样用来加快数据的查找速度,对于一个SQL查询操作,根据索引快速过滤掉不符合要求的数据并定位到符合要求的数
- 方法一:<span style="font-size:14px;">#read txt method one
- 代码如下:arr = array(12,52,14,43,24,58,15,64,24,57,17,56,45)&nbs
- logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。其主
- 本文实例讲述了Python实现统计给定字符串中重复模式最高子串功能。分享给大家供大家参考,具体如下:给定一个字符串,如何得到其中重复模式最高
- 0.前言回调函数是一种在编程中常见的技术,通常在异步编程中使用。简单来说,回调函数是一个被传递给另一个函数的函数,它在该函数的某个时间点被调
- MySQL内外连接表的连接分为内连接和外连接。内连接内连接内连接的SQL如下:SELECT ... FROM t1 INNER JOIN t
- /r的用法与end=""用法 \r 表示将光标的位置回退到本行的开头位置end="" 意思
- 一、背景分析对想要在视觉化环境下制作复杂网页的专业网页制作者来说,Dreamweaver已经渐渐在网页编辑工具中展露头角,成为专业人士编写网
- 一、将对象转为json字符串json.dumps:将 Python 对象编码成 JSON 字符串json.loads:将已编码的 JSON
- 本文实例讲述了Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下:golang处理压缩包,最常用的就是tar.g
- 先给大家介绍php in array函数基本知识热热身。定义和用法in_array() 函数在数组中搜索给定的值。语法in_array(va