Python 是世界上最流行、热门的编程语言之一,原因很多,比如:
易于学习
超高的通用性
具备大量模块和库
本文将分享一些使用 Python 的技巧,顺序按照 A-Z 排列。
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 模块:https://docs.python.org/3/library/collections.html 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 character y = Counter("Hello World!") dir |
你是否想过如何查看 Python 对象内部及其具有哪些属性?
输入以下命令行:
>>> dir() >>> dir("Hello World") >>> dir(dir) |
当以交互方式运行 Python 时,这可能是一个非常有用的功能,并且可以动态地探索你正在使用的对象和模块。
from emoji import emojizeprint(emojize(":thumbs_up:")) from __future__ import |
Python 流行的一个结果是,总有新版本正在开发中。新版本意味着新功能——除非你的版本已经过时。
不过,别担心。__ future__模块允许用户导入新版 Python 的功能。这简直就像时间旅行,或者魔法什么的。
__ future__模块:https://docs.python.org/2/library/*future*.html from __future__ import print_function print("Hello World!") geopy |
地理(Geography)对于程序员来说可能是一个具有挑战性的领域。但是 geopy 模块让它变得异常简单。
geopy 模块:https://geopy.readthedocs.io/en/latest/ $ pip install geopy |
它通过抽取一系列不同地理编码服务的 API 来工作,使用户获取一个地方的完整街道地址、纬度、经度,甚至海拔高度。
另外一个有用的功能是距离:它可以用你喜欢的度量单位计算出两个位置之间的距离。
from geopy import GoogleV3 place = "221b Baker Street, London" location = GoogleV3().geocode(place) print(location.address) print(location.location) howdoi |
陷入编码问题,却不记得以前见过的解决方案?需要检查 StackOverflow,但不想离开终端?
那么你需要这个有用的命令行工具:https://github.com/gleitz/howdoi。
$ pip install howdoi |
无论你有什么问题都可以问它,它会尽力回答。
$ howdoi vertical align css $ howdoi for loop in java $ howdoi undo commits in git |
但是请注意——它会从 StackOverflow 的最高票答案中抓取代码。也就是说它提供的信息并非总是有用……
$ howdoi exit vim inspect |
Python 的 inspect 模块非常有助于理解问题背后的详情。你甚至可以在 inspect 模块上调用其方法!
inspect
下面的代码示例使用 inspect.getsource() 打印自己的源代码。它还使用 inspect.getmodule() 打印定义它的模块。
最后一行代码打印出自己的行号。
import inspect print(inspect.getsource(inspect.getsource)) print(inspect.getmodule(inspect.getmodule)) print(inspect.currentframe().f_lineno) |
当然,除了这些琐碎的用途之外,inspect 模块还能帮助你理解代码正在做的事。你还可以用它编写自文档化代码。
Jedi
Jedi 库是一个自动完成和代码分析的库。它使代码编写变得更快、效果更高。
除非你正在开发自己的 IDE,否则你肯定会对使用 Jedi 库作为编辑插件很感兴趣。
Jedi:https://jedi.readthedocs.io/en/latest/docs/usage.html |
你可能已经在使用 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 编程的原因之一是它的列表推导式
(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)。 |
这些表达式使得编写干净易读的代码变得很容易,那些代码读起来几乎像自然语言一样。
numbers = [1,2,3,4,5,6,7] evens = [x for x in numbers if x % 2 is 0] odds = [y for y in numbers if y not in evens] cities = ['London', 'Dublin', 'Oslo'] def visit(city): print("Welcome to "+city) for city in cities: visit(city) map |
Python 通过许多内置功能支持函数式编程。map() 函数是最有用的函数之一——特别是当它与 lambda 函数结合使用时。
lambda 函数:
x = [1, 2, 3] y = map(lambda x : x + 1 , x) # prints out [2,3,4] print(list(y)) |
在上面的例子中,map() 将一个简单的 lambda 函数应用于 x 中的每个元素。它返回一个 map 对象,该对象可以被转换成可迭代的对象,如列表或元组。
newspaper3k
如果你之前没有见过它,那么我建议你先查看:https://pypi.org/project/newspaper3k/。
它可以帮助你从大量顶级国际出版物中检索到新闻文章和相关元数据。你可以检索图像、文本和作者名。
它还有一些内置的 NLP 功能。
如果你想在下一个项目中使用 BeautifulSoup 或其它 DIY 网页抓取库,那么不如使用$ pip install newspaper3k,既省时又省事,何乐而不为呢?
运算符重载(Operator overloading)
Python 支持运算符重载。
它实际上是一个简单的概念。你有没有想过为什么 Python 允许用户使用 + 运算符来将数字相加,并级联字符串?这就是运算符重载在发挥作用。
你可以使用 Python 的标准运算符号来定义对象,这样你可以在与这些对象相关的语境中使用它们。
class Thing: def __init__(self, value): self.__value = value def __gt__(self, other): return self.__value > other.__value def __lt__(self, other): return self.__value < other.__value something = Thing(100) nothing = Thing(0) # True something > nothing # False something < nothing # Error something + nothing |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。