Python 你可能从未听说过的5种隐藏技巧

Android Treble 简介 上面两段话来自官网上,Android 8.0 重新设计了 Android 操作系统框架(在一个名为“Treble”的项目中),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。本文主要整理一下Android Treble框架。 阅读详情

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

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

我们的文章到此就结束啦!

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~

微信对话开放平台智能对话模块的几个亮点 微信AI首席科学家牛成公布了最新开放方案,并重磅宣布全面开放各层次 NLP 能力。具体说来,微信 AI 迈出了“三大步”: 以硬件合作为核心的智言小微硬件开放平台 2.0 正式亮相; 公开以对话开放能力为核心的微信对话开放平台; 全面开放以自然语言处理能力为核心的 NLP 基础技术平台。 参考:微信9年:张小龙指明方向,微信AI全面开放NLP能力 今天公开课上隆重介绍了... 阅读详情

相关推荐

避坑指南:Zephyr RTOS与nRF Connect SDK环境搭建常见错误及解决方案

本文详细解析了Zephyr RTOS与nRF Connect SDK环境搭建过程中的常见错误及解决方案,涵盖网络问题、代理设置、SEGGER Embedded Studio配置、分支切换等关键环节。针对开发者实际遇到的痛点问题,提供了一系列实用技巧和深度排错方法,帮助高效完成NCS开发环境部署。

weixin_28685287的博客 172

Python里面数组拼接方法介绍

numpy数组拼接方法介绍 转载来源:https://blog.youkuaiyun.com/zyl1042635242/article/details/43162031 数组拼接方法一 思路:首先将数组转成列表,然后利用列表的拼接函数append()、extend()等进行拼接处理,最后将列表转成数组。 示例1: >>> import numpy as np >>&g...

phymat.nico的专栏 1万+

飞书应用开发脚手架lark-harness:从零构建企业级机器人

在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes

weixin_30703911的博客 613

Python 创建二维数组

Numpy 中有功能强大的 ndarray 对象,能创建 N 维的数组,另外还提供很多通用函数,支持对数组的元素进行操作、支持对数组进行算法运算以及提供常用的统计函数。其中 shape 是数组的一个属性,表示获取数组大小(有多少行,有多少列),如果是一维数组,则只显示(行,)。因为它创建出来的是单位矩阵,单位矩阵是正形矩阵,对角线的值均为 1,其他位置的值为 0。虽然 np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组,但是创建的方式是不同的。为什么会出现在这种情况呢?

flyingluohaipeng的博客 1万+

无人机避障——感知篇(采用Mid360复现Fast-lio)

本文介绍了在Ubuntu 18.04和ROS Melodic环境下,使用Xavier-nx电脑和Livox Mid-360激光雷达编译和运行FAST-LIO工程的步骤,包括创建工作空间、编译驱动和FAST-LIO源码,以及运行launch文件进行建图的过程。

weixin_45390670的博客 3547

聚类分析之——Kmeans算法(一)

原创地址:http://www.toutiao.com/i6399454239554273794/ 聚类分析是一种静态数据分析方法,常被用于数据挖掘、机器学习、模式识别等领域,聚类是一种无监督式的学习方法。它是在未知样本类别的情况下,通过计算样本彼此间的距离(欧式距离,马式距离,汉明距离,余弦距离等)来估计样本所属类别。从结构性来划分,聚类方法分为自上而下和自下而上两种方法。聚类的算法有很多

june2017的博客 3533

python 创建数组的方法

在使用 new关键字创建新的元素之后,我们就可以开始添加新的元素了,添加新的元素时使用 new关键字,然后编写以下代码: (1)在这里我们添加了一个新的元素,并为其命名为: value。接着使用以下代码来修改数组: (2)在这里我们修改了数组中元素的大小,我们将一位数改为10位数,修改后的代码如下: (4)在这里我们创建了一个新的数组,并且使用了 new关键字,然后编写了以下代码来修改数组中元素的大小: 我们可以看到在这里使用 new关键字创建了一个新的元素。2、将数组中的元素移到新数组中。

花生日记 1万+

android usb读写,安卓(Android)下如何开发USB NFC读写器app

对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定。为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接口,安卓工程师就可以直接调用NFC读写器了,简单可靠。NFC读写器的安卓库文件为:yoworfidreader.jar在ADT工程中导入yoworfidreader.jar库文件,即可在工程中引用NF...

weixin_36433781的博客 825

Python之Numpy数组拼接,组合,连接

转自:https://www.douban.com/note/518335786/?type=like ============改变数组的维度==================已知reshape函数可以有一维数组形成多维数组ravel函数可以展平数组b.ravel()flatten()函数也可以实现同样的功能区别:ravel只提供视图view,而flatten分配内存存储重塑: 用...

deye1979的专栏 5535

卡门涡街可视化实战:从网格加密策略到动画后处理技巧

本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。

weixin_29309785的博客 415

