1、使用字典来存储选择操作
我们能构造一个字典来存储表达式:
In [70]: stdacl = {
...: 'sum':lambda x,y : x + y,
...: 'subtract':lambda x,y : x - y
...: }
In [73]: stdacl['sum'](9,3)
Out[73]: 12
In [74]: stdacl['subtract'](9,3)
Out[74]: 6
2、一行代码计算任何数的阶乘
python3环境:
In [75]: import functools
In [76]: result = ( lambda k : functools.reduce(int.__mul__,range(1,k+1),1))(3)
In [77]: result
Out[77]: 6
3、找到列表中出现最频繁的数
In [82]: test = [1,2,3,4,2,2,3,1,4,4,4]
In [83]: print(max(set(test),key=test.count))
4、重置递归限制
Python 限制递归次数到 1000,我们可以重置这个值:
import sys
x=1001
print(sys.getrecursionlimit())
sys.setrecursionlimit(x)
print(sys.getrecursionlimit())
#1-> 1000
#2-> 100
5、原地交换两个数字
Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:
In [1]: x,y = 10 ,20
In [2]: print(x,y)
10 20
In [3]: x, y = y, x
In [4]: print(x,y)
20 10
赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 和 。
一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换。
6、链状比较操作符
比较操作符的聚合是另一个有时很方便的技巧:
In [5]: n = 10
In [6]: result = 1 < n < 20
In [7]: result
Out[7]: True
In [8]: result = 1 > n <= 9
In [9]: result
Out[9]: False
7、使用三元操作符来进行条件赋值
三元操作符是 if-else 语句也就是条件操作符的一个快捷方式:
[表达式为真的返回值] if [表达式] else [表达式为假的返回值]
这里给出几个你可以用来使代码紧凑简洁的例子。下面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。
x = 10 if (y == 9) else 20
1
同样地,我们可以对类做这种操作:
x = (classA if y == 1 else classB)(param1, param2)
1
在上面的例子里 classA 与 classB 是两个类,其中一个类的构造函数会被调用.
下面是另一个多个条件表达式链接起来用以计算最小值的例子:
In [10]: def small(a,b,c):
...: return a if a<=b and a<=c else ( b if b<=a and b<=c else c)
...:
In [11]: small(1,0,1)
Out[11]: 0
In [12]: small(1,2,3)
Out[12]: 1
我们甚至可以在列表推导中使用三元运算符:
In [14]: [ m**2 if m > 10 else m**4 for m in range(20) ]
Out[14]:
[0,1,16,81,256,625,1296,2401,4096,6561,10000,121,144,169,196,225,256,289,324,61]
8、检查一个对象的内存使用
在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:
python2.7:
import sys
x=1
print(sys.getsizeof(x))
#-> 24
python3:
In [86]: import sys
In [87]: x = 1
In [88]: sys.getsizeof(x)
Out[88]: 28
9、使用slots来减少内存开支
你是否注意到你的 Python 应用占用许多资源特别是内存?有一个技巧是使用 slots 类变量来在一定程度上减少内存开支。
```python
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
#1-> 1016
#2-> 888
很明显,你可以从结果中看到确实有内存使用上的节省,但是你只应该在一个类的内存开销不必要得大时才使用 slots。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。
10、使用lambda来模仿输出方法
In [89]: import sys
In [90]: lprint = lambda *args: sys.stdout.write("".join(map(str,args)))
In [91]: lprint("python","tips",1000,1001)
Out[91]: pythontips1000100118
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。