24 个好用到爆的 Python 实用技巧!(下)

上一篇 / 下一篇  2021-11-16 09:40:05

  列表(list)推导式
  关于 Python 编程,我最喜欢的事情之一是它的列表推导式[10]。
  这些表达式可以很容易地编写非常顺畅的代码,几乎与自然语言一样。
  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 函数[11]结合使用时。
  x = [1, 2, 3]   
  y = map(lambda x : x + 1, x)  
  # 打印出 [2,3,4]  
  print(list(y)) 
  在上面的示例中,map()将一个简单的 lambda 函数应用于x. 它返回一个映射对象,该对象可以转换为一些可迭代对象,例如列表或元组。
  newspaper3k
  如果你还没有看过它,那么准备好被Python newspaper module [12]模块震撼到。它使你可以从一系列领先的国际出版物中检索新闻文章和相关的元数据。你可以检索图像、文本和作者姓名。它甚至有一些内置的 NLP 功能[13]。
  因此,如果你正在考虑在下一个项目中使用 BeautifulSoup 或其他一些 DIY 网页抓取库,使用本模块可以为你自己节省不少时间和精力。
  pip install newspaper3k 
  Operator overloading
  Python 提供对运算符重载的[14]支持,这是让你听起来像一个合法的计算机科学家的术语之一。
  这实际上是一个简单的概念。有没有想过为什么 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 
  pprint
  Python 的默认print函数完成了它的工作。但是如果尝试使用print函数打印出任何大的嵌套对象,其结果相当难看。这个标准库的漂亮打印模块pprint[15]可以以易于阅读的格式打印出复杂的结构化对象。
  这算是任何使用非平凡数据结构的 Python 开发人员的必备品。
  import requests  
  import pprint  
  url = 'https://randomuser.me/api/?results=1'  
  users = requests.get(url).json()  
  pprint.pprint(users) 
  Queue
  Python 标准库的 Queue 模块实现支持多线程。这个模块让你实现队列数据结构。这些是允许你根据特定规则添加和检索条目的数据结构。
  “先进先出”(FIFO)队列让你可以按添加顺序检索对象。“后进先出”(LIFO) 队列让你可以首先访问最近添加的对象。
  最后,优先队列让你可以根据对象的排序顺序检索对象。
  这是一个如何在 Python 中使用队列Queue[16]进行多线程编程的示例。
  __repr__
  在 Python 中定义类或对象时,提供一种将该对象表示为字符串的“官方”方式很有用。例如:
  >>> file = open('file.txt', 'r')   
  >>> print(file)  
  <open file 'file.txt', mode 'r' at 0x10d30aaf0> 
  这使得调试代码更加容易。将其添加到你的类定义中,如下所示:
  class someClass:   
      def __repr__(self):   
          return "<some description here>"  
  someInstance = someClass()  
  # 打印 <some description here>  
  print(someInstance) 
  sh
  Python 是一种很棒的脚本语言。有时使用标准的 os 和 subprocess 库可能有点头疼。
  该SH库[17]让你可以像调用普通函数一样调用任何程序——对于自动化工作流和任务非常有用。
  import sh  
  sh.pwd()  
  sh.mkdir('new_folder')  
  sh.touch('new_file.txt')  
  sh.whoami() 
  sh.echo('This is great!')
  Type hints
  Python 是一种动态类型语言。定义变量、函数、类等时不需要指定数据类型。这允许快速的开发时间。但是,没有什么比由简单的输入问题引起的运行时错误更烦人的了。
  从 Python 3.5[18] 开始,你可以选择在定义函数时提供类型提示。
  def addTwo(x : Int) -> Int:  
      return x + 2 
  你还可以定义类型别名。
  from typing import List  
  Vector = List[float]  
  Matrix = List[Vector]  
  def addMatrix(a : Matrix, b : Matrix) -> Matrix:  
    result = []  
    for i,row in enumerate(a):  
      result_row =[]  
      for j, col in enumerate(row):  
        result_row += [a[i][j] + b[i][j]]  
      result += [result_row]  
    return result  
  x = [[1.0, 0.0], [0.0, 1.0]]  
  y = [[2.0, 1.0], [0.0, -2.0]]  
  z = addMatrix(x, y) 
  尽管不是强制性的,但类型注释可以使你的代码更易于理解。
  它们还允许你使用类型检查工具,在运行前捕获那些杂散的 TypeError。如果你正在处理大型、复杂的项目,这是很有用的!
  uuid
  通过Python 标准库的 uuid 模块[19]生成通用唯一 ID(或“UUID”)的一种快速简便的方法。
  import uuid  
  user_id = uuid.uuid4()  
  print(user_id) 
  这将创建一个随机的 128 位数字,该数字几乎肯定是唯一的。事实上,可以生成超过 2122 种可能的 UUID。这超过了五个十进制 (或 5,000,000,000,000,000,000,000,000,000,000,000,000)。
  在给定的集合中发现重复的概率极低。即使有一万亿个 UUID,重复存在的可能性也远低于十亿分之一。
  Virtual environments
  你可能同时在多个 Python 项目上工作。不幸的是,有时两个项目将依赖于相同依赖项的不同版本。你在你的系统上安装了什么?
  幸运的是,Python支持对 虚拟环境[20] 的让你可以两全其美。从命令行:
  python -m venv my-project   
  source my-project/bin/activate   
  pip install all-the-modules 
  现在,你可以在同一台机器上运行 Python 的独立版本和安装。
  wikipedia
  维基百科有一个很棒的 API,它允许用户以编程方式访问无与伦比的完全免费的知识和信息。在wikipedia模块[21]使访问该API非常方便。
  import wikipedia  
  result = wikipedia.page('freeCodeCamp') 
  print(result.summary)  
  for link in result.links:  
      print(link) 
  和真实站点一样,该模块提供了多语言支持、页面消歧、随机页面检索,甚至还有一个donate()方法。
  xkcd
  幽默是 Python 语言的一个关键特征,它是以英国喜剧小品剧Python飞行马戏团[22]命名的。Python 的许多官方文档都引用了该节目最著名的草图。不过,Python 的幽默并不仅限于文档。试试运行下面的行:
  import antigravity 
  YAML
  YAML[23]指的是 “ 非标记语言” 。它是一种数据格式化语言,是 JSON 的超集。
  与 JSON 不同,它可以存储更复杂的对象并引用它自己的元素。你还可以编写注释,使其特别适合编写配置文件。该PyYAML模块[24]可让你使用YAML使用Python。
  安装并然后导入到你的项目中:
  pip install pyyaml  
  import yaml 
  PyYAML 允许你存储任何数据类型的 Python 对象,以及任何用户定义类的实例。
  zip
  压轴出场的也是很棒的一个模块。你曾经遇到过需要从两个列表中形成字典吗?
  keys = ['a', 'b', 'c']  
  vals = [1, 2, 3]  
  zipped = dict(zip(keys, vals)) 
  该zip()内置函数需要一系列可迭代的对象,并返回一个元组列表中。每个元组按位置索引对输入对象的元素进行分组。
  你还可以通过调用对象来“解压缩”对象*zip()。

  2021软件测试行业前景如何?哪些测试类型会成为主流趋势?快来填写行业调查问卷一同助力行业发展吧!点击下方链接参与问卷,还有精美礼品等你来拿~
  链接:http://vote.51testing.com/


TAG: 软件开发 Python

 

评分:0

我来说两句

Open Toolbar