当前位置: 首页 > 编程日记 > 正文

反转字符串/列表、改变递归次数限制、else用法...Python 冷知识(四)

640?wx_fmt=jpeg


本文转载自Python编程时光(ID:Python-Time)


冷知识系列,已经更新至第四篇。前三篇传送门在此,还没阅读的可以学习一下。


谈谈 Python 那些不为人知的冷知识(一)

谈谈 Python 那些不为人知的冷知识(二)

谈谈 Python 那些不为人知的冷知识(三)


交互式“_”操作符

对于 _ ,我想很多人都非常熟悉。

给变量取名好艰难,用 _
懒得长长的变量名,用 _
无用的垃圾变量,用 _

以上,我们都很熟悉了,今天要介绍的是他在交互式中使用。

>>> 3 + 4
7
>>> _
7
>>> name='ming'
>>> name
'ming'
>>> _
'ming'

它可以返回上一次的运行结果。

但是,如果是print函数打印出来的就不行了。

>>> 3 + 4
7
>>> _
7
>>> print("ming")
ming
>>> _
7

我自己写了个例子,验证了下,用__repr__输出的内容可以被获取到的。
首先,在我们的目录下,写一个文件 ming.py。内容如下

# ming.py
class mytest():
    def __str__(self):
        return "hello"

    def __repr__(self):
        return "world"

然后在这个目录下进入交互式环境。

>>> import ming
>>> mt=ming.mytest()
>>> mt
world
>>> print(mt)
hello
>>> _
world

知道这两个魔法方法的人,一看就明白了。

优雅的反转字符串/列表

反转序列并不难,但是如何做到最优雅呢?

先来看看,正常是如何反转的。

最简单的方法是使用列表自带的reverse()方法。

>>> ml = [1,2,3,4,5]
>>> ml.reverse()
>>> ml
[54321]

但如果你要处理的是字符串,reverse就无能为力了。你可以尝试将其转化成list,再reverse,然后再转化成str。转来转去,也太麻烦了吧?需要这么多行代码(后面三行是不能合并成一行的),一点都Pythonic。

mstr1 = 'abc'
ml1 = list(mstr1)
ml1.reverse()
mstr2 = str(ml1)

对于字符串还有一种稍微复杂一点的,是自定义递归函数来实现。

def my_reverse(str):
    if str == "":
        return str
    else:
        return my_reverse(str[1:]) + str[0]

在这里,介绍一种最优雅的反转方式,使用切片,不管你是字符串,还是列表,简直通杀。

>>> mstr = 'abc'
>>> ml = [1,2,3]
>>> mstr[::-1]
'cba'
>>> ml[::-1]
[321]


改变递归次数限制


上面才提到递归,大家都知道使用递归是有风险的,递归深度过深容易导致堆栈的溢出。如果你这字符串太长啦,使用递归方式反转,就会出现问题。


那到底,默认递归次数限制是多少呢?


可以使用sys这个库来查看


>>> import sys
>>> sys.getrecursionlimit()
1000

可以查,当然也可以自定义修改次数,退出即失效。不过友情提醒,这玩意还是不要轻易去碰,万一导致系统崩溃了小明可不背锅。

>>> sys.setrecursionlimit(2000)
>>> sys.getrecursionlimit()
2000

一行代码实现FTP服务器

搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享。但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方。比如你想快速共享Linux系统的某个目录给整个项目团队,还想在一分钟内做到,怎么办?很简单,使用Python中的SimpleHTTPServer。

SimpleHTTPServer是Python 2自带的一个模块,是Python的Web服务器。它在Python 3已经合并到http.server模块中。具体例子如下,如不指定端口,则默认是8000端口。

# python2
python -m SimpleHTTPServer 8888

# python3
python3 -m http.server 8888

直接在浏览器访问即可。

640?wx_fmt=png

SimpleHTTPServer有一个特性,如果待共享的目录下有index.html,那么index.html文件会被视为默认主页;如果不存在index.html文件,那么就会显示整个目录列表。

让你晕头转向的 else 用法

if else 用法可以说最基础的语法表达式之一,但是今天不是讲这个的,一定要讲点不一样的。

if else 早已烂大街,但可能有很多人都不曾见过 for else 和 try else 的用法。为什么说它曾让我晕头转向,因为它不像 if else 那么直白,非黑即白,脑子经常要想一下才能才反应过来代码怎么走。反正我是这样的。

先来说说,for else

def check_item(source_list, target):
    for item in source_list:
        if item == target:
            print("Exists!")
            break

    else:
        print("Does not exist")

