Python中一些不为人知的基础技巧总结

 更新时间:2018年05月19日 12:01:29   作者:大师兄  
这篇文章主要给大家总结介绍了Python中一些不为人知的基础技巧,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

本文主要给大家总结介绍了关于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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Python文件和异常处理小结

    Python文件和异常处理小结

    本章详细介绍了Python中的文件操作和异常处理,包括文件的读取和写入、异常的捕获和处理,以及JSON数据的存储和重构代码的最佳实践,通过示例和解释,帮助读者掌握这些关键技能,感兴趣的朋友一起看看吧
    2025-03-03
  • Python入门教程(十一)Python中的运算符

    Python入门教程(十一)Python中的运算符

    这篇文章主要介绍了Python入门教程(十一)Python中的运算符,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • 利用jupyter网页版本进行python函数查询方式

    利用jupyter网页版本进行python函数查询方式

    这篇文章主要介绍了利用jupyter网页版本进行python函数查询方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python 使用BeautifulSoup库的方法

    Python 使用BeautifulSoup库的方法

    BeautifulSoup库用于从HTML或XML文件中提取数据,它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容,本文给大家介绍Python 使用BeautifulSoup库的方法,感兴趣的朋友一起看看吧
    2023-10-10
  • Python NumPy实用函数笔记之allclose

    Python NumPy实用函数笔记之allclose

    这篇文章主要给大家介绍了关于Python NumPy实用函数笔记之allclose的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • 使用Flask-Cache缓存实现给Flask提速的方法详解

    使用Flask-Cache缓存实现给Flask提速的方法详解

    这篇文章主要介绍了使用Flask-Cache缓存实现给Flask提速的方法,结合实例形式详细分析了Flask-Cache的安装、配置及缓存使用相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • python使用双竖线分割的实现

    python使用双竖线分割的实现

    本文主要介绍了python使用双竖线分割的实现,通过接收用户输入的字符串,使用split()方法进行分割,并将结果输出给用户,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • python定向爬取淘宝商品价格

    python定向爬取淘宝商品价格

    这篇文章主要为大家详细介绍了python定向爬取淘宝商品价格,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 基于Python实现人机PK小游戏

    基于Python实现人机PK小游戏

    这篇文章主要为大家详细介绍了如何基于Python实现人机PK小游戏,简单来说,就是随机生成玩家和敌人的属性,同时互相攻击,直至一方血量小于零,感兴趣的小伙伴可以学习一下
    2023-06-06
  • python处理json字符串(使用json.loads而不是eval())

    python处理json字符串(使用json.loads而不是eval())

    eval 跟json.loads 是不一样的函数,是有实现不一样功能的地方,但是在某些地方它们两个函数的功能是一样的,本文就详细介绍一下
    2021-09-09

最新评论