首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

精选 26 个 Python 实用技巧,想秀技能先 Get 这份技术列表!

  • 24-03-05 03:20
  • 3239
  • 5370
blog.csdn.net

640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | Peter Gleeson

译者 | 婉清

编辑 | Jane

出品 | AI科技大本营

Python 虽然是脚本语言,但是因为其易学,迅速成为科学家的工具,从而积累了大量的工具库、架构,人工智能涉及大量的数据科学,用 Python 是很自然的事。磨刀不误砍柴工,要入门人工智能领域,就必须掌握 Python。让我们来看看 Peter Gleeson 整理的 26 个  Python 有用的技巧。

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

  • 很容易学习;

  • 支持的功能丰富;

  • 有大量的模块和库。

作为一名数据科学家,我每天都使用 Python 进行工作。一路走来,我得到了一些有用的技巧和秘诀。

在本文中,我将按照首字母从 A~Z 的顺序分享其中一些内容。

这些技巧中的大多数是我在日常工作中使用的或者偶然发现的。其中有一些,是我在浏览 Python 标准库时发现的。另外还有一些是通过在 PyPi 中搜索得到的。

译注: PyPI(Python Package Index)是 Python 官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到 PyPI。PyPI 推荐使用 pip 包管理器来下载第三方库。

https://docs.python.org/3/library/

https://pypi.org/search/

此外,有一家网站非常值得赞赏:Awesome Python,我在这上面发现了四五个技巧。这是一个非常值得浏览的精选列表,收录了数百个有趣的 Python 工具和模块,有助于激发你的灵感!

译注: Awesome Python 由 vinta 发起和维护。内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。

中文版:

https://github.com/jobbole/awesome-python-cn

英文版:

https://awesome-python.com/

▌all 或 any

Python 如此受欢迎,原因之一是因为它具有可读性和可表达性。

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

640?wx_fmt=png

▌bashplotlib

你想在控制台(console)上绘制图形吗?

640?wx_fmt=png

这样你在控制台中就可以绘制图形了。

▌collections 模块

Python 有一些很好的默认数据类型,但有时它们的行为并不完全像你所期望的那样。

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

https://docs.python.org/3/library/collections.html

640?wx_fmt=png

▌dir

你是否知道如何查看 Python 对象并查看它都有哪些属性?使用命令行:

640?wx_fmt=png

当你通过交互方式来运行 Python,并动态地探索你正在使用的对象和模块时,这一功能就非常有用了。要了解更多信息请访问:

https://docs.python.org/3/library/functions.html#dir

▌Emoji

如何打出 emoji 表情?参阅:

https://pypi.org/project/emoji/

640?wx_fmt=png

不要跟我说你不会去尝试噢~?

640?wx_fmt=png

▌from __future__ import

Python 如此广受欢迎还有一个原因是它总是开发新版本。要知道,新版本意味着有新功能。但你不必害怕所用的版本过时了。这个__future__模块可以让你在现有版本上导入 Python 未来版本的功能。这一特征就好像时间旅行机一样,让未来的东西穿越到现在来使用。

640?wx_fmt=png

为什么不去导入花括号呢?请参见 stackoverflow 上的问答:

https://stackoverflow.com/questions/17811855/syntax-error-not-a-chance

▌geopy 模块

对程序员来说,地理环境可能是一个具有挑战性的领域。但是,有了 geopy 模块,这一切就都变得简单了。参阅:

https://geopy.readthedocs.io/en/latest/

640?wx_fmt=png

geopy 模块是通过抽象出一系列不同的地理编码服务的 API 来工作。它可以让你获得某一地点的完整街道地址、维度、精度甚至海拔高度。

还有一个有用的距离类。它可以使用你喜欢的测量单位来计算两个位置之间的距离。

640?wx_fmt=png

▌howdoi

你有没有遇到过这样的困境:遇到编码的问题忘记了以前见过的解决方案,或者需要检查 StackOverflow,但又不想离开终端。

要摆脱这一困境,你需要这个有用的命令行工具——howdoi,参阅:

https://github.com/gleitz/howdoi

640?wx_fmt=png

有了 howdoi,无论你问它什么问题,它都会尽力回答。

640?wx_fmt=png

但有一点要注意的是:howdoi 是从 StackOverflow 的热门答案中抓取代码,它提供的信息可能不是最有用的。

640?wx_fmt=png

译注: Stack Overflow 是一个与程序相关的 IT 技术问答网站。用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的 HTML。在问题页面,不会弹出任何广告,销售信息,JavaScript 窗口等。 2008 年由 Jeff Atwood 和 Joel Spolsky 创建。

▌inspect 模块

