$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
打开系统命令行,输入上面这条命令,然后打开浏览器输入地址: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分支。
随机推荐
- 做一个WINDOWS下破解WIFI。不须要Linux抓包!
搬家了,没网了. 没有WIFI了! 想破解,只是没有Linux环境,不能抓包!破解! 于是自己动手开工. 在windows 下直接破解.貌似国内 还没看到.假设有了,那么请各位童鞋 提醒一下.赶急 要 ...
- 复习及总结--.Net线程篇(1)
老是没耐心写这些东西,最近想想也工作两年了,该对自己的东西做个整理了,不知道这次能坚持写几篇,总得来说尽量督促自己吧 言归正传,.net中的多线程主要可以使用两种方法进行调用 1,异步调用 2,Thr ...
- 【BZOJ2973】石头游戏 矩阵乘法
[BZOJ2973]石头游戏 Description 石头游戏的规则是这样的. 石头游戏在一个n行m列的方格阵上进行.每个格子对应了一个编号在0~9之间的操作序列. 操作序列是一个长度不超过6且循环执 ...
- Educational Codeforces Round 25 E. Minimal Labels&&hdu1258
这两道题都需要用到拓扑排序,所以先介绍一下什么叫做拓扑排序. 这里说一下我是怎么理解的,拓扑排序实在DAG中进行的,根据图中的有向边的方向决定大小关系,具体可以下面的题目中理解其含义 Educatio ...
- webpack4学习笔记(一)
webpack4 1,安装webpack npm insatll webpack --save-dev //安装最新版本 npm insatll webpack@<version> --s ...
- 通过Nginx反向代理实现IP分流
通过Nginx做反向代理来实现分流,以减轻服务器的负载和压力是比较常见的一种服务器部署架构.本文将分享一个如何根据来路IP来进行分流的方法. 根据特定IP来实现分流 将IP地址的最后一段最后一位为0或 ...
- flask中的blueprint
https://blog.csdn.net/sunhuaqiang1/article/details/72803336
- CSS冲突1 要关掉的css在项目内:【material-table】 中 checkbox 点击checkbox无法选中or取消,点击旁边才能选中or取消
CSS优先级: !important > 行内样式 > 内嵌样式|链接外部样式(哪个在后面哪个优先级大) id选择器 > class选择器 > 元素选择器 react中好像还不 ...
- Buns---cf 106C(多重背包)
题目链接:http://codeforces.com/problemset/problem/106/C 题意:有n克面粉,m种馅料,然后每种馅料有ai克,bi克馅料和ci克面粉做的面包可以买di元,也 ...
- 4.GIT安装
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...