1 Python 中的5种隐藏技巧-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

Python 中的5种隐藏技巧

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 16:26 次阅读

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

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

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

    关注

    1

    文章

    578

    浏览量

    20506
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84624
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25939
  • Lambda
    +关注

    关注

    0

    文章

    28

    浏览量

    9870
收藏 人收藏

    评论

    相关推荐

    回声隐藏在音频数字水印的应用

    信息隐藏技术对版权保护的作用非常重要。回声隐藏是信息隐藏的一常见应用,是对原始音频加入回声从而达到对秘密信息隐藏的一
    发表于 03-03 23:21

    5Python实现方式详解

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

    如何隐藏CAD图纸的部分图形对象?CAD局部隐藏

    在CAD绘图过程,如果想要局部隐藏一些CAD图纸的对象的话该如何操作呢?有些CAD新手可能对此并不清楚,下面就和小编一起来了解一下浩辰CAD建筑软件CAD局部
    发表于 06-06 17:55

    1.3 两运行 Python 程序方法

    在 PowerShell 输入 python dmeo.py,就可以执行这个 python 脚本啦。以上介绍了两最原始的 Python
    发表于 02-16 18:31

    Python 转义字符的5表示方法

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

    如何在 IIS 执行 Python 脚本

    如何在 IIS 执行 Python 脚本 Python 是一解释脚本语言,概念类似 Microsoft Visual Basic Scripting Edition (VBSc
    发表于 02-23 15:13 1257次阅读

    Python是什么_python能做什么

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

    Python略高级特征的使用方法

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

    关于Python5高级特征应用

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

    如何在Linux查看隐藏文件

    在windows可以查看隐藏的文件。在Linux也可以查看隐藏文件且非常容易。要查看隐藏文件运行`ls -a`命令即可。
    的头像 发表于 01-04 17:31 1.6w次阅读

    Python的for循环结构

    Python ,for 循环是一常用的结构,用于遍历序列(如列表、元组、字符串)的元素。
    的头像 发表于 04-19 15:45 2334次阅读

    Python的数组创建

    Python 是一高级编程语言,具有简洁的语法和易于学习的特点。它是一解释型语言,可以轻松地在不同平台上运行。Python 的数组是一
    的头像 发表于 04-20 16:52 1448次阅读

    Python5隐藏技巧

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

    pythontuple的用法

    Python的元组(tuple)是一不可变的有序集合。与列表(list)类似,元组可以存储任意类型的数据,但是元组一旦创建就不能被修改。在Python
    的头像 发表于 11-21 16:27 962次阅读

    pythonnumber代表什么

    Python,number(数字)是一内置的数据类型,用于表示数值。Python提供了几种不同的number类型,分别是整数(int)、浮点数(float)、复数(complex
    的头像 发表于 11-22 09:50 2014次阅读