一份超级实用的 Python ”技巧“清单

Python是世界上最受欢迎,最流行的编程语言之一。这有很多原因:

  • 它很容易学习
  • 它是超级多用途的
  • 它有大量的模块和库

每天使用Python是我内在工作的一部分。在这个过程中,我学会了一些有用的技巧和心得。

在这里,我尝试以A~Z顺序共享其中一些。

大多数这些“技巧”是我在日常工作中使用或偶然发现的事情。一些是我在浏览Python标准库文档时发现的。另外一些是通过PyPi搜索到的。

但是,应该归功于它 - 我在awesome-python.com上发现了其中的四个或五个。这是数百个有趣的Python工具和模块的精选列表。这是值得浏览的灵感!

大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

all or any

Python是如此流行的编程语言的原因之一是因为具有可读性和表现力。

人们经常开玩笑说Python是‘可执行的伪代码。但是当你可以编写这样的代码时,很难反驳:

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标准库提供了集合模块。这个方便的附加组件为您提供了更多的数据类型。

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以及动态浏览您正在使用的对象和模块时,这可能是一个非常有用的功能。

$ pip install emoji
from emoji import emojize
print(emojize(":thumbs_up:"))

from future import

Python受欢迎的一个后果是一直有新的版本在开发中。新版本意味着新功能 - 除非您的版本已过时。

但是,不要害怕。该future模块,让您可以用Python导入未来版本的功能。它实际上就像时间旅行,魔术或其他东西。

from __future__ import print_function
print("Hello World!")

为什么不去导入花括号

geopy

对于程序员来说,地理位置可能是一个具有挑战性的领域(ha,a pun!)。但是geopy模块让它变得非常简单。

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,但不想离开终端?

然后你需要这个有用的命令行工具

$ pip install howdoi

问你有什么问题,它会尽力回答。

$ howdoi vertical align css
$ howdoi for java in java
$ howdoi undo commits in git

请注意 - 它从StackOverflow的顶级答案中删除代码。它可能并不总能提供最有用的信息......

$ howdoi退出vim

inspect 检查

Python的检查模块非常适合理解幕后发生的事情。你甚至可以自己调用它的方法!

下面的代码示例inspect.getsource()用于打印自己的源代码。它还inspect.getmodule()用于打印定义它的模块。

最后一行代码打印出自己的行号。

import inspect
print(inspect.getsource(inspect.getsource))
print(inspect.getmodule(inspect.getmodule))
print(inspect.currentframe().f_lineno)

当然,除了这些微不足道的用途之外,检查模块对于理解代码的作用非常有用。您也可以使用它来编写自我记录代码。

Jedi

Jedi库是一个代码辅助和代码分析的库。它使编写代码更快,更高效。

除非您正在开发自己的IDE,否则您可能最感兴趣的是将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编程的一点是列表推导

这些表达式可以很容易地编写非常干净的代码,几乎就像自然语言一样。

您可以在此处详细了解如何使用它们。

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函数结合使用。

x = [1, 2, 3]
y = map(lambda x : x + 1 , x)
# prints out [2,3,4]
print(list(y))

在上面的示例中,map()将简单的lambda函数应用于每个元素x。它返回一个map对象,可以将其转换为某个可迭代对象,例如list或tuple。

newspaper3k

如果你还没有看过它,那么请准备好让你的思绪被Python的报纸模块所震撼

它允许您从一系列领先的国际出版物中检索新闻文章和相关的元数据。您可以检索图像,文本和作者姓名。

它甚至还有一些内置的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

pprint

Python的默认print函数可以完成它的工作。但是尝试打印出任何大的嵌套对象,结果相当丑陋。

这是标准库的漂亮打印模块(Standard Library’s pretty-print module)的用武之地。它以易于阅读的格式打印出复杂的结构化对象。

任何使用非常规数据结构的Python开发人员必备的。

import requests
import pprint
url = ‘https://randomuser.me/api/?results=1‘
users = requests.get(url).json()
pprint.pprint(users)

Queue 队列

Python支持多线程,标准库的队列模块为此提供了便利。

