学习Python,这几个实用小技巧你如果不知道的话,那亏大了!

更新时间:2021-07-30 14:14:50 点击次数:843次
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

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!