注意:虽然接受的答案达到了我想要的结果,并且@ecatmur答案提供了更全面的选项,但我觉得强调我的用例首先是一个坏主意是非常重要的.这在@Jason Orendorff的答案中得到了很好的解释.
注意:这个问题不是关于的问题sys.maxint的重复.它与此无关sys.maxint; 即使在sys.maxint可用的python 2中,它也不代表最大整数(参见接受的答案).
我需要创建一个比任何其他整数都大的整数,这意味着一个int对象True在与任何其他int对象相比时返回>.用例:库函数需要一个整数,强制某种行为的唯一简单方法是传递一个非常大的整数.
在python 2中,我可以使用sys.maxint(编辑:我错了).在python 3中,math.inf是最接近的等价物,但我无法将其转换为int.
我在配置文件中定义了一个切片参数:
max_items = 10
Run Code Online (Sandbox Code Playgroud)
我的类根据此参数切片列表:
items=l[:config.max_itmes]
Run Code Online (Sandbox Code Playgroud)
什么时候max_items = 0,我想要取出所有物品l.快速而肮脏的方式是:
config.max_items=config.max_items if config.max_items>0 else 1e7
Run Code Online (Sandbox Code Playgroud)
假设会有更少的1e7项目.但是,我不喜欢使用魔术数字.是否有更多的Pythonic方式,如无穷大整数常量?
搜索此主题时,我遇到了以下问题:如何表示整数无穷大?
我同意 Martijn Peeters 的观点,即添加一个单独的特殊无穷大值int可能不是最好的想法。
然而,这使得类型提示变得困难。假设以下代码:
myvar = 10 # type: int
myvar = math.inf # <-- raises a typing error because math.inf is a float
Run Code Online (Sandbox Code Playgroud)
但是,代码在任何地方都按其应有的方式运行。我的类型提示在其他任何地方都是正确的。
如果我改写以下内容:
myvar = 10 # type: Union[int, float]
Run Code Online (Sandbox Code Playgroud)
我可以math.inf毫不费力地分配。但现在任何其他浮动也被接受。
有没有办法正确限制类型提示?或者我type: ignore每次分配无穷大时都被迫使用?