不能不懂的 Python 7大功能和特点

在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性。一些可以说是非常有用,但却没有充分利用。考虑到这一点,我编辑了一些你应该了解的Python功能特色。

带任意数量参数的函数

你可能已经知道了Python允许你定义可选参数。但还有一个方法,可以定义函数任意数量的参数。

首先,看下面是一个只定义可选参数的例子

现在,让我们看看怎么定义一个可以接受任意参数的函数。我们利用元组来实现。

使用Glob()查找文件

大多Python函数有着长且具有描述性的名字。但是命名为glob()的函数你可能不知道它是干什么的除非你从别处已经熟悉它了。

它像是一个更强大版本的listdir()函数。它可以让你通过使用模式匹配来搜索文件。

你可以像下面这样查找多个文件类型:

如果你想得到每个文件的绝对路径,你可以在返回值上调用realpath()函数:

调试

下面的例子使用inspect模块。该模块用于调试目的时是非常有用的,它的功能远比这里描述的要多。

这篇文章不会覆盖这个模块的每个细节,但会展示给你一些用例。

生成唯一ID

在有些情况下你需要生成一个唯一的字符串。我看到很多人使用md5()函数来达到此目的,但它确实不是以此为目的。

其实有一个名为uuid()的Python函数是用于这个目的的。

你可能会注意到,即使字符串是唯一的,但它们后边的几个字符看起来很相似。这是因为生成的字符串与电脑的MAC地址是相联系的。

为了减少重复的情况,你可以使用这两个函数。

序列化

你曾经需要将一个复杂的变量存储在数据库或文本文件中吧?你不需要想一个奇特的方法将数组或对象格转化为式化字符串,因为Python已经提供了此功能。

这是一个原生的Python序列化方法。然而近几年来JSON变得流行起来,Python添加了对它的支持。现在你可以使用JSON来编解码。

这样更紧凑,而且最重要的是这样与JavaScript和许多其他语言兼容。然而对于复杂的对象,其中的一些信息可能丢失。

压缩字符

当谈起压缩时我们通常想到文件,比如ZIP结构。在Python中可以压缩长字符,不涉及任何档案文件。

注册Shutdown函数

有可模块叫atexit,它可以让你在脚本运行完后立马执行一些代码。

假如你想在脚本执行结束时测量一些基准数据,比如运行了多长时间:

打眼看来很简单。只需要将代码添加到脚本的最底层,它将在脚本结束前运行。但如果脚本中有一个致命错误或者脚本被用户终止,它可能就不运行了。

当你使用atexit.register()时,你的代码都将执行,不论脚本因为什么原因停止运行。

结论

你是否意识到那些不是广为人知Python特性很有用?请在评论处与我们分享。谢谢你的阅读!

end

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2016-01-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

Python选择结构注意事项

以百分制成绩转换为字母等级成绩为例,简单介绍一下Python选择结构需要注意的事项。

1623
来自专栏编程

代码生成利器:IDEA 强大的 Live Templates

文章转自:http://blog.xiaohansong.com/2017/03/17/idea-live-templates/ 前言 Java 开发过程经常需...

4655
来自专栏技术专栏

Scala入门与进阶(一)- 初始Scala

1182
来自专栏哲学驱动设计

巧用拦截器:高效的扩展点设计

最近在设计框架时,需要设计一类扩展点,发现不能简单地继承或使用事件来给使用者提供 API。最终使用拦截器模式解决了 API 的设计。 扩展点使用场景 ...

21310
来自专栏漏斗社区

工具| 关于Python线程和队列使用的小思考

斗哥采访环节 (1). 请问为什么要使用线程? 答:为了提高程序速度,代码效率呀。 (2). 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实...

3676
来自专栏IMWeb前端团队

js依赖注入初探

本文作者:IMWeb coolriver 原文出处:IMWeb社区 未经同意,禁止转载 前言:一个题目 之前在codewars上做在线题目时遇到这样一...

3569
来自专栏H2Cloud

安全编程-c++野指针和内存泄漏

摘要:   尽管C++ 野指针和内存泄漏一直被诟病,但是在实时性很强的应用场合,c++ 仍然是不二之选。游戏服务器开发仍然使用c++ 作为主语言,但是大多结合动...

4085
来自专栏抠抠空间

python常见模块之序列化(json与pickle以及shelve)

什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serializatio...

4786
来自专栏熊二哥

Python快速入门

最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大。很多身边的哥们也提到Python非常的简洁方便,比如用...

31510
来自专栏Java后端技术栈

Java 虚拟机内存区域划分详解(1)

JVM,java virtual machine, 即Java虚拟机,是运行java class文件的程序。

1074

扫码关注云+社区

领取腾讯云代金券