本文转载自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
[5, 4, 3, 2, 1]

但如果你要处理的是字符串,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]
[3, 2, 1]

改变递归次数限制

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

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

可以使用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

直接在浏览器访问即可。

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”,了解票务以及会务详情。

推荐阅读

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

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

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

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

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

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

  • 《互联网人叹气图鉴》

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

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

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

  1. 递归 反转字符串_使用递归反转字符串

    递归 反转字符串 1.简介 在本文中,您将学习如何使用递归方法来反转字符串. 第一个程序是反转字符串,第二个程序将读取用户的输入. 在之前的文章中,我已经展示了如何不使用任何内置函数来反转字符串,以及 ...

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

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

  3. for死循环、怪异字符串、两次return……Python冷知识(三)

    本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第三篇.前两篇传送门小明给你准备好了,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) 谈 ...

  4. Python 中的反转字符串:reversed()、切片等

    摘要:以相反的顺序反转和处理字符串可能是编程中的一项常见任务.Python 提供了一组工具和技术,可以帮助您快速有效地执行字符串反转. 本文分享自华为云社区<Python 中的反转字符串:rev ...

  5. (递归)LeetCode基础练习,反转字符串(递归和非递归算法)C++ Day1打卡

    344反转字符串 题目描述如下 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) ...

  6. python基础3---循环和字符串列表

    复习: 1.字符串和数字之间不能⽐⼤⼩,但可以判断是否相等(⼀定不相等) 2.在判断中使⽤or的时候,后边的判断条件⼀定要写全,不能只写⼀个数据值 对于数字来说: 0-->False,其余的全是 ...

  7. 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略

    编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 目录 字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 ...

  8. 字符串反转python_Python 反转字符串(reverse)的方法小结

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1(): s=input(&quo ...

  9. 用python倒序输出一个字符串_Python 反转字符串(reverse)的方法小结

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1(): s=input(&quo ...

最新文章

  1. fft 重叠加法_FFT重叠相加法 参数如何定 h M?
  2. oracle性能优化总结
  3. 前端学习(2868):vue3数据劫持解析3
  4. 40年技术发展变革,物联网行业的趋势、现状与挑战
  5. 网络工程师交换试验手册之二十五:详细讲授利用xmodem来恢复IOS
  6. python递归算法案例教案_Python电子教案2-1-Python程序实例解析.ppt
  7. GAE-BBS v.10 开源下载
  8. 召之即来,来之能战,战则必胜——走进华云数据交付团队
  9. 怎么SSH远程连接云服务器
  10. Win7专业版密码忘了使用U深度启动U盘清除登录密码
  11. 共模电感适用的频率_共模电感的原理以及使用情况
  12. 共享计算机桌面需要密码,win10局域网共享文件需要输密码怎么办?_win10访问共享文件需要密码的解决办法-爱纯净...
  13. android实现qq邮箱多个图标效果
  14. 利用frps进行内网穿透
  15. 名帖269 董其昌 行书临《颜真卿裴将军诗卷》
  16. 【转载】VLOOKUP函数多条件查询 VLOOKUP三个条件查询
  17. 基于UFEI下的win10 + Ubuntu18.04双系统攻略!!!
  18. google code
  19. 【读书笔记】科学:无尽的前沿——科学是一种提出问题的方式
  20. 网络安全立法要有前瞻性眼光

热门文章

  1. poj_2479 动态规划
  2. 你必须非常努力,才能看起来毫不费力
  3. HP c3000/c7000 blade switch GBE2c 初始配置
  4. Matlab 快捷键 设置
  5. Spring Boot thymeleaf模版支持,css,js等静态文件添加
  6. spark1.x和2.xIterable和iterator兼容问题
  7. Wannafly挑战赛14
  8. css 背景样式学习
  9. 【12.16】VC++调用Word OLE进行自动化生成报表
  10. Jquery_操作cookies