选自freecodecamp
作者:peter gleeson
机器之心编译
参与:路、王淑婷
被人工智能捧红的 python 已是一种发展完善且非常多样化的语言,其中肯定有一些你尚未发现的功能。本文或许能够让你学到一些新技巧。
python 是世界上最流行、热门的编程语言之一,原因很多,比如:
易于学习超高的通用性具备大量模块和库
本文将分享一些使用 python 的技巧,顺序按照 a-z 排列。
all or any
python 非常受欢迎的原因之一是其可读性和表达性。
人们还经常把 python 笑称为「可执行伪码(executable pseudocode)」。但是,当你可以编写这样的代码时,很难去反驳这种言论:
x = [true, true, false]if any(x): print(at least one true)if all(x): print(not one false)if any(x) and not all(x): print(at least one true and one false)
bashplotlib
想在控制台中绘图吗?
$ pip install bashplotlib
使用上面的行,即可在控制台中绘图。
collections
python 有一些很棒的默认数据类型,但有时候它们可能不会尽如你意。
不过,python 标准库提供了 collections 模块。这个方便的附加组件可以为你提供更多数据类型。
collections 模块:
from collections import ordereddict, counter# remembers the order the keys are added!x = ordereddict(a=1, b=2, c=3)# counts the frequency of each charactery = counter(hello world!)
dir
你是否想过如何查看 python 对象内部及其具有哪些属性?
输入以下命令行:
>>> dir()>>> dir(hello world)>>>dir(dir)
当以交互方式运行 python 时,这可能是一个非常有用的功能,并且可以动态地探索你正在使用的对象和模块。
想要了解更多,点这里:#dir
emoji
是的,真的有。请点击这里:
from __future__ import print_functionprint(hello world!)
geopy
地理(geography)对于程序员来说可能是一个具有挑战性的领域。但是 geopy 模块让它变得异常简单。
geopy 模块:
下面的代码示例使用 inspect.getsource() 打印自己的源代码。它还使用 inspect.getmodule() 打印定义它的模块。
最后一行代码打印出自己的行号。
import inspectprint(inspect.getsource(inspect.getsource))print(inspect.getmodule(inspect.getmodule))print(inspect.currentframe().f_lineno)
当然,除了这些琐碎的用途之外,inspect 模块还能帮助你理解代码正在做的事。你还可以用它编写自文档化代码。
jedi
jedi 库是一个自动完成和代码分析的库。它使代码编写变得更快、效果更高。
除非你正在开发自己的 ide,否则你肯定会对使用 jedi 库作为编辑插件很感兴趣。
jedi:
你可能已经在使用 jedi 了。ipython 项目就使用 jedi 实现代码自动完成功能。
**kwargs
学习任何语言时都会遇到很多里程碑。对于 python 来说,理解神秘的**kwargs 语法可能算是其中之一。
词典对象前面的双星号可以让你把该词典的内容作为命名参数输入到函数中。
词典的秘钥是参数名,值是传递给函数的值。你甚至不需要称它为 kwargs!
dictionary = {a: 1, b: 2}def somefunction(a, b): print(a + b)return# these do the same thing:somefunction(**dictionary)somefunction(a=1, b=2)
当你想编写能够处理事先未定义的命名参数的函数时,这个很有用。
列表推导式(list comprehensions)
我最喜欢 python 编程的原因之一是它的列表推导式(#list-comprehensions)。
这些表达式使得编写干净易读的代码变得很容易,那些代码读起来几乎像自然语言一样。
关于它们的更多使用信息请查看:#lambda-expressions
x = [1, 2, 3]y = map(lambda x : x + 1 , x)# prints out [2,3,4]print(list(y))
在上面的例子中,map() 将一个简单的 lambda 函数应用于 x 中的每个元素。它返回一个 map 对象,该对象可以被转换成可迭代的对象,如列表或元组。
newspaper3k
如果你之前没有见过它,那么我建议你先查看:#performing-nlp-on-an-article
如果你想在下一个项目中使用 beautifulsoup 或其它 diy 网页抓取库,那么不如使用$ pip install newspaper3k,既省时又省事,何乐而不为呢?
运算符重载(operator overloading)
python 支持运算符重载。
它实际上是一个简单的概念。你有没有想过为什么 python 允许用户使用 + 运算符来将数字相加,并级联字符串?这就是运算符重载在发挥作用。
你可以使用 python 的标准运算符号来定义对象,这样你可以在与这些对象相关的语境中使用它们。
classthing:def__init__(self, value):self.__value= value def __gt__(self, other):return self.__value > other.__value def __lt__(self, other):return self.__value nothing# falsesomething >> file = open('file.txt', 'r')>>>print(file)
这使代码 debug 变得简单很多。将字符串添加到类别定义,如下所示:
classsomeclass:def__repr__(self):return someinstance= someclass()# prints print(someinstance)
sh
python 是一种伟大的脚本语言,不过有时使用标准 os 和 subprocess 库会有点棘手。
sh 库提供了一种不错的替代方案。
sh 库:
import uuiduser_id = uuid.uuid4()print(user_id)
这创建了一个随机化后的 128 比特数字,该数字几乎必然是唯一的。
事实上,可以生成 2可能的 uuid。这个数字超过了 5,000,000,000,000,000,000,000,000,000,000,000,000。
在给定集合中找出重复数字的可能性极低。即使有一万亿 uuid,重复数字存在的概率也远远低于十亿分之一。
虚拟环境(virtual environment)
这可能是 python 中我最喜欢的事物了。
你可能同时处理多个 python 项目。不幸的是,有时候两个项目依赖于相同依赖项的不同版本。那你要安装哪个版本呢?
幸运的是,python 支持虚拟环境,这使得用户能够充分利用两种环境。见下列行:
python -m venv my-projectsource my-project/bin/activatepip install all-the-modules
现在你在一台机器上具备独立的多个 python 版本了。问题解决!
wikipedia
wikipedia 拥有一个很棒的 api,允许用户以编程方式访问巨大体量的免费知识和信息。
wikipedia 模块使得访问该 api 非常便捷。
wikipedia 模块:
import wikipediaresult = wikipedia.page('freecodecamp')print(result.summary)for link in result.links: print(link)
和真实的维基百科网站类似,该模块支持多种语言、页面消歧、随机页面检索,甚至还具备 donate() 方法。
xkcd
humour 是 python 语言的一个关键特征,其名称来自英国喜剧片《蒙提·派森的飞行马戏团》(monty python and the flying circus)。python 的很多官方文档引用了该喜剧片最著名的剧情。
幽默感并不限于文档。试着运行下列行:
import antigravity
将打开 xkcd 画的 python 漫画。不要改变这一点,python。不要改变。
yaml
yaml 代表 『yaml ain』t markup language』。它是一种数据格式语言,是 json 的超集。
与 json 不同,它可以存储更复杂的对象并引用自己的元素。你还可以编写注释,使其尤其适用于编写配置文件。
pyyaml 模块(https://p...