本文共 2053 字,大约阅读时间需要 6 分钟。
今天每日一题暂停,给大家分享一些Python编程的小技巧!
1、打印引入模块的文件路径
如果你想知道引用到代码中模块的绝对路径,可以使用下面的技巧:
import threadingimport socketprint(threading)print(socket)#1-#2-
2、调试脚本
我们可以在 <pdb> 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:
import pdbpdb.set_trace()
我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。
3、 开启文件分享
Python 允许运行一个 HTTP 服务器来从根路径共享文件,下面是开启服务器的命令:
python3 -m http.server
上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。
4、一行代码计算任何数的阶乘
import functoolsresult = (lambda k: functools.reduce(int.__mul__, range(1,k+1),1))(3)print(result)#-> 6
5、找到列表中出现最频繁的数
test = [1,2,3,4,2,2,3,1,4,4,4]print(max(set(test), key=test.count))#-> 4
6、重置递归限制
Python 限制递归次数到 1000,我们可以重置这个值:
import sysx=1001print(sys.getrecursionlimit())sys.setrecursionlimit(x)print(sys.getrecursionlimit())#1-> 1000#2-> 1001
请只在必要的时候采用上面的技巧。
7、检查一个对象的内存使用
在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:
import sysx=1print(sys.getsizeof(x))#-> 28
8、 使用 __slots__ 来减少内存开支
你是否注意到你的 Python 应用占用许多资源特别是内存?有一个技巧是使用 __slots__ 类变量来在一定程度上减少内存开支。
import sysclass FileSystem(object): def __init__(self, files, folders, devices): self.files = files self.folders = folders self.devices = devicesprint(sys.getsizeof( FileSystem ))class FileSystem1(object): __slots__ = ['files', 'folders', 'devices'] def __init__(self, files, folders, devices): self.files = files self.folders = folders self.devices = devicesprint(sys.getsizeof( FileSystem1 ))#In Python 3.5#1-> 1016#2-> 888
很明显,你可以从结果中看到确实有内存使用上的节省,但是你只应该在一个类的内存开销不必要得大时才使用 __slots__。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。
9、不使用循环构造一个列表
import itertoolstest = [[-1, -2], [30, 40], [25, 35]]print(list(itertools.chain.from_iterable(test)))#-> [-1, -2, 30, 40, 25, 35]
10、 在 Python 中实现一个真正的 switch-case 语句
下面的代码使用一个字典来模拟构造一个 switch-case。
def xswitch(x): return xswitch._system_dict.get(x, None)xswitch._system_dict = {'files': 10, 'folders': 5, 'devices': 2}print(xswitch('default'))print(xswitch('devices'))#1-> None#2-> 2
更多题目:
关注小猿公众号,每天学习Python编程
转载地址:https://cxydev.blog.csdn.net/article/details/103296195 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!