Python大神用的贼溜,9个实用技巧分享给你( 二 )
import signalimport resourceimport os# To Limit CPU timedef time_exceeded(signo, frame):print("CPU exceeded...")raise SystemExit(1)def set_max_runtime(seconds):# Install the signal handler and set a resource limitsoft, hard = resource.getrlimit(resource.RLIMIT_CPU)resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))signal.signal(signal.SIGXCPU, time_exceeded)# To limit memory usagedef set_max_memory(size):soft, hard = resource.getrlimit(resource.RLIMIT_AS)resource.setrlimit(resource.RLIMIT_AS, (size, hard))
我们可以看到 , 在上面的代码片段中 , 同时包含设置最大 CPU 运行时间和最大内存使用限制的选项 。 在限制 CPU 的运行时间时 , 我们首先获得该特定资源(RLIMIT_CPU)的软限制和硬限制 , 然后使用通过参数指定的秒数和先前检索到的硬限制来进行设置 。 最后 , 如果 CPU 的运行时间超过了限制 , 我们将发出系统退出的信号 。 在内存使用方面 , 我们再次检索软限制和硬限制 , 并使用带「size」参数的「setrlimit」和先前检索到的硬限制来设置它 。
控制可以/不可以导入什么有些语言有非常明显的机制来导出成员(变量、方法、接口) , 例如在 Golang 中只有以大写字母开头的成员被导出 。 然而 , 在 Python 中 , 所有成员都会被导出(除非我们使用了「all」):
def foo():passdef bar():pass__all__ = ["bar"]
在上面这段代码中 , 我们知道只有「bar」函数被导出了 。 同样 , 我们可以让「all」为空 , 这样就不会导出任何东西 , 当从这个模块导入的时候 , 会造成「AttributeError」 。
实现比较运算符的简单方法为一个类实现所有的比较运算符(如 lt , le , gt , ge)是很繁琐的 。 有更简单的方法可以做到这一点吗?这种时候 , 「functools.total_ordering」就是一个很好的帮手:
from functools import total_ordering@total_orderingclass Number:def __init__(self, value):self.value = http://kandian.youth.cn/index/valuedef __lt__(self, other):return self.value < other.valuedef __eq__(self, other):return self.value == other.valueprint(Number(20)> Number(3))print(Number(1) < Number(5))print(Number(15) >= Number(15))print(Number(10) <= Number(2))
这里的工作原理究竟是怎样的呢?我们用「total_ordering」装饰器简化实现对类实例排序的过程 。 我们只需要定义「lt」和「eq」就可以了 , 它们是实现其余操作所需要的最小的操作集合(这里也体现了装饰器的作用——为我们填补空白) 。
结语并非本文中所有提到的功能在日常的 Python 编程中都是必需或有用的 , 但是其中某些功能可能会不时派上用场 , 而且它们也可能简化一些原本就很冗长且令人烦恼的任务 。 还需指出的是 , 所有这些功能都是 Python 标准库的一部分 。 而在我看来 , 其中一些功能似乎并不像标准库中包含的标准内容 , 所以当你使用 Python 实现本文提到的某些功能时 , 请先参阅 Python 的标准库 , 如果你不能找到想要的功能 , 可能只是因为你还没有尽力查找(如果真的没有 , 那它肯定也存在于一些第三方库) 。
原文来自:
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- 大神|研究完各路大神,终于知道互联网创业的你为何不赚钱
- 告诉|阿里大佬告诉你如何一分钟利用Python在家告别会员看电影
- Python源码阅读-基础1
- Python调用时使用*和**
- 如何基于Python实现自动化控制鼠标和键盘操作
- 解决多版本的python冲突问题
- 学习python第二弹
- 快速概览 + 详细了解N:N聚类算法是如何应用的
- Python中文速查表-Pandas 基础