在往下看之前,你可以思考一下,什么情况下才会走 else。是循环被 break,还是没有break?

给几个例子,你体会一下。

check_item(["apple""huawei""oppo"], "oppo")
# Exists!

check_item(["apple""huawei""oppo"], "vivo")
# Does not exist

可以看出,没有被 break 的程序才会正常走else流程。

再来看看,try else 用法。

def test_try_else(attr1 = None):
    try:
        if attr1:
            pass
        else:
            raise
    except:
        print("Exception occurred...")
    else:
        print("No Exception occurred...")

同样来几个例子。当不传参数时,就抛出异常。

test_try_else()
# Exception occurred...

test_try_else("ming")
# No Exception occurred...

可以看出,没有 try 里面的代码块没有抛出异常的,会正常走else。

总结一下,for else 和 try else 相同,只要代码正常走下去,不被 break,不抛出异常,就可以走 else。

(本文为 AI科技大本营转载文章,转载请联系原作者)


CTA核心技术及应用峰会

5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。


更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。


640?wx_fmt=jpeg

推荐阅读

  • 他25岁进贝尔实验室,32岁提信息论,40岁办达特茅斯会议,晚年患上阿兹海默 | 人物志

  • 重磅!Facebook更新PyTorch 1.1,打算跨GPU分割神经网络

  • 小样,加张图你就不认识我了?“补丁”模型骗你没商量!| 技术头条

  • 东大漆桂林、清华李涓子、复旦肖仰华等大牛确认出席CTA峰会!5月一起打卡杭州

  • 京东 60 天哗变!CTO 成优化第一人 | 畅言

  • 异构计算=未来?一文带你秒懂3大主流异构

  • 《互联网人叹气图鉴》

  • 回报率29%! 大神用情感分析创建一个比特币交易算法, 原来交易玩的是心理战

  • 她说:为啥程序员都特想要机械键盘?这答案我服!


640?wx_fmt=png

相关文章:

我学Delphi心得与笔记-------在控件上如何禁用Ctrl+V

