为什么 math.ceil return flask shell 命令中的整数?
why math.ceil return a integer in flask shell command?
环境:
python: 2.7.5
flask = 0.12.2
flask-cors = 2.0.1
flask-script = 2.0.5
开始python shell:
$ python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.ceil(3.2)
4.0
math.ceil
return 一个浮点数,但是当我使用 flask-script
Shell 命令启动一个 python shell 时,它 return一个整数:
$ ./bin/python manage.py shell
==========================================
Starting server at 2018-01-06 15:30:14
==========================================
In [1]: import math
In [2]: math.ceil(3.2)
Out[2]: 4
我知道 python3 的 math.ceil
会 return 一个整数,但我用的是 python2,谁有好主意?
检查python版本:
In [1]: import sys
In [2]: print (sys.version)
2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
虽然看起来4是一个整数。 flask-script 可能在没有十进制扩展的情况下打印它。尝试 运行
math.ceil(3.2)/3
在烧瓶脚本中。如果它正常工作,它将打印 1.3333333333333333
。如果它打印 1
那么你应该尝试重新安装 flask-script.
我找到了根本原因,对于我们的 Flask 应用程序,我们添加了 future 包。
future is the missing compatibility layer between Python 2 and Python 3. It allows you to use a single, clean Python 3.x-compatible codebase to support both Python 2 and Python 3 with minimal overhead.
这个包重写了math.ceil
方法,它return一个整数:
In [5]: math.ceil.func_code
Out[5]: <code object ceil at 0x7fd74853cab0, file "/data/apps/ecoboost/eggs/future-0.16.0-py2.7.egg/future/backports/misc.py", line 31>
源码如下:
def ceil(x):
"""
Return the ceiling of x as an int.
This is the smallest integral value >= x.
"""
return int(oldceil(x))
环境:
python: 2.7.5
flask = 0.12.2
flask-cors = 2.0.1
flask-script = 2.0.5
开始python shell:
$ python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.ceil(3.2)
4.0
math.ceil
return 一个浮点数,但是当我使用 flask-script
Shell 命令启动一个 python shell 时,它 return一个整数:
$ ./bin/python manage.py shell
==========================================
Starting server at 2018-01-06 15:30:14
==========================================
In [1]: import math
In [2]: math.ceil(3.2)
Out[2]: 4
我知道 python3 的 math.ceil
会 return 一个整数,但我用的是 python2,谁有好主意?
检查python版本:
In [1]: import sys
In [2]: print (sys.version)
2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
虽然看起来4是一个整数。 flask-script 可能在没有十进制扩展的情况下打印它。尝试 运行
math.ceil(3.2)/3
在烧瓶脚本中。如果它正常工作,它将打印 1.3333333333333333
。如果它打印 1
那么你应该尝试重新安装 flask-script.
我找到了根本原因,对于我们的 Flask 应用程序,我们添加了 future 包。
future is the missing compatibility layer between Python 2 and Python 3. It allows you to use a single, clean Python 3.x-compatible codebase to support both Python 2 and Python 3 with minimal overhead.
这个包重写了math.ceil
方法,它return一个整数:
In [5]: math.ceil.func_code
Out[5]: <code object ceil at 0x7fd74853cab0, file "/data/apps/ecoboost/eggs/future-0.16.0-py2.7.egg/future/backports/misc.py", line 31>
源码如下:
def ceil(x):
"""
Return the ceiling of x as an int.
This is the smallest integral value >= x.
"""
return int(oldceil(x))