PYthon 的 inspect 模块对于理解幕后发生的事情非常有用。你甚至可以自己调用它的方法!参阅:

https://docs.python.org/3/library/inspect.html

如下所示的代码段,使用了 inspect.getsource() 来打印自己的源代码。它还使用了 inspect.getsource() 来打印定义它的模块。

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

640?wx_fmt=png

当然,除去这些简单的用途之外,inspect 模块对于理解代码的作用也非常有用。你也可以使用它来写自编文档代码。

▌Jedi

Jedi 库是一个自动完成和代码分析的库。它能够使编写代码更为快速、更为高效。

除非你正在开发自己的 IDE,否则你可能对使用 Jedi 作为编辑器插件最感兴趣。幸运的是,现在加载这个插件已经可以用了!不过,你可能已经用上Jedi 了。IPython 项目的代码自动完成功能就是使用Jedi来实现的。

https://jedi.readthedocs.io/en/latest/docs/usage.html

▌**kwargs

在学习任何语言的过程中,都会遇到许多里程碑。使用Python,理解神秘的 **kwargs 语法可能就是其中之一。

dictionary 对象前面的双星号允许您将该 dictionary 的内容作为命名参数传递给函数。详见:

https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments

dictionary 的键是参数名,值是传递给函数的值。你甚至不需要叫它 kwargs!

640?wx_fmt=png

当你想编写可以处理未预先定义的命名参数的函数时,这就非常有用了。

▌List Comprehensions

关于 Python 编程,我最喜欢的事情之一是它的列表生成式(List Comprehensions),参见:

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

这些表达式可以很容易编写出简洁的代码,读起来几乎就像自然语言一样。你可以访问下面的网址来了解 List Comprehensions 应该要怎么使用:

https://www.learnpython.org/en/List_Comprehensions

640?wx_fmt=png

▌map

Python 是通过许多内置功能支持函数式变成。其中最有用的函数之一是 map() 函数,特别是这个函数与 lambda 函数结合使用时。参阅:

https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions

640?wx_fmt=png

在如上所示的代码段中,map() 对每个元素 x 都应用了一个简单的 lambda 函数。它返回一个 map 对象,这个对象可以转换为某些可迭代的对象,例如 listh 或 tuple。

▌newspaper3k 模块

如果你还没见过它,那你见到 Python 的 newspaper 模块可不要被它震撼到了。参阅:

https://pypi.org/project/newspaper3k/

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

它甚至内置了一些 NLP 功能

详见:

https://newspaper.readthedocs.io/en/latest/user_guide/quickstart.html#performing-nlp-on-an-article

如果你想为你的项目使用 BeautifulSoup 或其他一些自己打造的 webscraping 库,你可以用 $ pip install newspaper3k 为你节省时间和精力。

▌Operator overloading

Python 提供了对运算符重载的支持。

详见:

https://docs.python.org/3/reference/datamodel.html#special-method-names

其实这是一个简单的概念。有没有想过为什么 Python 允许使用 + 运算符来添加数字和连接字符串?这就是运算符重载的功劳。

你可以按照自己的特定方式定义使用 Python 标准运算符符号的对象。这样,你就可以在正在使用的对象相关的上下文中使用它们。

640?wx_fmt=png

译注:运算符重载(operator overloading),简单地说,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

▌pprint

Python 的默认 print 函数可以完成打印作业。但是如果尝试让 Python 打印任何大型的嵌套对象,打印结果会非常难看。

这就要用到 Python 标准库中的 pretty-print 模块了。这个模块能够以易于阅读的格式打印出复杂的结构化对象。参阅:

https://docs.python.org/3/library/pprint.html

这个模块对于任何使用复杂数据结构的 Python 开发者来说都是必备的。

640?wx_fmt=png

▌Queue

Python 支持多线程,可以通过标准库的 Queue 模块来实现。

这个模块可以让你实现队列数据结构。这些数据结构允许你根据特定规则添加和检索条目。

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

最后,优先级队列允许你根据对象的排序次序来检索对象。Python 使用队列进行多线程变成的示例可参见:

https://www.tutorialspoint.com/python3/python_multithreading.htm

▌__repr__

在 Python 中定义类或对象时,提供一种将该对象表示为字符串的“官方”方法是很有用的。例如:

640?wx_fmt=png

这使得代码的调试变得更加容易。将其添加到你的类定义中,如下所示:

640?wx_fmt=png

▌sh

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

sh 库提供了一个简洁的替代方法。

http://amoffat.github.io/sh

sh 库允许你像普通函数一样调用任何程序,这点对于自动化工作流和任务非常有用,所有这些都来自 Python 内部。

