python编程计算前30项的和_Python程序员需要知道的30个技
巧
如果你让⼀个 Python 程序员说⼀下 Python 的优势,他会说简洁以及⾼可读是最有影响⼒的优势。为证明上述两点,在这个 Python 教程⾥,我们将聊聊许多基本的 Python 建议和技巧。
我们从开始使⽤ Python 便收集这些有⽤的捷径(贴⼠与技巧)。分享⼀些我们知道,同时⼜能造福于⼈的知识,有什么事情⽐这更棒吗?
过去我们分享过 ⼀些给初学者的 Python 编程贴⼠ 旨在优化代码并且减少编码⼯作,我们的读者仍旧很乐意阅读它。
所以今天我们带来另⼀些基本的 Python 贴⼠与技巧,所有的这些技巧都能帮助你压缩代码并且优化运⾏。此外,你可以在⽇常⼯作中很容易地在真实项⽬中使⽤他们。
每⼀个技巧都有⼀个⽰例并且给出简短的解释,如果要测试这些代码⽚段,你可以看⼀下这些 在线虚拟 Python 运⾏终端。
最近我们发布的另两个必看的 Python 资源:
9 中优化 Python 代码的主要⽅式
发现在编程时应该避免的最常见的错误
使⽤下⾯的 TOC 来快速地浏览这些 Python 贴⼠与技巧。
给程序员的 30 个基本 Python 贴⼠与技巧
分别
贴⼠#1. 原地交换两个数字
Python 提供了⼀个直观的在⼀⾏代码中赋值与交换(变量值)的⽅法,请参见下⾯的⽰例:
x, y = 10, 20
print(x, y)
x, y = y, x
print(x, y)
#1 (10, 20)
狐狸和葡萄的故事
#2 (20, 10)
赋值的右侧形成了⼀个新的元组,左侧⽴即解析(unpack)那个(未被引⽤的)元组到变量 和 。
。
⼀旦赋值完成,新的元组变成了未被引⽤状态并且被标记为可被垃圾回收,最终也完成了变量的交换。
贴⼠#2. 链状⽐较操作符
⽐较操作符的聚合是另⼀个有时很⽅便的技巧:
n = 10
result = 1 < n < 20
print(result)
# True
result = 1 > n <= 9
print(result)
# Fal
贴⼠#3. 使⽤三元操作符来进⾏条件赋值
三元操作符是 if-el 语句也就是条件操作符的⼀个快捷⽅式:
[表达式为真的返回值] if [表达式] el [表达式为假的返回值]
这⾥给出⼏个你可以⽤来使代码紧凑简洁的例⼦。下⾯的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。
x = 10 if (y == 9) el 20
同样地,我们可以对类做这种操作:
x = (classA if y == 1 el classB)(param1, param2)
在上⾯的例⼦⾥ classA 与 classB 是两个类,其中⼀个类的构造函数会被调⽤。
下⾯是另⼀个多个条件表达式链接起来⽤以计算最⼩值的例⼦:
def small(a, b, c):
return a if a <= b and a <= c el (b if b <= a and b <= c el 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 el 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. 多⾏字符串
基本的⽅式是使⽤源于 C 语⾔的反斜杠:
multiStr = "lect * from multi_row
where row_id < 5"
print(multiStr)
# lect * from multi_row where row_id < 5
摩友世界
另⼀个技巧是使⽤三引号:
multiStr = """lect * from multi_row
where row_id < 5"""
梦见带小孩
print(multiStr)
#lect * from multi_row
#where row_id < 5
上⾯⽅法共有的问题是缺少合适的缩进,如果我们尝试缩进会在字符串中插⼊空格。所以最后的解决⽅案是将字符串分为多⾏并且将整个字符串包含在括号中:
multiStr= ("lect * from multi_row "
"where row_id < 5 "
"order by age")
print(multiStr)
#lect * from multi_row where row_id < 5 order by age
贴⼠#5. 存储列表元素到新的变量中
我们可以使⽤列表来初始化多个变量,在解析列表时,变量的数⽬不应该超过列表中的元素个数:【译者注:元素个数与列表长度应该严格相同,不然会报错】
testList = [1,2,3]
x, y, z = testList
print(x, y, z)
#-> 1 2 3
贴⼠#6. 打印引⼊模块的⽂件路径
如果你想知道引⽤到代码中模块的绝对路径,可以使⽤下⾯的技巧:
海菜梗import threading
import socket
print(threading)
print(socket)
#1-
#2-
贴⼠#7. 交互环境下的 “_” 操作符
这是⼀个我们⼤多数⼈不知道的有⽤特性,在 Python 控制台,不论何时我们测试⼀个表达式或者调⽤⼀个⽅法,结果都会分配给⼀个临时变量: _(⼀个下划线)。
>>> 2 + 1
3
>>> _
3
>>> print _
3
“_” 是上⼀个执⾏的表达式的输出。
贴⼠#8. 字典/集合推导
与我们使⽤的列表推导相似,我们也可以使⽤字典/集合推导,它们使⽤起来简单且有效,下⾯是⼀个例⼦:
testDict = {i: i * i for i in xrange(10)}
testSet = {i * 2 for i in xrange(10)}
print(testSet)
print(testDict)
#t([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 中运⾏上述代码时,将 改为 。
贴⼠#9. 调试脚本
我们可以在 模块的帮助下在 Python 脚本中设置断点,下⾯是⼀个例⼦:
我的不足import pdb
pdb.t_trace()
我们可以在脚本中任何位置指定 并且在那⾥设置⼀个断点,相当简便。
贴⼠#10. 开启⽂件分享
Python 允许运⾏⼀个 HTTP 服务器来从根路径共享⽂件,下⾯是开启服务器的命令:
# Python 2
python -m SimpleHTTPServer
# Python 3
python3 -m http.rver
上⾯的命令会在默认端⼝也就是 8000 开启⼀个服务器,你可以将⼀个⾃定义的端⼝号以最后⼀个参数的⽅式传递到上⾯的命令中。
贴⼠#11. 检查 Python 中的对象
我们可以通过调⽤ dir() ⽅法来检查 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__', '__reverd__', '__rmul__', '__tattr__',
'__titem__', '__tslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'inrt', 'pop', 'remove', 'rever', 'sort']
贴⼠#12. 简化 if 语句
我们可以使⽤下⾯的⽅式来验证多个值:
if m in [1,3,5,7]:
⽽不是:
if m==1 or m==3 or m==5 or m==7:
或者,对于 in 操作符我们也可以使⽤ '{1,3,5,7}' ⽽不是 '[1,3,5,7]',因为 t 中取元素是 O(1) 操作。
贴⼠#13. 运⾏时检测 Python 版本
当正在运⾏的 Python 低于⽀持的版本时,有时我们也许不想运⾏我们的程序。为达到这个⽬标,你可以使⽤下⾯的代码⽚段,它也以可读的⽅式输出当前 Python 版本:
import sys
#Detect the Python version currently in u.
if not hasattr(sys, "hexversion") or sys.hexversion != 50660080:
print("Sorry, you aren't running on Python 3.5n")
print("Plea upgrade to 3.5.n")
#Print Python version in a readable format.
print("Current Python version: ", sys.version)
或者你可以使⽤ sys.version_info >= (3, 5) 来替换上⾯代码中的 sys.hexversion != 50660080,这是⼀个读者的建议。在 Python 2.7 上运⾏的结果:
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.8.2] on linux
Sorry, you aren't running on Python 3.5
Plea upgrade to 3.5.
在 Python 3.5 上运⾏的结果:
Python 3.5.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
Current Python version: 3.5.2 (default, Aug 22 2016, 21:11:05)
[GCC 5.3.0]
贴⼠#14. 组合多个字符串
如果你想拼接列表中的所有记号,⽐如下⾯的例⼦:
>>> test = ['I', 'Like', 'Python', 'automation']
现在,让我们从上⾯给出的列表元素新建⼀个字符串:
>>> print ''.join(test)
贴⼠#15. 四种翻转字符串/列表的⽅式
翻转列表本⾝
testList = [1, 3, 5]
print(testList)
#-> [5, 3, 1]
在⼀个循环中翻转并迭代输出
for element in reverd([1,3,5]):
函数的间断点print(element)
#1-> 5