本文为 AI 研习社编译的技术博客,原标题 :

An A-Z of useful Python tricks

翻译 | 余杭、李灏 校对 | 志豪 整理 | 志豪

原文链接:

https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747

Python 是这个世界上最受欢迎的按需编程语言之一。其中包含很多原因:易学习

应用范围广

具备非常多的模型和库

Python 是我作为数据科学家日常生活中不可或缺的一部分。在学习 Python 的过程中,我领悟到了很多的方法和技巧。

在这里,我尝试用 A-Z 的格式来做一些分享。

大部分的技巧是我在日常工作中使用的或是偶然发现的。 其中一些是在浏览 Python Standard Library docs 找到的。其他的一些是我在 PyPi 中搜索找到的。

但事实上,还是应该归功于 http://awesome-python.com ,因为我在上面找到了四个或五个实用的技巧。这是数百个有趣的 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使用上述命令行,即可在控制台中绘图。

集合

Python 内置默认的数据类型,但有时它们的使用效果会不尽如人意。

幸运的是,Python 的标准库提供了 collections 模块,这个方便的附加库提供了更多的数据类型。

from collections import OrderedDict, Counter

x = OrderedDict(a=1, b=2, c=3)

y = Counter("Hello World!")

dir

你是否曾经有过深入 Python 对象内部并且观察它具备哪些属性的想法呢?

输入下述命令行:

>>> dir()

>>> dir("Hello World")

>>> dir(dir)以交互式运行 Python 时,这是一个非常实用的特征,并且可以动态地搜索正在使用的对象和模块。

emoji

Python 包含 emoji 模块,在这里!

$ pip install emoji别以为我不知道你会偷偷下载...

from emoji import emojize

print(emojize(":thumbs_up:"))

from _future_import

Python 流行的一个结果是新版本总是在开发中。新版本意味着新功能——除非版本已经过时

不过别担心。_future_module 允许用户通过函数导入新版本 Python 的功能。这就像是时间旅行,或是奇异魔法之类......

from __future__ import print_function

print("Hello World!")为什么不导入花括号呢?

geopy

地理知识对于程序猿来说是非常大的挑战是,但是 geopy 模块让它变得更简单。

$ pip install geopy它通过提取不同的地理编码服务 API 进行工作,以此能获取一个地方的完整街道地址,经度,纬度,甚至是海拔高度。

geopy 还提供一个非常有用的距离类。它支持用户喜欢的度量方式来计算两个地点之间的距离。

from geopy import GoogleV3

place = "221b Baker Street, London"

location = GoogleV3().geocode(place)

print(location.address)

print(location.location)

howdoi

受困于编程问题并且不记得之前看到过的解决方法?用户需要使用 StackOverflow ,但是不想离开终端?

那么需要使用这个非常使用的命令行工具 howdoi

$ pip install howdoi无论你有什么问题,它都会帮你解答。

$ howdoi vertical align css

$ howdoi for loop in java

$ howdoi undo commits in git但是请注意,它会从 StackOverflow 的最高票答案中抓取代码,这意味着它的回答并不总是最有用的。

$ howdoi exit vim

inspect

Python 的 inspects 模块对于理解背后的原理是非常有帮助的。用户甚至可以在 inspect 模块上调用其方法!

下述代码示例使用

inspect.getsource()

来打印它的源代码。同时它也使用

inspect.getmodule()

来打印定义它的模块。

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

import inspect

print(inspect.getsource(inspect.getsource))

print(inspect.getmodule(inspect.getmodule))

print(inspect.currentframe().f_lineno)当然,除了这些琐碎的用途之外 , inspect 模块还支持理解用户代码正在做什么。用户还可以利用 Inspect 模块编写自文档化代码。

Jedi

Jedi 是一个自动完成以及代码分析库。它使得编写代码更加快速以及更高产。

除非用户正在自主开发 IDE,否则肯定会对使用 Jedi 作为编辑器插件非常感兴趣。幸运的是,已经开放下载。

用户可能已经在使用 Jedi。 IPython 项目基于 Jedi 实现了代码自动完成功能。

**kwargs

在学习任何编程语言时,一路上会遇到很多里程碑。在学习 Python 时,理解神秘的 **kwargs 是其中一块里程碑。

字典前面的双星号支持把字典的内容作为命名参数传递给函数。

字典的秘钥是参数名,值是传递给函数的值,用户甚至都不需要称它为 kwargs

dictionary = {"a": 1, "b": 2}

def someFunction(a, b):

print(a + b)

return

someFunction(**dictionary)

someFunction(a=1, b=2)当用户编写处理事先未定义的命名参数的函数时,这个很有用。

列表解析

在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)

print(list(y))在上面的例子中 map() 对X中的每个元素应用了简单的lambda函数

它返回一个map object类型,可以被转换成一些可迭代对象,例如列表或元组

newspaper3k

如果你之前没有见过newspaper3k的话,那么请准备好被这个Python的newspaper模块所震撼吧

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

newspaper模块甚至有一些内置的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)

something > nothing

