面向python程序员的30个基本Python小技巧
文章目录
Tips#1. 就地交换两个数字
Python提供了一种直观的方法来在一行中进行赋值和交换。请参考下面的例子。
x, y = 10, 20
print(x, y)
x, y = y, x
print(x, y)
#1 (10, 20)
#2 (20, 10)
对右边的赋值生成一个新的元组。而左边的则立即将(未引用的)元组解包为名称x和y。一旦任务完成,新的元组将被未引用并标记为垃圾收集。变量的交换也完成了。
Tips#2. 比较运算符的链接
比较运算符的链接是一个有时会很方便的技巧。
n = 10
result = 1 < n < 20
print(result)
# True
result = 1 > n <= 9
print(result)
# False
Tips#3. 使用三元运算符进行条件赋值
三元运算符是if-else语句的快捷方式,也称为条件运算符。
[on_true] if [expression] else [on_false]
下面是一些示例,可以使用它们使您的代码紧凑而简洁。下面的语句意是 “如果y是9,则将10赋给x,否则将20赋给x”
x = 10 if (y == 9) else 20
同样,我们也可以对类对象执行相同的操作。
x = (classA if y == 1 else classB)(param1, param2)
在上面的例子中,classA和classB是两个类,其中一个类构造函数会被调用。
下面是一个带有“不”的例子。求最小数。
def small(a, b, c):
return a if a <= b and a <= c else (b if b <= a and b <= c else c)
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]
Tips#4. 处理多行字符串
基本的方法是使用从C语言派生的反斜杠。
multiStr = "select * from multi_row \
where row_id < 5"
print(multiStr)
# select * from multi_row where row_id < 5
还有一个技巧就是使用三重引号。
multiStr = """select * from multi_row
where row_id < 5"""
print(multiStr)
#select * from multi_row
#where row_id < 5
上述方法的共同问题是缺乏适当的缩进。如果我们尝试缩进,它会在字符串中插入空格。因此,最后的解决方案是将字符串分割成多行,并将整个字符串括在括号中。
multiStr= ("select * from multi_row "
"where row_id < 5 "
"order by age")
print(multiStr)
#select * from multi_row where row_id < 5 order by age
Tips#5. 将列表元素存储到新变量中
我们可以使用列表来初始化a个变量。当解压缩列表时,变量的数量不应该超过a。列表中的元素。
testList = [1,2,3]
x, y, z = testList
print(x, y, z)
#-> 1 2 3
Tips#6. 打印导入模块的文件路径
如果您想知道在代码中导入的模块的绝对位置,那么可以使用下面的技巧。
import threading
import socket
print(threading)
print(socket)
#1- <module 'threading' from '/usr/lib/python2.7/threading.py'>
#2- <module 'socket' from '/usr/lib/python2.7/socket.py'>
Tips#7.使用交互式“_”操作符。
这是一个有用的特性,但我们中很少有人知道。在Python控制台中,无论何时我们测试一个表达式或调用一个函数,结果都分派给一个临时名称_(下划线)。
>>> 2 + 1
3
>>> _
3
>>> print _
3
“_”引用最后执行的表达式的输出。
Tips#8. Dictionary/Set推导.
就像我们使用列表推导一样,我们也可以使用字典/集推导。它们使用简单,同样有效。这里有一个例子。
testDict = {i: i * i for i in xrange(10)}
testSet = {i * 2 for i in xrange(10)}
print(testSet)
print(testDict)
#set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
注意——这两个语句中只有<:>不同。另外,要在Python3中运行上述代码,请将xrange替换为range。
Tips#9. 调试脚本
在模块的帮助下,我们可以在Python脚本中设置断点。请按照下面的例子
import pdb
pdb.set_trace()
我们可以在脚本的任何位置指定,并在那里设置断点。它非常方便。
Tips#10. 设置文件共享
Python允许运行HTTP服务器,您可以使用该服务器共享来自服务器根目录的文件。下面是启动服务器的命令。
# Python 2
python -m SimpleHTTPServer
# Python 3
python3 -m http.server
以上命令将在默认端口(即8000)上启动服务器。您还可以通过将自定义端口作为最后一个参数传递给上述命令来使用它。