这些名称是数字常量,每个都是 2 的幂。这意味着它们是具有单个位集的整数。
您可以将这些数字与 相结合|
以生成具有多个位集的整数,每个位代表一个特定选项:
>>> import fcntl
>>> fcntl.LOCK_SH # bit 1 set
1
>>> fcntl.LOCK_EX # bit 2 set
2
>>> fcntl.LOCK_NB # bit 3 set
4
>>> fcntl.LOCK_UN # bit 4 set
8
>>> fcntl.LOCK_SH | fcntl.LOCK_UN # combine bits 1 and 4
9
>>> format(fcntl.LOCK_SH | fcntl.LOCK_UN, '04b')
'1001'
这是在系统调用中传递设置配置的一种非常常见的方式。fctnl.lock()
就是一个这样的例子,但同样的技术还有更多的例子。该os.open()
调用是另一个示例,re
模块标志也是如此。
重要的是要意识到这些只是整数。除了使用fcntl.LOCK_EX | fcntl.LOCK_NB
(设置位 2 和 3)设置标志外,您还可以传入6
:
fcntl.lockf(fp, 6)
就lockf()
功能而言,没有区别。使用命名常量的意义在于,使用它们可以生成自文档化代码。