DataGrip 2023.3 Windows版激活保姆级教程:从下载脚本到输入激活码,一次搞定

本文提供DataGrip 2023.3 Windows版的完整安装与授权指南,从环境准备到数据库连接管理,再到高效开发技巧与高级功能扩展,帮助开发者快速掌握这一专业数据库管理工具。内容涵盖安装步骤、初始配置、常见问题解决及性能调优技巧,适合数据库开发新手和专业人士。

weixin_30275415的博客 645

Python中numpy数组的拼接、合并

Python中numpy数组的合并有很多方法,如 np.append() np.concatenate() np.stack() np.hstack() np.vstack() np.dstack() 其中最泛用的是第一个和第二个。第一个可读性好,比较灵活,但是占内存大。第二个则没有内存占用大的问题。 假设有两个数组a,b分别为: &gt;&gt;&gt; a array([0,...

赵至柔的博客 38万+

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2778

python 数组拼接_Python 你可能从未听说过的5种隐藏技巧

1. ... 对象没错,你没看错,就是...在Python中...代表着一个名为Ellipsis的对象。根据官方说明,它是一个特殊值,通常可以作为空函数的占位符,或是用于Numpy中的切片操作。如:defmy_awesome_function():...等同于:defmy_awesome_function():Ellipsis当然,你也可以使用pass或者字符串...

weixin_39673293的博客 398

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python 二维数组_Python 你可能从未听说过的5种隐藏技巧

1. ... 对象没错,你没看错,就是 ...在Python中...代表着一个名为 Ellipsis 的对象。根据官方说明,它是一个特殊值,通常可以作为空函数的占位符,或是用于Numpy中的切片操作。如:def my_awesome_function(): ...等同于:def my_awesome_function(): Ellipsis当然,你也可以使用pass或者字符串作为占...

weixin_39583162的博客 110

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python五个隐藏的特性,你可能从未听说过

前言 在本文中,我将向您展示Python中很常见的5个特性。有经验的Python开发人员可能认识其中一些。然而,这对其他人仍将是未知的。 1… 是的,你没看错,在Python中…是一个有效的构造。…是称为省略号的单例对象。如果你把它输入到Python解释器中,你可以看到它: … Ellipsis 根据官方文档,省略号是“一种特殊值,主要与用户定义容器数据类型的扩展切片语法结合使用”。它有两个主要的用例。一种是在空函数中充当占位符体。另一个是Numpy,作为一个切片项,就像文档中描述的那样。 函数

qq_52583721的博客 397

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

太神奇了!5种你从未听过的Python隐藏技巧!

同样的道理,如果你对三位数组做sum操作,就能使其变为二维数组,此时再对二维数组做sum操作,就能展开为一维数组。很多人都不知道,else 可以被用于许多地方,除了典型的 if else, 我们还可以在循环和异常处理里用到它。没错,这样对二维数组做sum操作,就能使二维数组内的每个元素做“加”法拼接起来。不过请注意, ... 对象仅可用于Numpy,不适用于Python内置数组。虽然这看起来有点蠢,但就我个人来看,比前一种写法更优雅一些。虽然这个技巧很出色,但我并不推荐使用,因为可读性太差了。

2401_86168842的博客 1058

python keyerror_Python五个隐藏的特性,你可能从未听说过

前言在本文中,我将向您展示Python中最常见的5个特性。有经验的Python开发人员可能认识其中一些。然而,这对其他人仍将是未知的。...是的,你没看错,在Python中...是一个有效的构造。...是称为省略号的单例对象。如果你把它输入到Python解释器中,你可以看到它:>>> ...Ellipsis根据官方文档,省略号是“一种特殊值,主要与用户定义容器数据类型的扩展切片语...

weixin_39824223的博客 193

python 替换array中的值_Python五个隐藏的特性,你可能从未听说过

前言在本文中,我将向您展示Python中最常见的5个特性。有经验的Python开发人员可能认识其中一些。然而,这对其他人仍将是未知的。...是的,你没看错,在Python中...是一个有效的构造。...是称为省略号的单例对象。如果你把它输入到Python解释器中,你可以看到它:>>> ...Ellipsis根据官方文档,省略号是“一种特殊值,主要与用户定义容器数据类型的扩展切片语...

weixin_36447179的博客 125

2024年你可能还不知道自己需要的5个Python库

Python就像是编程界的瑞士军刀——它应有尽有。但说实话,我们大多数人只用了它的主要功能。像NumPypandas和matplotlib这些库备受青睐,而一整个充满隐藏瑰宝的生态系统却在默默等待被发现。这种情况今天就要改变。我精心挑选了一份的清单,你会纳闷自己以前怎么没听说过它们。无论你是在优化工作流程、进行艺术创作,还是只是想在团队的日常会议中惊艳众人,这些库都将改变你的工作方式。

qq_28791753的博客 1458
上一篇: 高质量Python迭代技巧:enumerate()和zip()
下一篇: 深入浅出SVM(PART I)
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值