知乎上有一个问题:Python 有什么奇技淫巧?其中有各种不按套路出牌的招数,也不乏一些惊为天人的"奇技淫巧",会让你大呼:居然还有这种操作???

本文就是对日常使用过的或者觉得很精妙的"奇技淫巧"的归纳总结。

Python版问号表达式

x = 1
y = 2
print ('no','yes')[x==y]
no

这里巧妙地利用了Python会把False当做序列下标0、把True当做序列下标1的特性,把否定条件的输出放在前面的元组的第一个元素,而把肯定条件的输出放在第二个元素。又比如:

a = [1,2,3]
print a[False]
print a[True]
1
2

此时是不是一幅"黑人问号"脸呢?

列表的深度拷贝

a = [1,2,3]
b = a[:]
print id(a)
print id(b)

c = a
print id(c)
59952144
60485304
59952144

提到深度拷贝,是不是一下子就想起来了copy.deepcopy()函数了?但是对于列表来讲,深度拷贝根本不用那么麻烦,只需像上面那样:b = a[:]即可实现,就是这么简单。

注:如果a是元组,这样玩是不可以的,切记!比如:

a = (1,2,3)
b = a[:]
print id(a)
print id(b)
59570456
59570456

可以看出a和b的id是相同的,那么就想还是乖乖用copy.deepcopy()来拷贝吧:

a = (1,2,3)
b = copy.deepcopy(a)
print id(a)
print id(b)
60481864
60481864

但是结果又让我们诧异了,这是因为元组是不可变对象,在内存中同一个元组只会存在一个,再怎么深度拷贝也没用(同为不可变对象的字符串也是同理的)。

在命令行启动一个本地服务器

打开系统命令行,然后输入命令

python -m SimpleHTTPServer 8000 (端口8000可以自己更改)(这是python的2.x版本的写法)
python -m http.server 8000(这是python的3.x版本的写法 )

然后打开浏览器输入地址:http://localhost:8000/,回车,将会看到命令行所在当前目录下的所有文件和文件夹,简直就是一个浏览器版的文件管理器。

把一个字符串写在多行

s = ('abc'
    'de'
    'fgh'
    )
print s
abcdefgh

链式比大小

n = 1
print 0 < n < 5
print 9 > n < 5
print 0 > n < 5
print -1 > 0 < n < 5
True
True
False
False

动态导入包

d = __import__('json').loads('{"a":123,"b":"bbb"}')
print type(d)
print d
<type 'dict'>
{u'a': 123, u'b': u'bbb'}
注:动态导入包只在当前语句生效。

字典推导式

dic = {i:i ** 2 for i in xrange(5)}
print dic
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

见过列表推导式、生成器推导式,那么有没有见过字典推导式呢?上面就是一例。

快速反转字符串

s = '123456'
print s[::-1]
654321

优雅地打开文件

with open('test.txt','r') as f:
    content = f.read()

用with语句上下文管理器可以自动地管理文件的打开、关闭,不需手工干预。

else,不止是else

普通用法

a = -1
if a > 0:
    print 'big'
else:
    print 'small'
small

循环语句搭配else
判断一个数是否是素数:

import math
n = 97
for i in range(2,int(math.sqrt(n) + 2)):
    if n % i == 0:
        print '{0} is not a prime!'.format(n)
        break
else:
    print '{0} is a prime!'.format(n)
97 is a prime!

可见,如果循环中有break语句,且直到循环结束都没有执行过break语句,那么就会继续走后面的else分支。

异常处理搭配else

try:
    print 1/0
except Exception as msg:
    print str(msg)
else:
    print 'all is OK!'
integer division or modulo by zero
try:
    print 1/1
except Exception as msg:
    print str(msg)
else:
    print 'all is OK!'
1
all is OK!

可见,如果没有发生异常,就会走else分支。

原文链接:

https://www.cnblogs.com/jiayongji/p/7609200.html

END-


识别图中二维码,领取python全套视频资料

