最近在浏览学(huang)习(tu)文章的时候看到一篇不错的Python技巧文章,将其翻译成中文来记录学习一下。
原文链接地址:An A-Z of useful Python tricks
all or any
在进行可迭代对象逻辑判断的时候,使用all
或者any
将很简单:
1 | In [1]: x = [True, True, False] |
bashplotlib
如果你想在命令行绘制图形,可以使用这个库
1 | pip install bashplotlib |
使用参考文章: Python的命令行画图
collections
有时候默认的数据类型不能很好的满足我们的需求,我们可以使用collections
模块提供的一些接口来实现
1 | In [5]: from collections import OrderedDict, Counter |
dir
如果我们想查看一个Python对象有哪些属性,可以使用dir
。
1 | dir() |
emoji
表情符号
1 | pip install emoji |
我们尝试一下
1 | In [1]: from emoji import emojize |
from __future__
import
如果你的版本是比较旧的版本,而想使用新版本的特性,则可以使用__future__
模块。
1 | from __future__ import print_function |
geopy
使用geopy
我们可以操作一些地理位置问题
1 | pip install geopy |
它的工作原理是抽象出一系列不同地理编码服务的API。它使您能够获得一个地方的完整街道地址,纬度,经度,甚至高度。
还有一个有用的距离类。它计算您喜欢的测量单位中两个位置之间的距离。
1 | from geopy import GoogleV3 |
这里我一直报错,待后面实际用到细究。
参考阅读文章:geopy地理查询库使用详解
howdoi
遇到编码问题而忘记了之前看到过的解决方案?需要检查StackOverflow,但不想离开终端?
可以尝试下: howdoi
1 | pip install howdoi |
有什么问题,它会尽力回答
1 | $ howdoi vertical align css |
请注意 - 它从StackOverflow的顶级答案中查找代码。它可能并不总是提供最有用的信息……
inspect
Python的检查模块非常适合理解幕后发生的事情。你甚至可以自己调用它的方法!
下面的代码示例inspect.getsource()
用于打印自己的源代码。它还inspect.getmodule()
用于打印定义它的模块。
最后一行代码打印出自己的行号。
最后一行代码打印出自己的行号。
1 | import inspect |
然,除了这些微不足道的用途之外,检查模块对于理解代码的作用非常有用。您也可以使用它来编写自我记录代码。
Jedi
Jedi库是一个自动完成和代码分析库。它使编写代码更快,更高效。
\kwargs**
这个想必大家都熟悉,用于参数传递。
字典对象前面的双星号允许您将该字典的内容作为命名参数传递给函数。
字典的键是参数名称,值是传递给函数的值。甚至我们都可以不用使用kwargs
命名。
1 | dictionary = {"a": 1, "b": 2} |
当您想要编写可以处理未预先定义的命名参数的函数时,这非常有用。
List comprehensions
列表生成式是作为掌握列表的必备技能。
1 | numbers = [1,2,3,4,5,6,7] |
map
这个函数内置函数,结合匿名函数很有方便性。
1 | In [5]: x = [1, 2, 3] |
返回的是一个 map 对象 可以将其转换为某个可迭代对象,例如list或tuple。使用一次之后将不再存在。
newspaper3k
没用过。。。
如果你还没有看过它,那么请准备好让你的思绪被Python的报纸模块所震撼。
它允许您从一系列领先的国际出版物中检索新闻文章和相关的元数据。您可以检索图像,文本和作者姓名。
它甚至还有一些内置的NLP功能。
因此,如果你想在下一个项目中使用BeautifulSoup或其他DIY网页抓图库,那就省去时间和精力
$ pip install newspaper3k
Operator overloading
运算符重载就是我们之前说过的一些魔法函数的使用
Python提供了对运算符重载的支持,这是使你听起来像一个合法的计算机科学的术语之一。
这实际上是一个简单的概念。曾经想知道为什么Python允许你使用+
运算符来添加数字以及连接字符串?这是运算符在执行中的重载。
您可以按照自己的特定方式定义使用Python标准运算符符号的对象。这使您可以在与您正在使用的对象相关的上下文中使用它们。
1 | In [14]: class Thing: |
我们未重载加法,因此最后一个会报错。
pprint
相比使用print
使用pprint
打印输出的结果将更加美观
1 | In [21]: import requests |
Queue
Python的队列讲真还是很少使用,以后要多考虑了
Python支持多线程,标准库的队列模块为此提供了便利。
此模块允许您实现队列数据结构。这些是允许您根据特定规则添加和检索条目的数据结构。
‘先进先出’(或FIFO)队列允许您按照添加的顺序检索对象。“后进先出”(LIFO)队列允许您首先访问最近添加的对象。
最后,优先级队列允许您根据对象的排序顺序检索对象。
推荐阅读文章: 简析Python中的四种队列
__repr__
在Python中定义类或对象时,提供一种将该对象表示为字符串的“官方”方法很有用。例如:
1 | In [26]: class someClass: |
sh
Python是一种很棒的脚本语言。有时使用标准的操作系统和子进程库可能会让人头疼。
该SH库提供了一个整洁的替代品。
它允许您将任何程序称为普通函数 - 对于自动化工作流和任务非常有用,所有这些都来自Python。
1 | import sh |
Type hints
Python是一种动态类型语言。定义变量,函数,类等时,不需要指定数据类型。
这允许快速开发时间。但是,有一些事情比简单的键入问题导致的运行时错误更令人讨厌。
从Python 3.5开始,您可以选择在定义函数时提供类型提示。
1 | def addTwo(x : Int) -> Int: |
您还可以定义类型别名:
1 | from typing import List |
虽然不是强制性的,但类型注释可以使您的代码更容易理解。
它们还允许您使用类型检查工具在运行时捕获那些杂散的TypeErrors。如果您正在开展大型复杂项目,那可能是值得的!
uuid
生成通用唯一ID(或“UUID”)的快捷方法是通过Python标准库的uuid模块。
1 | In [34]: import uuid |
Virtual environments
使用虚拟环境可以在同一台计算机上运行独立版本的Python安装
1 | python -m venv my-project |
wikipedia
维基百科有一个很棒的API,允许用户以编程方式访问无与伦比的完全免费的知识和信息。
在维基百科模块 查询信息十分方便。
1 | In [37]: import wikipedia |
xkcd
人生苦短,我用Python。
1 | import antigravity |
YAML
YAML代表’ YAML Is Not Markup Language ‘。它是一种数据格式化语言,是JSON的超集。
与JSON不同,它可以存储更复杂的对象并引用它自己的元素。您还可以编写注释,使其特别适合编写配置文件。
使用 PyYAML module 可以在Python中使用YAML。
1 | pip install pyyaml |
PyYAML允许您存储任何数据类型的Python对象,以及任何用户定义类的实例。
zip
从两个列表中形成字典
1 | In [46]: keys = ['a','b','c'] |
该zip()
内置函数需要一系列可迭代的对象,并返回一个元组列表。每个元组按位置索引对输入对象的元素进行分组。
我们还可以进行解压
1 | In [63]: zipped = zip(keys, vals) |