项目中用到一个TJamShellList组件,此组件实现绑定查询图片,发现在使用CtrlC的同时也可以使用CtrlV结果将一个图处复制了多份,这样就不行了:( 于是,想了一个办法,禁用了CtrlV组合按键,代码如下: //在KeyDown事件中写如下…

15分钟带你入门sklearn与机器学习——分类算法篇

作者 | 何从庆本文转载自AI算法之心(ID:AIHeartForYou)【导读】众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,…

【FFmpeg】警告:[mpegts] H.264 bitstream error, startcode missing, size 0

1、问题描述 在使用FFmpeg编程,编码成h.264后,再封装成hls时,报警告 [mpegts] H.264 bitstream error, startcode missing, size 02、原因分析 根据警告提示信息可知:264位流错误,开始码丢失,大小为0。 根据警告信息搜索源码,在 FFmpeg-n4.2.2/libavformat/mpegtsenc…

svg: svg预定义的形状

SVG 有一些预定义的形状元素&#xff0c;可被开发者使用和操作&#xff1a;矩形 <rect>圆形 <circle>椭圆 <ellipse>线 <line>折线 <polyline>多边形 <polygon>路径 <path> 矩形 <rect x"20" y"20" width&qu…

[转]会自动消失的对话框API函数:MessageBoxTimeout

//以下两个函数由user32.dll导出&#xff0c;只是没有微软官方文档记载&#xff0c;大家在cpp中包含了以下部分&#xff0c;就可以调用MessageBoxTimeout了。 extern "C"{int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UI…

GitHub告急!黑客威胁程序员不交钱就删库

作者 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;5月3日&#xff0c;当中国程序员正愉快地过五一节时&#xff0c;国外程序员突然发现自己GitHub上的代码不翼而飞&#xff01;自己的GitHub一秒变成悬疑片现场&#xff0c;不仅被黑客攻击删代码了&#…

【FFmpeg】ffmpeg中函数返回的错误码:AVERROR及AVERROR_*

1、AVERROR FFmpeg的错误码大部分使用的PIOSIX标准中错误码的负值。 AVERROR定义在文件 FFmpeg-n4.2.1/libavutil/error.h 中 #define AVERROR(e) (-(e)) // Returns a negative error code from a POSIX error code, to return from library functions. //FFmpeg库的错误…

entjs 键盘监听

1.应用在textfield中的回车方式&#xff1a; var siteName new Ext.form.Field({id: loadUrl,//表单元素最好使用Id&#xff0c;不然在IE浏览器中表单内容将变形fieldLabel: 密码,listeners : {specialkey : function(field, e) {if (e.getKey() Ext.EventObject.ENTER) {ale…

IIS 7.5 + FastCGI + PHP + Drupal 7 + Oracle

2019独角兽企业重金招聘Python工程师标准>>> 运行SQL命令行&#xff1a;conn system 删除drupal表空间:drop tablespace drupal INCLUDING CONTENTS; 创建drupal表空间: create tablespace drupal logging datafile d:\htdocs\db\drupal.dbf size 32m autoexten…

Yann LeCun推荐!自监督学习、全景FPN...内容平台的四大技术指南

编译整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;去年陷入“数据丑闻”后的 Facebook 日子并不好过&#xff0c;在这之后他们对外界强调的关键词大部分都是“隐私”和“安全”。即便如此&#xff0c;在刚刚过去的 Facebook F8 大会上&#xff0c;扎克伯…

【FFmpeg】打印日志函数分析(可以根据不同级别打印不同颜色的日志)

FFmpeg的打印日志实现在FFmpeg-n4.2.1/libavutil/log.c中。 一、设置log等级 1、设置日志级别 日志默认级别是AV_LOG_INFO static int av_log_level = AV_LOG_INFO;使用av_log_set_level将日志级别设置为调试级别(AV_LOG_DEBUG) av_log_set_level(AV_LOG_DEBUG);源码: …

创建MySQL数据库

创建数据库命令&#xff1a; CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci; 注意&#xff1a;COLLATE是校对集的意思&#xff0c;可以理解为&#xff0c;排序规则等。字符集选择utf8mb4 参考文档&#xff1a;永远不要在MySQL中使用utf8&…

Android 对象型数据库 db4o

你有木有烦恼过数据库的crud&#xff0c;有木有对sql很烦躁&#xff0c;Android虽然有封装好的ContentProvider&#xff0c;但是操作还是有点复杂了。不是很喜欢。 这两天花时间整了下DB4O&#xff0c;确实很不错&#xff0c;不用建表&#xff0c;不用写sql&#xff0c;只要写好…

【FFmpeg】设置H264参数

0、fffmpeg源码编译时,何时需要连接libx264库? ffmpeg其自带H.264解码功能,但是要实现H.264编码时就需要链接编码库libx264 ubuntu16.04安装libx264的库: sudo apt install libx264-148 sudo apt install libx264-dev一、设置x264参数的接口 // 获取编码器 AVCodec *co…

TIOBE 5 月编程语言排行榜:Python、C++竞争白热化,Objective-C已沦为小众语言

作者 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;日前&#xff0c;TIOBE 编程语言社区最新发布了 2019 年 5 月排行榜。和 4 月榜单相比&#xff0c;5 月编程语言排行榜的 Top 10 位置并没有太大变化。但是在 C 和 Python 激烈的竞争局势下&#xff0c;随…

Caused by: org.xml.sax.SAXParseException: 不允许有匹配 [xX][mM][lL] 的处理指令目标。

版权声明&#xff1a;本文为 testcs_dn(微wx笑) 原创文章&#xff0c;非商用自由转载-保持署名-注明出处&#xff0c;谢谢。 https://blog.csdn.net/testcs_dn/article/details/81001749 Caused by: org.xml.sax.SAXParseException: 不允许有匹配 "[xX][mM][lL]" 的处…

Centos 64位使用 yum 会安装两个相同软件包的解决方法

Centos 64位使用 yum 会安装两个相同软件包的解决方法 - 后山一根葱Centos 64位使用 yum 会安装两个相同软件包的解决方法[Linux]post by 后山一根葱 / 2011-6-24 1:43 Friday系统环境&#xff1a;Centos 5.6 X86_64事项&#xff1a;关于yum install 安装两个相同软件包问题今天…

php的基础知识(四)

14、数组&#xff1a; 索引数组&#xff1a; 下标就是数字开始的。 $arr [a,b,c,1,2,3]; 关联数组&#xff1a; $arr [ a > b, c > d; e > f ]; 二维数组&#xff1a; 关联和索引混合的。 $arr [ a, b, c, d > [ e > h, f, g ], i, ]; 三维数组和多维数组。 …

【Ubuntu】解决问题:tcp :8080: bind: address already in use

1、问题描述 在ubuntu中启动一个web程序时报错 tcp :8080: bind: address already in use2、原因查找 查找占用8080的服务&#xff1a;sudo netstat -tanlp 注意&#xff1a;不加sudo权限时&#xff0c;不显示PID和程序名字 $ sudo netstat -tanlp 激活Internet连接 (服务器…

ICLR 2019最佳论文揭晓!NLP深度学习、神经网络压缩夺魁 | 技术头条

整理 | Linstansy责编 | Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导语】ICLR 是深度学习领域的顶级会议&#xff0c;素有深度学习顶会 “无冕之王” 之称。今年的 ICLR 大会将于5月6日到5月9日在美国新奥尔良市举行&#xff0c;大会采用 Ope…

浅析flex中的焦点focus

一、无焦点的困扰——组件监听不到键盘事件原因&#xff1a;只有获得焦点的组件&#xff08;确切说是InteractiveObject&#xff09;才能监听到键盘事件的目标阶段&#xff1b;键盘事件&#xff08;flash.events.KeyboardEvent&#xff09;参与冒泡阶段&#xff0c;所以焦点组件…

专访NIPS主席:如何保证论⽂评审的公平性?| 人物志

记者 | 阿司匹林编辑 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;作为人工智能领域顶会 NIPS&#xff08;Conference and Workshop on Neural Information Processing Systems&#xff0c; 更名为 NeurIPS&#xff09;的主席&#xff0c;Terrence Sejnowsk…

【H.265】H.265(HEVC)编码过程和名词解释

一、H.265(HEVC)编码过程 和H.264一样,H.265编码由帧内预测、帧间预测、量化、线性变换等步骤。过程大致如下; 1、分块 一帧画面首先被切分成多个互不重叠的块状区域,称为编码单元(H.264称为宏块),分别传输给编码器。 2、帧内预测 图像序列的第一个画面(以及每一个可…

为什么大家都推荐我学Linux

2019独角兽企业重金招聘Python工程师标准>>> 最近朋友总是推荐我去学Linux&#xff0c;我本人虽说是计算机专业的&#xff0c;但是我感觉在上学的时候好像还真没学到东西&#xff0c;现在也是干着一份与计算机半毛钱关系都没有的工作。朋友总是说Linux多好&#xff…

认识HTML5的WebSocket 认识HTML5的WebSocket

2019独角兽企业重金招聘Python工程师标准>>> 在HTML5规范中&#xff0c;我最喜欢的Web技术就是正迅速变得流行的WebSocket API。WebSocket提供了一个受欢迎的技术&#xff0c;以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法&#xff0c;从客户端…

空字符串计数、让字典可排序...Python冷知识(五)

本文转载自Python编程时光&#xff08;ID: Python-Time&#xff09;冷知识系列&#xff0c;直至今日&#xff0c;已经更新至第五篇。前四篇给你准备好了&#xff0c;还没阅读的可以学习一下。谈谈 Python 那些不为人知的冷知识&#xff08;一&#xff09;谈谈 Python 那些不为人…

后端说:只是你不懂怎么用 headers!

事情是这样的&#xff0c;上一个项目我们的后端提供的接口&#xff0c;一次性返回了所有数据给我&#xff0c;分页功能是前端自己完成的。 那么这次来的新项目&#xff0c;换了个后端&#xff0c;写了另外的接口&#xff0c;我做项目的时候&#xff0c;还是用的之前的前端分页组…

【H2645】H.264的宏块和H.265的编码树单元总结

一、H.264宏块 1、什么是宏块? 先看下面两张图,就能大体知道宏块指的是哪了。 将连续几帧图像分为一组(GOP)在H264中称为一个序列(sequence); 将每帧图像(Frame)划拉几道分成片(slice); 将每片(slice)按照16x16的大小横着竖着划拉成宏块(Maroblock); 将宏块(Maroblock…

android adb root方法

2019独角兽企业重金招聘Python工程师标准>>> 在有些android手机上使用adb root希望获取root权限时出现如下提示信息&#xff1a;adbd cannot run as root in production builds。此时提升root权限的方法是&#xff1a; 1。在android手机上获取超级用户权限&#xff…

10亿级数据规模的半监督图像分类模型,Imagenet测试精度高达81.2% | 技术头条...

译者 | linstancy作者| I. Zeki Yanlniz, Herve Jegou, Kan Chen, Manohar Paluri, Dhruv Mahajan编辑 | 蓝色琥珀鱼&#xff0c;Rachel出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】本文提出了一种十亿级数据规模的半监督图像分类模型&#xf…