Python 有什么奇技淫巧?
知乎上有一个问题: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 有什么奇技淫巧?的更多相关文章
- Python新手的奇技淫巧,掌握在手的充实感
以下是我长久以来收集的一些Python实用技巧和工具,希望能对刚学习Python的新手有所帮助. 1.交换变量 x = 6 y = 5 x, y = y, x print x >>> ...
- python 黑魔法收集--已结
awesome python 中文大全 Fabric , pip, virtualenv 内建函数好文 awesome python 奇技淫巧 一句话求阶乘 from functools import ...
- python知识大全目录,想学的看过来!
Python总结篇——知识大全 python装饰器 PyCharm安装与配置,python的Hello World sort与sorted的区别及实例 我必须得告诉大家的MySQL优化 ...
- $Python技巧大全
知乎上有一个问题:Python 有什么奇技淫巧?其中有各种不按套路出牌的招数,也不乏一些惊为天人的"奇技淫巧",会让你大呼:居然还有这种操作??? 本文就是对日常使用过的或者觉得很 ...
- 流畅的python(笔记)
流畅的python中有很多奇技淫巧,整本书都在强调如何最大限度地利用Python 标准库.介绍了很多python的不常用的数据类型.操作.库等,对于入门python后想要提升对python的认识应该有 ...
- PEP8规范 Python
前言 从很多地方搬运+总结,以后根据这个标准再将python的一些奇技淫巧结合起来,写出更pythonic的代码~ PEP8 编码规范 英文原版请点击这里 以下是@bobo的整理,原文请见PEP8 P ...
- Python中通过lambda抛异常的奇技淫巧
假设我们需要一个函数什么事都不干,只是抛出异常(在某些系统中有些handler就是干这事的),我们可以很直观的写出下面的代码: def func(): raise Exception("th ...
- Python奇技淫巧
Python奇技淫巧 http://andrewliu.in/2015/11/14/Python%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7/?hmsr=toutiao.i ...
- Python奇技淫巧 - 持续更新中....
Python奇技淫巧 人生苦短,我用Python: 编程界这绝对不是一句空话,尤其是对于使用过多个语言进行工作的同学们来说,用Python的时间越长,越有一种我早干嘛去了的想法,没事,啥时候用Pyth ...
随机推荐
- 无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
今年年初Facebook AI Research发布了一篇名为Beyond Frontal Faces: Improving Person Recognition Using Multiple Cue ...
- JavaScript中的闭包详解
闭包是JavaScript的重要特性,非常强大,可用于执行复杂的计算,可并不容易理解,尤其是对之前从事面向对象编程的人来说,对 JavaScript 认识和编程显得更难.特别是在看一些开源的JavaS ...
- [android] AndroidManifest.xml - 【 manifest -> 其他次要配置】
<uses-sdk> 作用:使应用程序的兼容性更好,指明应用程序需要的最小API,编译API以及最大支持的API.值都是整数 <uses-sdk android:minSdkVers ...
- 数据库 proc编程六
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- 002杰信-陌生的maven-web项目整改成我们熟悉的Web架构;classpath的含义;ssm框架的整合;junit测试
这篇博客的资源来源于创智播客,先在此申明.这篇博客的出发点是jk项目,传智的做法是Maven的web模板生成的,但是这样子的结构目录与我们熟知的Web项目的结构目录相差很大,所以要按照我们熟知的项目结 ...
- php如何判断两个时间的时间差
$time1=2011-11-11 11:11:11$time2=2016-12-10 16:58:13 代码: if(abs(strtotime($time2)-strtotime($time1)) ...
- 转载 HTTPS 之fiddler抓包、jmeter请求
转载自 http://suixiang0923.github.io/2016/01/12/%E6%B5%85%E8%B0%88HTTPS%E4%BB%A5%E5%8F%8AFiddler%E6%8A% ...
- 数据降维PCA——学习笔记
PCA主成分分析 无监督学习 使方差(数据离散量)最大,更易于分类. 可以对隐私数据PCA,数据加密. 基变换 投影->内积 基变换 正交的基,两个向量垂直(内积为0,线性无关) 先将基化成各维 ...
- springmvc传递有特殊字符的路径参数
因为hostKey这里是IP(例如127.0.0.1)包含了特殊字符. 实际传递到后台的是127.0.0少了一截 @GetMapping("/metrics/jobId/{jobId}/{ ...
- 推荐一个 HTML5在线的流程图工具——ProcessOn
一直想找个简单好用的UML建模工具,无意在茫茫百度中看见了网友推荐的N多工具,从中找了一个叫 ProcessOn 的工具,可以说非常棒.如果我是WEB开发人员,我肯定去深入研究HTML5啦,太令人着迷 ...