# 完整版，三十个Python运用技巧！

1. 原地交换两个数字

Python 提供了一个直观的在一行代码中赋值与交换（变量值）的方法，请参见下面的示例：

x, y = 10, 20

print(x, y)

x, y = y, x

print(x, y)

#1 (10, 20)

#2 (20, 10)

2. 链状比较操作符

n = 10

result = 1

print(result)

# True

result = 1 > n

print(result)

# False

3. 使用三元操作符来进行条件赋值

[表达式为真的返回值] if [表达式] else [表达式为假的返回值]

x = 10 if (y == 9) else 20

x = (classA if y == 1 else classB)(param1, param2)

def small(a, b, c):

return a if a

print(small(1, 0, 1))

print(small(1, 2, 2))

print(small(2, 2, 3))

print(small(5, 4, 3))

#Output

#0 #1 #2 #3

[m**2 if m > 10 else m**4 for m in range(50)]

#=> [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401]

4. 多行字符串

multiStr = "select * from multi_row

where row_id

print(multiStr)

# select * from multi_row where row_id

multiStr = """select * from multi_row

where row_id

print(multiStr)

#select * from multi_row

#where row_id

multiStr= ("select * from multi_row "

"where row_id

"order by age")

print(multiStr)

#select * from multi_row where row_id

5. 存储列表元素到新的变量中

testList = [1,2,3]

x, y, z = testList

print(x, y, z)

6. 打印引入模块的文件路径

import socket

print(socket)

#1-

#2-

7. 交互环境下的 “_” 操作符

3

3

>>> print _

3

“_” 是上一个执行的表达式的输出。

8. 字典/集合推导

testDict =

testSet =

print(testSet)

print(testDict)

#set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

#

9. 调试脚本

import pdb

pdb.set_trace()

10. 开启文件分享

Python 允许运行一个 HTTP 服务器来从根路径共享文件，下面是开启服务器的命令：

# Python 2

python -m SimpleHTTPServer

# Python 3

python3 -m http.server

11. 检查 Python 中的对象

test = [1, 3, 5, 7]

print( dir(test) )

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

12. 简化 if 语句

if m in [1,3,5,7]:

if m==1 or m==3 or m==5 or m==7:

13. 运行时检测 Python 版本

21. 一行代码计算任何数的阶乘

Python 2.x.

result = (lambda k: reduce(int.__mul__, range(1,k 1),1))(3)

print(result)

Python 3.x.

import functools

result = (lambda k: functools.reduce(int.__mul__, range(1,k 1),1))(3)

print(result)

22. 找到列表中出现最频繁的数

test = [1,2,3,4,2,2,3,1,4,4,4]

print(max(set(test), key=test.count))

23. 重置递归限制

Python 限制递归次数到 1000，我们可以重置这个值：

import sys

x=1001

print(sys.getrecursionlimit())

sys.setrecursionlimit(x)

print(sys.getrecursionlimit())

24. 检查一个对象的内存使用

import sys

x=1

print(sys.getsizeof(x))

import sys

x=1

print(sys.getsizeof(x))

25. 使用 __slots__ 来减少内存开支

import sys

class FileSystem(object):

def __init__(self, files, folders, devices):

self.files = files

self.folders = folders

self.devices = devices

print(sys.getsizeof( FileSystem ))

class FileSystem1(object):

__slots__ = ['files', 'folders', 'devices']

def __init__(self, files, folders, devices):

self.files = files

self.folders = folders

self.devices = devices

print(sys.getsizeof( FileSystem1 ))

#In Python 3.5

【译者注：在我的 win10 python2.7 中上面的结果是：

#In Python 2.7 win10

The slots declaration takes a sequence of instance variables and reserves just enough space in each instance to hold a value for each variable. Space is saved because dict is not created for each instance. 】

26. 使用 lambda 来模仿输出方法

import sys

lprint=lambda *args:sys.stdout.write(" ".join(map(str,args)))

lprint("python", "tips",1000,1001)

#-> python tips 1000 1001

27. 从两个相关的序列构建一个字典

t1 = (1, 2, 3)

t2 = (10, 20, 30)

print(dict (zip(t1,t2)))

28. 一行代码搜索字符串的多个前后缀

29. 不使用循环构造一个列表

import itertools

test = [[-1, -2], [30, 40], [25, 35]]

print(list(itertools.chain.from_iterable(test)))

#-> [-1, -2, 30, 40, 25, 35]

30. 在 Python 中实现一个真正的 switch-case 语句

def xswitch(x):

return xswitch._system_dict.get(x, None)

xswitch._system_dict = {'files': 10, 'folders': 5, 'devices': 2}

print(xswitch('default'))

print(xswitch('devices'))

• 发表于:
• 原文链接：https://kuaibao.qq.com/s/20180822A0RUTQ00?refer=cp_1026
• 腾讯「云+社区」是腾讯内容开放平台帐号（企鹅号）传播渠道之一，根据《腾讯内容开放平台服务协议》转载发布内容。

2019-08-26

2019-08-26

2019-08-26

2019-08-26

2019-08-26

2018-08-29

2019-08-26

2019-08-26

2019-08-26

2019-08-26

2019-08-26

2019-08-26