python代码技巧总结(更新至17条)

怎么提高代码水平?答:看牛逼的代码!

牛逼的代码怎么写的?简单,明确,优雅!

怎么简单,明确,优雅?学技巧!

下面搜罗了一些有才格子褂青年的总结,哈哈

1.检查 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__’, ‘__reversed__’, ‘__rmul__’, ‘__setattr__’, ‘__setitem__’, ‘__setslice__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘append’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]

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

使用列表来初始化多个变量,元素个数与列表长度应该严格相同

testList= [1,2,3]

x,y,z= testList

print(x,y,z)

#-> 1 2 3

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

[表达式为真的返回值] if [表达式] else [表达式为假的返回值]
#如果 y 是 9,给 x 赋值 10,不然赋值为 20
x = 10 if (y == 9) else 20
# classA 与 classB 是两个类,其中一个类的构造函数会被调用
x = (classA if y == 1 else classB)(param1, param2) 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))
#0 #我们甚至可以在列表推导中使用三元运算符 [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.原地交换两个数字

x,y= 10,20

print(x,y)

x,y= y,x

print(x,y)

#1 (10, 20)

#2 (20, 10)

赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 <a> 和 <b>。


一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换

5.链状比较操作符

n= 10

result= 1< n< 20

print(result)

# True

result= 1> n<= 9

print(result)

# False

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’>

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

这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量: _(一个下划线)。

控制台的用法,我自己是深有体会,当时是用阿里云分发送短信,单独写了一个方法py文件,但是调用的时候就不报错,领导给我说再控制台上单独跑一下一个文件,看报错不,如果不报错,就说明这个短信方法没错,是调用的接口代码有问题.

>>> 2+ 1
3
>>> _
3
>>> print_
3

8.字典/集合推导

与我们使用的列表推导相似,我们也可以使用字典/集合推导,它们使用起来简单且有效,下面是一个例子:

testSet= {i *2 for i in range(10)}
testDict= {i: i *i for i in range(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}
注:两个语句中只有一个 <:> 的不同

9.调试脚本

我们可以在 <pdb> 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:

import pdb

pdb.set_trace()

#我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。

10.简化 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]’,因为 set 中取元素是 O(1) 操作。

11.使用字典存储选择操作

func={
"sum":lambda x,y:x+y,
"subtract":lambda x,y:x-y
}
print(func['sum'](9,3))
#

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

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

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

#-> 4

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

print(“http://www.google.com”.startswith((“http://”,”https://”)))

print(“http://www.google.co.uk”.endswith((“.com”,”.co.uk”)))

#1-> True

#2-> True

14.计数时使用Counter计数对象

#Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:

 from collections import Counter
c = Counter('hello world') print(c)
#Counter({'l': 3, 'o': 2, ' ': 1, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1}) print(c.most_common(2)) #[('l', 3), ('o', 2)]

15.同时迭代两个列表,俗称拉链函数

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
for teama, teamb in zip(nfc, afc):
print teama + " vs. " + teamb
#>>> Packers vs. Ravens
#>>> 49ers vs. Patriots

16.带索引的列表迭代

teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
print index, team
#>>> 0 Packers
#>>> 1 49ers
#>>> 2 Ravens
#>>> 3 Patriots

17.False == True

#比起实用技术来说这是一个很有趣的事,在python中,True和False是全局变量,因此:
False = True
if False:
print "Hello"
else:
print "World"
#>>> Hello
上一篇:Linux find查找命令


下一篇:[开源]QuickSwitchSVNClient,快速完成SVN Switch的工具