python是世界上最流行的编程语言之一。
这有许多原因:
容易学习
可跨平台
拥有大量的模块和库
我把使用Python作为数据科学家日常工作的一部分。一路上,我学会了一些有用的技巧和要点。
在这里,我尝试以A - Z格式分享其中的一些。这些“技巧”大部分是我在日常工作中使用或偶然发现的。我在浏览Python标准库文档时发现了一些。另一些是我在搜索PyPi时发现的。
然而,值得称赞的是其中的四五个是我在awesome-python.com发现的。这是数百个有趣的Python工具和模块的精选列表。值得浏览寻找灵感!
all or any
python之所以如此受欢迎的原因之一是因为它可读性和表现力强。人们经常开玩笑说Python是“可执行伪代码”。但是,当你可以编写这样的代码时,很难用其他方式反驳:
bashplotlib
你想在控制台中绘制图表吗?
你就可以在控制台中画出图表了。
collections
python有一些很好的默认数据类型,但有时它们表现的不如你期望的哪样。幸运的是,Python标准库提供了collections模块。这个方便的附加组件为您提供了更多的数据类型。
dir
你有没有想过如何在Python对象内部查看它的属性?这当然可以。看看下面这条命令行:
当以交互方式运行Python时,这可能是一个非常有用的功能,可以动态地查看您正在使用的对象和模块。
emoji
是的,这是真的!
不要假装你不想去尝试......
from __future__ import
Python的流行导致是总是有新版本在开发中。新版本意味着新功能——除非你的版本已经过时。
然而,不要害怕。__future__模块允许你从Python的未来的版本导入功能。这简直就像时间旅行,或者魔法什么的。
为什么不开始导入花括号?
geopy
地理可能是程序员难以挑战的领域,时常让人找不清方向。但是geopy模块让这变得异常简单。
它通过抽取一系列不同的地理编码服务APIs来工作。使你能够获得一个地方的完整街道地址、纬度、经度和海拔。还有一个有用的distance类。以你喜欢的单位计算两个位置之间的距离。
howdoi
遇到编码问题,但不记得你以前见过的解决方案了?需要检索StackOverflow,但不想离开终端?
那么你需要这个有用的命令行工具。
无论你有什么问题,都要问它,它会尽最大努力回答你的问题
但是请注意——它从StackOverflow的置顶答案中抓取代码。因此可能不总是提供最有用的信息...
inspect
python的inspect模块非常有助于理解幕后发生的事情。你甚至可以用它调用它自己的方法!
下面的代码示例使用inspect.getsource输出它自己的源代码。它还使用inspect.getmodule输出由它定义的模块。
最后一行代码打印出自己的行号。
当然,除了这些琐碎的用途之外,inspect模块对于理解代码正在做什么可能会很有用。你也可以用它来编写自我记录的代码。
Jedi
Jedi库是一个自动补全和代码分析库。它使编写代码更快、更有成效。
除非你正在开发自己的IDE,否则你可能会对使用Jedi作为编辑器插件最感兴趣。幸运的是,这已经成为现实了!然而,你可能已经在使用Jedi。IPython项目正利用Jedi的代码自动补全功能。
**kwargs
学习任何语言时,都会有许多里程碑。对于Python来说,理解神秘的**kwargs语法可能算一个。
字典对象前面的双星号允许您将该字典的内容作为命名参数传递给函数。
字典的键是参数名,值是传递给函数的值。你甚至不需要用kwargs命名字典!、
当您想要编写能够处理事先未定义的命名参数的函数时,这很有用。
List comprehensions
关于Python编程,我最喜欢的事情之一是它的列表生成。
这些表达式使得容易编写非常干净的代码,读起来几乎像自然语言。
你可以在这里阅读更多关于如何使用它们的信息。
map
python通过许多内置特性支持功能编程。map函数是最有用的函数之一——特别是与lambda函数结合使用。
在上面的例子中,map将一个简单的lambda函数应用于x中的每个元素。它返回一个map对象,该对象可以转换为一些可迭代的对象,如列表或元组。
newspaper3k
如果你还没有见过它,那么准备好让Python的newspaper3k模块震撼你。
它允许你从一系列领先的国际出版物中检索新闻文章和相关元数据。您可以检索图像、文本和作者姓名。
它甚至有一些内置的NLP功能。
因此,如果你想在下一个项目中使用BeautifulSoup或其他自制的网页爬虫库,那么省下你的时间和精力,用
代替。
Operator overloading
python为运算符重载提供了支持,这是一个让你听起来像个合法的计算机科学家的术语。
这实际上是一个简单的概念。有没有想过python为什么允许你使用"+"运算符来相加数字以及连接字符串?这就是运算符重载。
你可以用特殊的方法定义使用Python标准运算符符号的对象。这允许你在与你正在处理的对象相关的上下文中使用它们
pprint
python的默认print函数的确可以完成它的工作。但是尝试输出出任何大的嵌套对象时,结果会很难看。
这里有pretty-print标准库。可以以易于阅读的格式输出出复杂的结构化对象。
对于任何处理non-trivial数据类型的Python开发人员来说都是必不可少的。
queue
python支持多线程,标准库的queue模块有助于实现这一点。
此模块允许你实现队列数据结构。这些数据结构允许您根据特定规则添加和检索条目。
先进先出(FIFO)队列允许你按对象添加的顺序检索对象。后进先出(LIFO)队列允许你先访问最近添加的对象。
最后,优先级队列允许你根据对象的排序顺序检索对象。
这里有如何在Python中使用队列进行多线程编程的示例。
__repr__
在Python中定义类或对象时,提供一种很有用的官方支持的方式将对象呈现为字符串。例如:
这使得调试代码更加容易。可以添加到你的类定义中,如下所示:
sh
python是一种很棒的脚本语言。有时使用标准的os和sbprocess库会有点令人头疼。
sh库提供了一个简洁的替代方案。
它允许你调用任何程序,就好像它是一个普通的函数一样——对于自动化工作流和任务非常有用,所有这些都可以用Python完成。
Type hints
Python是一种动态类型语言。定义变量、函数、类等时,不需要指定数据类型。
这有助于缩短开发时间。然而,没有什么比简单的类型问题导致的运行错误更令人讨厌的了。
自Python 3.5以来,你可以选择在定义函数时提供类型提示。
你也可以定义类型别名:
虽然这不是强制性的,但是类型注释可以让你的代码更容易被理解。
它们还允许你在运行之前使用类型检查工具来捕获这些杂散的类型错误。如果你正在进行大型复杂的项目,这很值得的使用!
uuid
生成通用唯一标识(UUID)的一种快速简单的方法是使用Python标准库的UUID模块。
这可以产生一个随机的128位数字,几乎可以肯定这个数字是唯一的。
事实上,可以生成超过2112个可能的UUID。超过5x1036(或5,000,000,000,000,000,000,000,000,000,000,000,000)。
在给定的集合中找到重复的概率非常低。即使有万亿个UUID,重复存在的概率也远低于十亿分之一。非常有用的两行代码。
Virtual environments
这可能是我最喜欢的关于Python的东西。
你很可能在同一时间处理多个Python项目。不幸的是,有时两个项目将依赖于同一依赖关系的不同版本。你选择在你的系统上安装什么?
幸运的是,Python对虚拟环境的支持让你可以兼顾两者。在命令行中:
现在,你可以在同一台机器上分别存在Python的独立版本和安装环境。
wikipedia
维基百科有一个很好的API,允许用户编程访问无与伦比的完全免费的知识和信息。
维基百科模块使得访问这个API变得非常方便。
像真实的网站一样,该模块支持多语言、页面消除歧义、随机页面检索,甚至还有一个donate方法.
xkcd
幽默是Python语言的一个重要特征——毕竟,它是以英国喜剧《巨蟒飞行马戏团》命名的。
Python的许多官方文档都引用了该喜剧出名的独幕。
尽管如此,幽默感并不局限于官方文档。试试下面的代码:
永远不要改变,Python。永不改变。
YAML
YAML代表“YAML Ain’t Markup Language”,它是一种数据格式化语言,是JSON的超集。
与JSON不同,它可以存储更复杂的对象并引用自己的元素。你也可以写注释,使其特别适合于编写配置文件。
PyYAML模块允许你将YAML与Python一起使用。这样安装它:
然后导入到项目中:
PyYaML允许你存储任何数据类型的Python对象,以及任何用户定义类的实例。
zip
对你来说,这是最后一招,真的很酷。曾经需要将两个列表合成一个字典?
zip内置函数接受多个可重复对象,并返回元组列表。每个元组按位置索引对输入对象的元素进行分组。
您也可以通过对对象调用*zip来“解压缩”对象。
感谢阅读!
到这里你已经读完全文,Python的26个小技巧——希望你从中得到了对下一个项目有用的东西。
Python是一种非常多样且适合开发的语言,所以我肯定有很多东西没有包括在内。
请在下面留言,分享你自己最喜欢的Python技巧!
英文原文:
译者:densuc