something < nothing

something + nothing

pprint

Python 的默认函数 print 可以实现打印功能,但是如果打印的嵌套对象体量比较大,就会发现打印结果不太美观。

这时就需要用到标准库pretty-print 模块。它能用可读性强的方式打印出复杂结构的对象。

Python 开发者的必备技能之一是处理复杂的数据结构。

import requests

import pprint

url = 'https://randomuser.me/api/?results=1'

users = requests.get(url).json()

pprint.pprint(users)

Queue

Python 支持多线程,这可以通过标准库的 Queue 模块来实现。Queue 模块让用户可以实现队列数据结构,该数据结构允许用户通过特定的方法添加和检索数据。

“First in ,first out ”(或 FIFO) 队列数据结构允许用户依据对象添加的顺序检索对象,“Last in,first out”(LIFO)数据结构允许用户先连接到最近添加的对象。

最后,优先队列允许用户依据存储顺序检索对象。

这是 Python 中针对多线程编程使用queues 的一个实例。

_rep r_

在 Python中定义类或对象时,提供一种字符串表示对象的“官方”方法很实用。举个例子:

>>> file = open('file.txt', 'r')

>>> print(file)

这让代码调试变得更加简单。如下图所示添加类的定义:

class someClass:

def __repr__(self):

return ""

someInstance = someClass()

print(someInstance)

Sh

Python 是一种很棒的脚本语言。有时使用标准操作系统以及子进程库是很令人头疼的一个问题。

Sh 库提供了一种简介的替代方案。

它允许用户在调用程序时如同调用函数一般,这对自动化工作流和任务非常有用。所有的都来自 Python 内部。

from sh import *

sh.pwd()

sh.mkdir('new_folder')

sh.touch('new_file.txt')

sh.whoami()

sh.echo('This is great!')

类型提示

Python 是动态语言,在定义变量,函数,类别……时无需指定数据类型。

这个设定允许快速开发,但是由于简单的类型错误比运行错误更烦人。

从Python3.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)尽管类型注释是非强制性的,但是这能让代码更具可读性。

Python3.5+ 还允许用户使用类型提示工具在运行前知晓类型错误,这在大型的复杂项目中是非常值得的。

uuid

生成通用唯一标识符的快速简便方法是Python 标准库中的 uuid 模块。

import uuid

user_id = uuid.uuid4()

print(user_id)它随机生成 128位唯一数字。

事实上一共有

个可能生成的UUID。 这个数值超过了

5,000,000,000,000,000,000,000,000,000,000,000,000,000。

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

仅用两行代码即可生成通用唯一标志符,非常棒!

虚拟环境

这是我最喜欢的 Python 部分。

用户可能需要同时处理多个 Python 项目。不幸的是,有时候两个项目依赖于相同依赖项的不同版本。那么用户应该下载哪个版本的依赖库呢?幸运的是,Python 支持虚拟环境,让用户能够同时利用两种环境。命令行如下:

python -m venv my-project

source my-project/bin/activate

pip install all-the-modules现在一台机器上可以支持两个版本的 Python 了。问题解决!

Wikipedia

Wikipedia 具备非常棒的 API ,允许用户以编程方式访问庞大的知识和信息。

Wikipedia 模块使得访问 Wikipedia API 非常地方便。

import wikipedia

result = wikipedia.page('freeCodeCamp')

print(result.summary)

for link in result.links:

print(link)和真实的 Wikipedia 类似,模块支持多种语言,页面消歧,随机页面检索,甚至还有donate()方法

Xkcd

Humour 是 Python的关键特征——毕竟它的名字来源于英国喜剧片《Monty Python 的飞行马戏团》,Python 的很多官方文档引用了该片的情节。

Python 的幽默感并不局限于官方文档 。运行下述命令行:

import antigravity希望Python 不要改变它的幽默风格

YAML

YAML ’t Markup Language。它是一种数据格式语言,是JSON 的超集

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

PyYAML模块让用户在 Python 中使用 YAML 。安装命令行如下:

$ pip install pyyaml然后导入到用户的项目中:

import yamlPyYAML允许您存储任何数据类型的Python对象,以及任何用户定义类的实例。

Zip

最后的一个 Python 技巧,它真的很棒。还在用两个列表来组成字典这样的方法吗?

keys = ['a', 'b', 'c']

vals = [1, 2, 3]

zipped = dict(zip(keys, vals))Zip() 内置函数使用多个可迭代对象作为输入并返回元组列表。每个元组列表依据位置索引对输入对象的元素进行分组。

用户也可以使用 *zip() 来解压对象

感谢阅读

以上就是 A-Z 的 Python 技巧——相信你已经找到有用于下一个项目的技巧了。

Python 是一个非常多样化并且发展良好的编程语言,所以我对 Python 许多非常棒的特征会有疏漏。

请在下方回复并分享你最喜欢的 Python 技巧!

想要继续查看该篇文章更多代码、链接和参考文献?

戳链接:

http://www.gair.link/page/TextTranslation/948

A一个专注于