此模块允许您实现队列数据结构。这些是允许您根据特定规则添加和检索条目的数据结构。

‘先进先出‘(或FIFO)队列允许您按照添加的顺序检索对象。“后进先出”(LIFO)队列允许您首先访问最近添加的对象。

最后,优先级队列允许您根据对象的排序顺序检索对象。

这是一个如何在Python中使用队列进行多线程编程的示例

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()
# prints <some description here>
print(someInstance)

SH

Python是一种很棒的脚本语言。有时使用标准的操作系统和子进程库可能会让人头疼。

SH库提供了一个整洁的替代品。

它允许您调用任何程序,就像它是一个普通函数一样 - 对于自动化工作流和任务非常有用,所有这些都来自Python。

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开始,您可以选择在定义函数时提供类型提示。

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)

虽然不是强制性的,但类型注释可以使您的代码更容易理解。

它们还允许您使用类型检查工具在运行时捕获那些杂散的TypeErrors。如果您正在开展大型复杂项目,那可能是值得的!

uuid

生成通用唯一ID(或“UUID”)的快捷方法是通过Python标准库的uuid模块

import uuid
user_id = uuid.uuid4()
print(user_id)

这会创建一个随机的128位数字,几乎肯定是唯一的。

实际上,可以生成超过2 12 2个可能的UUID。这超过五亿十亿(或5,000,000,000,000,000,000,000,000,000,000,000,000,000)。

在给定集合中找到重复的概率非常低。即使有万亿UUID,重复存在的可能性也远远低于十亿分之一。

两行代码相当不错。

Virtual environments

这可能是我最喜欢的Python的地方。

您有可能在任何时候都在处理多个Python项目。不幸的是,有时两个项目将依赖于同一依赖项的不同版本。你在系统上安装了哪些?

幸运的是,Python 对虚拟环境支持让您拥有两全其美的优势。从命令行:

python -m venv my-project
source my-project/bin/activate
pip install all-the-modules

现在,您可以在同一台计算机上运行独立版本和Python安装。

wikipedia 维基百科

维基百科有一个很棒的API,允许用户以编程方式访问无与伦比的完全免费的知识和信息。

维基百科模块,使访问该API几乎令人意想不到的方便。

import wikipedia
result = wikipedia.page(‘freeCodeCamp‘)
print(result.summary)
for link in result.links:
    print(link)

与真实网站一样,该模块提供对多种语言的支持,页面消歧,随机页面检索,甚至还有一种donate()方法。

XKCD

幽默是Python语言的一个关键特征 - 毕竟,它是以英国喜剧素描Monty Python的飞行马戏团命名。Python的大部分官方文档都引用了该剧最着名的草图。

但幽默感并不局限于文档。请按以下方式运行:

import antigravity

永远不要改变,Python。从不改变。

YAML

YAML代表‘ YAML Is Not Markup Language ‘。它是一种数据格式化语言,是JSON的超集。

与JSON不同,它可以存储更复杂的对象并引用它自己的元素。您还可以编写注释,使其特别适合编写配置文件。

PyYAML模块可让您使用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()它们来“解压缩”对象。

原文地址:https://blog.51cto.com/14318113/2394047

时间: 2024-10-29 16:58:36

一份超级实用的 Python ”技巧“清单的相关文章

技术:超级实用的电脑小技巧

