这些Python代码技巧,你肯定还不知道

发表于:2018-9-03 10:23  作者:机器之心编译   来源:机器之心

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: Python

  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),我们将立即处理。

【直播预售】接口测试行业大佬带你从青铜上王者>>立即查看
21/212>

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2018, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道