Python 有什么奇技淫巧?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Python 有什么奇技淫巧?

点击上方”python宝典”,关注获取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宝典

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Python 有什么奇技淫巧?


 上一篇
Python标准库 之 turtle(海龟绘图) Python标准库 之 turtle(海龟绘图)
点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! turtle库介绍首先,turtle库是一个点线面的简单图像库(也被人们成为海龟绘图),在Python2.6之后被引入进来,能够完成一些比较简单的几何图像
2021-04-05
下一篇 
python爬虫系列(1)——一个简单的爬虫实例 python爬虫系列(1)——一个简单的爬虫实例
点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片。 1. 概述本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片。下载图片的步骤如下
2021-04-05