其实微软系统中隐藏了很多实用小技巧,很多都能让我们省去不少时间.例如以下将要给你们介绍的几个技巧,我很确信就有你不知道的! 一.十个快捷键小技巧 1.[Windows键 + D]高手们常用的键,瞬间回到桌面. 2.[Windows键 + E]直接打开"我的电脑". 3.[Windows键 + L]电脑锁屏,不用担心隐私外泄. 4.[Windows键 + R]再输入osk,点"运行",立刻弹出虚拟键盘. 5.[Ctrl + Tab]快速切换浏览器选项卡. 6.[Alt

APICloud开发者进阶之路 | 超级实用技巧

金秋9月,脑海还是北京的"中非合作蓝"!今天按照惯例,柚子君还是要督促大家充充电的! 本周<30天,App开发从0到1>将要给大家分享第十章超级实用技巧,我们精选了其中的一个章节--地图模块的实用扩展:在地图上添加自定义按钮,一起来学习吧. 主要内容本章将向读者介绍一些开发中常用的功能和技巧 , 这些技巧涉及应用开发的方方面面. 示例 1 讲解了屏幕动态适配的方法,是开发 App 必须具备要掌握的技能之一:示例 2.示例 7.示例 9 -示例 11 具体讲解了一些常见的业务

信盈达分享给你一些实用的Linux技巧

首先,我想告诉大家,在Unix/Linux下,最有效率技巧的不是操作图形界面,而是命令行操作,因为命令行意味着自动化.如果你看过<你可能不知道的Shell>以及<28个Unix/Linux的命令行神器>你就会知道Linux有多强大,这个强大完全来自于命令行,于是,就算你不知道怎么去做一个环保主义的程序员 ,至少他们可以让你少熬点夜,从而有利于你的身体健康.下面是一个有点长的列表,正如作者所说,你并不需要知道所有的这些东西,但是如果你还在很沉重地在使用Linux的话,这些东西都值得你

阿里P7给你一份超详细 Spring Boot 知识清单

在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Spring框架的应用,它是Spring对"约定优先于配置"理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于Spring生态圈的应用.那Spring Boot有何魔法?自动配置.起步依赖.Actuator.命令行界面(CLI) 是Spring Boot最重要的4大核心特性,其中CLI是

超级实用!全郑州地铁沿线景点美食全攻略(附首末班时间表)

超级实用!全郑州地铁沿线景点美食全攻略(附首末班时间表) 2017-04-20小金豆郑州微公交 玩得劲 春天在哪里呀? 春天在哪里? 小编总结了 郑州地铁线路景点美食大全 及最新地铁首末班时刻表 最美人间四月天 快跟着小编 坐上地铁去旅行吃美食吧 别忘备上纸巾擦口水啊~ 一 郑州地铁沿线最全景点美食一览 1 1号线 龙子湖站 龙子湖 票价:免费 地址:郑东新区新107国道以东 市体育中心站 中原网球中心 票价:免费 地址:金水区金水东路附近 固始菜家庭餐馆 人均:¥20 地址:金水东路与明理路交

并发技巧清单

并发技巧清单 可变状态是至关重要的(It`s the mutable state stupid) . 所有问题都可以归结为如何协调对并发状态的访问. 可变状态越少就越容易确保线程安全性. 尽量将域声明为final类型 , 除非他们是可变的. 不可变对象一定是线程安全的 不可变对象能极大的降低并发编程的复杂性.它们更为简单而且安全,可以任意共享而无须使用加锁或者保护性复杂等机制. 封装有助于管理复杂性 在编写线程安全的程序时,虽然可以将所有数据都保存在全局变量中,但是不建议这么做,将数据封装在对象

看看这个超级实用的一种类型——匿名类型

既然说到匿名类型超级实用,得要找到场景来说服一下,如果大家玩过php,里面有一个万能的关联数组array,任你在关联数组array里面怎么写,都 可以用json_encode来生成json,非常非常的方便. <?php //可以这么写 $arr= array("name"=>"hxc","age"=20,"isMale"=>true); //也可以这么写 $arrayName = array("li

python技巧

列表解析 语法:[expr for iter_var in iterable] [expr for iter_var in iterable if cond_expr] 如果是有类的情况下,可以使用 class Person(object): 9     def __init__(self, name, age = 0): 10         self.name = name 11         self.age = age 12     def __repr__(self): 13    

10个实用Eclipse调试技巧

Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 小编从前辈程序员和网络中,整理了10个Eclipse调试技巧,希望对Java程序员有用. 1 条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建.在调试界面中,"断点"视图会把所有被创建的断点列出来.我们可以给它加一个布尔条件,也就是说,该断点会被激活并且如果布尔条件为真,就会执行该断点,否则将会跳过往下执行. 2 异常断点 在断点视