AI技术发展和AI工程师成长的求知求职社区

诞生啦!

欢迎大家访问以下链接或者扫码体验https://club.leiphone.com/page/home​club.leiphone.com

python3实用编程技巧_你想要的Python编程技巧,我都给你整理好了相关推荐

  1. 树莓派python编程优点_树莓派为什么会使用python编程?为什么有时python运行效率不高?...

    在许多编程语言中,Python的语法也有很大不同.Python使用空格或缩进来分隔不同的代码块.C语言和其他语言使用花括号来区分不同的代码块,例如if语句,Python使用冒号和缩进来定义代码块.这也 ...

  2. python编程学习_使用EduBlocks轻松学习Python编程

    python编程学习 如果您正在寻找一种让学生(或您自己)从Scratch编程转向学习Python的方法 ,建议您研究EduBlocks . 它为Python 3编程带来了熟悉的拖放式图形用户界面(G ...

  3. 青少年python编程入门书籍_新书推荐 | 《青少年Python编程入门——图解Python》

    原标题:新书推荐 | <青少年Python编程入门--图解Python> 随着信息时代的到来,在编程教育中进行计算思维培养正在成为信息技术教育关注的重点.<普通高中信息技术课程标准( ...

  4. 计算机科学与python编程导论_计算机科学入门和使用Python编程

    你将学到什么 A Notion of computation The Python programming language Some simple algorithms Testing and de ...

  5. python采用那种编程模式_使用Mixin设计模式进行Python编程的方法讲解

    class BetterSimpleItemContainer(object, DictMixin): def __getitem__(self, id): return self.data[id] ...

  6. python金融编程入门_【量化小讲堂- Python、pandas技巧系列】如何快速上手使用Python进行金融数据分析...

    如何快速上手使用Python进行金融数据分析 引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. [必读文章 ...

  7. python开发cad教程视频_我是编程小白,我想视频学习Python会不会能学会?

    其实Python入门并不难,只要你有足够的自信心,明确学习目标,循序渐进就能不断享受到python带给你创新的乐趣. 之前我也是看了很多python入门视频教程,个人觉得有几个还是很不错的,大家可以学 ...

  8. python 广告联盟_聚力商城的Python编程书怎么样?

    大数据时代Python编程优显其作用,身边很多人都在学,有的还能自学成才,所以我最近也在聚力商城买了一本Python编程书,很多人不知道聚力商城的Python编程书怎么样?我就来说说自己的感受吧. 这 ...

  9. python怎么编写口算题_来出口算题—— Python编程

    原标题:来出口算题-- Python编程 今天,小编带大家做一个实用的小程序,也就是计算题生成器. 低年级的小朋友,最需要提高的就是计算能力,而计算能力的提升离不开有效的练习,而手动出题总会有局限性, ...

  10. ironbot智能编程机器人_边玩边学,编程启蒙,IronBot机器人套件视频图文评测

    前言 当今世界充满竞争和挑战,你的对手可能不是人.早在2015年,教育部就颁发了指导意见,鼓励以编程为核心的,包括科学(S).技术(T).工程(E).艺术和航空(A),以及数学(M)五个方面的&quo ...

最新文章

  1. 生活总有烦心事? 可能是你数学不好
  2. 【数学和算法】最小二乘法,SVD奇异值分解、LU分解的应用场景
  3. c语言 枚举,位运算
  4. 传统生成API文档弊端
  5. 【转载】网络流和最小费用流
  6. Gmapping——从原理到实践
  7. 图解Android 内存分析工具之Mat使用教程
  8. python--递归计算n的价乘
  9. python AttributeError: 'module' object has no attribute 'dumps'解决办法
  10. 圆你的大厂梦!字节跳动Java高频面试题真题一二三面常见问题
  11. 用打印服务器打印 打印机显示脱机,打印机提示脱机使用,无法打印,该怎么解决?...
  12. oracle11g查看数据库名称,oracle11g系列 事物和常用数据库对象
  13. 逻辑回归分类——信用卡诈骗检测!这才是干货!
  14. 看板 工具_2019年14种最佳看板工具
  15. python三维建模可视化_用Python三维可视化-一个神奇的函数
  16. 【2022】年度总结——彼此当年少 莫负好时光
  17. 计算机视觉 专业术语,计算机视觉中常用的术语.doc
  18. 软考-信息系统项目管理师-论文
  19. 5个免费的项目管理工具7款最流行的在线项目管理工具
  20. 热部署与定时任务冲突问题解决方案

热门文章

  1. 2007全球前50佳网站
  2. 视觉 注意力机制——通道注意力、空间注意力、自注意力
  3. 三菱FX2N:PC与PLC建立通讯的几种方式(SC-09通讯电缆+FX2N-485-BD通讯板)
  4. Cobaltstrike Socks 代理隧道
  5. form表单中@submit.prevent作用
  6. 路由协议常见FAQ-V1.1
  7. 【长安的荔枝】读书摘记
  8. 代理服务器(Proxy)原理
  9. 汇编指令rep stosq
  10. 代码动态改变view的大小