Python 有什么奇技淫巧?的更多相关文章

  1. Python新手的奇技淫巧,掌握在手的充实感

    以下是我长久以来收集的一些Python实用技巧和工具,希望能对刚学习Python的新手有所帮助.  1.交换变量 x = 6 y = 5 x, y = y, x print x >>> ...

  2. python 黑魔法收集--已结

    awesome python 中文大全 Fabric , pip, virtualenv 内建函数好文 awesome python 奇技淫巧 一句话求阶乘 from functools import ...

  3. python知识大全目录,想学的看过来!

    Python总结篇——知识大全   python装饰器   PyCharm安装与配置,python的Hello World   sort与sorted的区别及实例   我必须得告诉大家的MySQL优化 ...

  4. $Python技巧大全

    知乎上有一个问题:Python 有什么奇技淫巧?其中有各种不按套路出牌的招数,也不乏一些惊为天人的"奇技淫巧",会让你大呼:居然还有这种操作??? 本文就是对日常使用过的或者觉得很 ...

  5. 流畅的python(笔记)

    流畅的python中有很多奇技淫巧,整本书都在强调如何最大限度地利用Python 标准库.介绍了很多python的不常用的数据类型.操作.库等,对于入门python后想要提升对python的认识应该有 ...

  6. PEP8规范 Python

    前言 从很多地方搬运+总结,以后根据这个标准再将python的一些奇技淫巧结合起来,写出更pythonic的代码~ PEP8 编码规范 英文原版请点击这里 以下是@bobo的整理,原文请见PEP8 P ...

  7. Python中通过lambda抛异常的奇技淫巧

    假设我们需要一个函数什么事都不干,只是抛出异常(在某些系统中有些handler就是干这事的),我们可以很直观的写出下面的代码: def func(): raise Exception("th ...

  8. Python奇技淫巧

    Python奇技淫巧 http://andrewliu.in/2015/11/14/Python%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7/?hmsr=toutiao.i ...

  9. Python奇技淫巧 - 持续更新中....

    Python奇技淫巧 人生苦短,我用Python: 编程界这绝对不是一句空话,尤其是对于使用过多个语言进行工作的同学们来说,用Python的时间越长,越有一种我早干嘛去了的想法,没事,啥时候用Pyth ...

随机推荐

  1. 一款基于HTML5 Canvas的画板涂鸦动画

    今天给各网友分享一款基于HTML5 Canvas的画板涂鸦动画.记得之前我们分享过一款HTML5 Canvas画板工具,可以切换不同的笔刷,功能十分强大.本文今天要再来分享一款基于HTML5 Canv ...

  2. am335x usb host patch设计

    USB直接作为host时省掉一个5V的DCDC,直接连接到5V的输入上面.对于Linux SDK,需要一个patch去确保这个设计能够正常工作,patch内容请参考: static struct om ...

  3. SenCha Touch 与 EXTJS 安装Myeclipse 插件

    http://www.cnblogs.com/jirimutu01/default.html 关于SenchaEclipsePlugin插件的安装和使用 使用过eclipse开发java程序的人都知道 ...

  4. DDR2基础

    一. DDR2介绍 DDR2由JEDEC(电子设备工程联合委员会)开发的新生代内存技术标准.该标准定义了DDR2封装.寻址及操作.电气等所有特性. DDR相关技术对比 DDR DDR2 DDR3 电压 ...

  5. 1.javascript语言精粹笔记

    一.注释 /**/ // 采用这个 二.标识符 标识符被用于语句.变量.参数.属性名.运算符和标记三.数字 javascript只有一个单一的数字模型.它在内部被表示64位的浮点数. 没有分离出整形, ...

  6. 常见的装包的三种宝,包 bao-devel bao-utils bao-agent ,包 开发包 工具包 客户端

    常见的装包的三种宝,包  bao-devel    bao-utils   bao-agent  ,包    开发包   工具包  客户端

  7. 简单好用的包管理器 brew

    Homebrew 是什么? macOS 上的包管理器,相当于 Debian 系的 apt-get ,或者是 Redhat 系的 yum . Homebrew 有什么用? 帮你安装一些系统默认没有安装但 ...

  8. JavaScript匿名类整理学习笔记

    以下为总结在开源的JavaScript框架中能看到很多这样语法结构(function(){})()比如我最近看的jQuery,及chediter.刚开始的时候我看到这样的结果有点奇怪,它是怎么执行的, ...

  9. Ubuntu之No module named cv2

    最简单的方法是:pip install opencv-python 另外,从源码安装的方法: 1下载opencv源码:http://opencv.org/releases.html  推荐2.4.13 ...

  10. Win10下安装MySQL总卡在write configuration的解决办法

    先说结论 删除  C:\ProgramData 下的MySQL文件夹!!! 折腾过程 反复安装卸载,安装版.绿色版,都不行,清理注册表,清理安装文件夹,还是不行!!! 最后找到并删除  C:\Prog ...