0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python的5种隐藏技巧

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-01 16:17 次阅读

**1. ... 对象

**

没错,你没看错,就是 ...

Python中...代表着一个名为 Ellipsis 的对象。根据官方说明,它是一个特殊值,通常可以作为 空函数的占位符 ,或是 用于Numpy中的切片操作

如:

def my_awesome_function():
    ...

等同于:

def my_awesome_function():
    Ellipsis

当然,你也可以使用pass或者字符串作为占位符:

def my_awesome_function():
    pass
def my_awesome_function():
    "An empty, but also awesome function"

他们最终的效果都是相同的。

接下来讲讲...对象是如何在Numpy中体现出作用的,创建一个 3x3x3 的矩阵数组,然后获取所有最内层矩阵的第二列:

> >> import numpy as np
> >> array = np.arange(27).reshape(3, 3, 3)
> >> array
array([[[ 0, 1, 2],
        [ 3, 4, 5],
        [ 6, 7, 8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

为了获取最层矩阵的第二列,传统方法可能是这样的:

> >> array[:, :, 1]
array([[ 1, 4, 7],
       [10, 13, 16],
       [19, 22, 25]])

如果你会用...对象,则是这样的:

> >> array[..., 1]
array([[ 1, 4, 7],
       [10, 13, 16],
       [19, 22, 25]])

不过请注意, ... 对象仅可用于Numpy,不适用于Python内置数组。

2.解压迭代对象

解压迭代对象是一个非常方便的特性:

>> > a, *b, c = range(1, 11)
 >> > a
1
 >> > c
10
 >> > b
[2, 3, 4, 5, 6, 7, 8, 9]

或者是:

>> > a, b, c = range(3)
 >> > a
0
 >> > b
1
 >> > c
2

同理,与其写这样的代码:

>> > lst = [1]
 >> > a = lst[0]
 >> > a
1
 >> > (a, ) = lst
 >> > a
1

你不如跟解压迭代对象一样,进行更优雅的赋值操作:

>> > lst = [1]
 >> > [a] = lst
 >> > a
1

虽然这看起来有点蠢,但就我个人来看,比前一种写法更优雅一些。

3.展开的艺术

数组展开有各种千奇百怪的姿势,比如说:

>> > l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 >> > flattened = [elem for sublist in l for elem in sublist]
 >> > flattened
[1, 2, 3, 4, 5, 6, 7, 8, 9]

如果你对reduce和lambda有一定了解,建议使用更优雅的方式:

>> > from functools import reduce
 >> > reduce(lambda x,y: x+y, l)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

reduce和lambda组合起来,就能针对 l 数组内的每个子数组做拼接操作。

当然,还有更神奇的方式:

> >> sum(l, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
> >> # 其实相当于 [] + [1, 2, 3] + [4, 5, 6] + [7, 8, 9]

没错,这样对二维数组做sum操作,就能使二维数组内的每个元素做“加”法拼接起来。

同样的道理,如果你对三位数组做sum操作,就能使其变为二维数组,此时再对二维数组做sum操作,就能展开为一维数组。

虽然这个技巧很出色,但我并不推荐使用,因为可读性太差了。

4.下划线 _ 变量

每当你在Python解释器,IPython或Django Console中运行表达式时,Python都会将输出的值绑定到 _ 变量中:

>> > nums = [1, 3, 7]
 >> > sum(nums)
11
 >> > _
11
 >> >

由于它是一个变量,你可以随时覆盖它,或像普通变量一样操作它:

>> > 9 + _
20
 >> > a = _
 >> > a
20

5.多种用途的else

很多人都不知道,else 可以被用于许多地方,除了典型的 if else, 我们还可以在循环和异常处理里用到它。

循环

如果需要判断循环里是否处理了某个逻辑,通常情况下会这么做:

found = False
a = 0

while a < 10:
    if a == 12:
        found = True
    a += 1
if not found:
    print("a was never found")

如果引入else,我们可以少用一个变量:

a = 0

while a < 10:
    if a == 12:
        break
    a += 1
else:
    print("a was never found")

异常处理

我们可以在 try ... except ... 中使用 else 编写未捕获到异常时的逻辑:

In [13]: try:
    ...: {}['lala']
    ...: except KeyError:
    ...: print("Key is missing")
    ...: else:
    ...: print("Else here")
    ...:
Key is missing

这样,如果程序没有异常,则会走else分支:

In [14]: try:
    ...: {'lala': 'bla'}['lala']
    ...: except KeyError:
    ...: print("Key is missing")
    ...: else:
    ...: print("Else here")
    ...:
Else here

如果你经常做异常处理,你就会知道这个技巧相当方便。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20509
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62583
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84646
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25941
收藏 人收藏

    评论

    相关推荐

    5Python实现方式详解

    python就是是一面向对象的解释型计算机程序设计语言,具有丰富和强大的库,语言因其简洁性、易读性以及可扩展性受到欢迎。python可用于图形处理、数学处理、文本处理、数据库编程、网络编程、Web
    发表于 05-22 15:52

    labview如何调用Python

    最近在尝试用labview调用Python的软件,目前知道的有两方式,一是NI开发的enthought工具包,这个需要购买,且试用期为30天,暂不考虑了。另外一是最新的labvi
    发表于 01-10 13:53

    为什么要提出一数据隐藏新算法?

    为什么要提出一数据隐藏新算法?DDE双重差值扩展算法包括哪些?
    发表于 04-20 07:05

    为什么近5年来,Python语言持续火爆?

    之下,非常简洁易学。4、大厂都在使用Python百度、新浪、阿里、腾讯、头条等互联网相关企业都在使用,对Python的人才需求很大。5、人工智能的兴起随着人工智能的兴起,Python
    发表于 07-16 16:43

    1.3 两运行 Python 程序方法

    1.3 两运行 Python 程序方法前两节我们安装好了 CPython 解释器,有了解释器,就可以运行 Python 程序了。Python 程序的执行分为两
    发表于 02-16 18:31

    Python 转义字符的5表示方法

    ;>> repr(body)"'hello\\nworld'"5. 使用 string_escape如果你还在使用 Python 2 ,其实还可以使用另一方法。那就是
    发表于 04-11 15:18

    Python是什么_python能做什么

    Python是一编程语言,它的名字来源于一个喜剧。也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用。著名的自由软件作者Eric Ray
    发表于 11-20 11:36 1.2w次阅读

    Python中五略高级特征的使用方法

    Python 多好用不用多说,大家看看自己用的语言就知道了。但是 Python 隐藏的高级功能你都 get 了吗?本文中,作者列举了 Python 中五
    的头像 发表于 04-24 10:12 3212次阅读

    关于Python5高级特征应用

    本文主要讲解 Python5 高级特征,以及它们的用法。 1. Lambda 函数 Lambda 函数是一比较小的匿名函数匿名是指它实际上没有函数名。
    的头像 发表于 09-27 15:56 1374次阅读

    加快运行Python速度的五技巧

    我们都知道就速度而言,Python是比Java或C慢得多的语言。Python是动态类型化的语言,这意味着它的变量类型未预定义。动态类型是一把双刃剑,它成就了Python成为一优雅的语
    的头像 发表于 01-04 17:14 3869次阅读

    Python是一什么语言,它可以用来做些什么

    智慧人生,首选Python Python是一什么语言? Python是一计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非
    发表于 04-12 10:56 1285次阅读

    python统计词频的三方法

    python统计词频的三方法方法。
    发表于 05-25 14:33 2次下载

    10聚类介绍和Python代码

    分享一篇关于聚类的文章,10聚类介绍和Python代码。
    的头像 发表于 07-30 10:25 3047次阅读

    python如何通过_X和all隐藏模块数据

    python的_X指出不被复制的变量,**all**指出要复制的变量。
    的头像 发表于 02-21 11:29 578次阅读

    Python 中的5隐藏技巧

    1. ... 对象 没错,你没看错,就是 "..." 在Python中 ... 代表着一个名为 Ellipsis 的对象。根据官方说明,它是一个特殊值,通常可以作为 空函数的占位符 ,或是 用于
    的头像 发表于 10-21 16:26 486次阅读