640?wx_fmt=png

▌Type hints

Python 是一种动态类型的语言。在定义变量、函数、类等时,不需要指定数据类型。

这一特性让开发者能够快速开发项目。但是,很少有比简单的输入问题导致的运行时错误更烦人的事情了。

从 Python 3.5 开始,你就可以选择在定义函数时提供 type hintsl 。详见:

https://docs.python.org/3/library/typing.html

640?wx_fmt=png

你可以这样定义类型别名:

640?wx_fmt=png

虽然定义类型别名不是强制性的,但是类型注释可以让你的代码更容易理解。

它们还允许你使用类型检查工具在运行时之前捕获那些零散的 TypeErrors。如果你正在开发大型复杂的项目,那么这很可能是值得一试的!

▌uuid

通过 Python 标准库的 uuid 模块,可以快速简单地生成通用唯一 ID(或“uuid”)。详见:

https://docs.python.org/3/library/uuid.html

640?wx_fmt=png

uuid 模块会创建一个随机的 128 位数字,几乎可以肯定是唯一的。

实际上,可以生成超过 2¹²² 个可能 UUID,这一数字超过了5,000,000,000,000,000,000,000,000,000,000,000,000(数字 5 后面有 36 个数字 0)。

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

用两行代码就实现了,还是很不错的。

译注: uuid 是通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的uuid。在这样的情况下,就不需考虑数据库创建时的名称重复问题。

▌Virtual environments

这可能是 Python 中我最喜欢的部分了。

你有可能同时会处理多个 Python 项目。然而不幸的是,有时两个项目会依赖于相同依赖关系的不同版本。你在系统上都安装了哪些版本的依赖关系呢?

幸运的是,Python 对虚拟环境的支持,参见:

https://docs.python.org/3/tutorial/venv.html

可以让你充分这两个项目的优点。在命令行输入如下内容:

640?wx_fmt=png

现在,你可以在同一台机器上安装、运行Python不同的独立版本。

▌wikipedia

Wikipedia 有一个很棒的 API,它允许用户通过编程方式访问无与伦比的、完全免费的知识和信息。

wikipedia 模块使访问这个 API 变得非常方便。

https://wikipedia.readthedocs.io/en/latest/quickstart.html

640?wx_fmt=png

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

译注: Wikipedia,是一个基于维基技术的多语言百科全书协作计划,用多种语言编写的网络百科全书。

▌xkcd

幽默是 Python 语言的一个重要特征——毕竟,它是以英国喜剧小品节目 Monty Python 的飞行马戏团命名的。Python 的许多官方文档都参考了该剧最著名的短剧。详见:

https://en.wikipedia.org/wiki/Monty_Python%27s_Flying_Circus

然而,这些幽默并不局限于文档,试一试下面的运行方式:

640?wx_fmt=png

绝不改变,Python。永不改变。

▌YAML

YAML 代表的是“YAML Ain’t Markup Language”,它是一种数据格式化语言,是 JSON 的超集。详见:

http://yaml.org/

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

PyYAML 模块允许你在 Python 中使用 YAML。先安装 PyYAML:

640?wx_fmt=png

然后导入到你的项目中:

640?wx_fmt=png

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

详见:

https://pyyaml.org/wiki/PyYAMLDocumentation 

YAML 是一种简洁的非标记语言。YAML 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。它是类似于标准通用标记语言的子集 XML 的数据描述语言,语法比 XML 简单很多。

▌zip

这是本文最后的一个技巧了,非常酷!你有没有过需要从两个列表中创建一个字典的想法呢?

640?wx_fmt=png

zip() 内置函数接受许多可迭代对象并返回元组列表。每个元组根据对象的位置索引对其元素进行分组。

你还可以通过调用 *zip() 来“解压缩”对象。

原文链接:

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

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=gif

 热 文 推 荐 

☞狼性文化遭质疑,那我们当个佛系程序员可好?

☞狼性的华为,是否有人性?

☞开除“野狗”式程序员,团队的效率提高了

☞为什么都瞧不起培训班出来的程序员?

☞腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验

☞等了20年的物联网,这次真的会成功吗?

☞20k~65k, 寒冬技术人才仍是刚需, 最后一波热门岗位来袭,快到碗里来

☞老程序员肺腑忠告:千万别一辈子靠技术生存!

 
 

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧! ");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!";

640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png 喜欢就点击“好看”吧!
程序人生
微信公众号
笑谈开发轶事,品味程序人生。
注:本文转载自blog.csdn.net的CSDN 程序人生的文章"https://blog.csdn.net/csdnsevenn/article/details/85497767"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top