在Python中打印长整型
如果我运行这个代码,其中 vote.created_on 是一个 Python 的日期时间:
import calendar
created_on_timestamp = calendar.timegm(vote.created_on.timetuple())*1000
created_on_timestamp = str(created_on_timestamp)
created_on_timestamp 会被打印出来,并且会有一些包裹的引号(')。如果我用 int() 或者其他类似的东西处理它,我会得到像 1240832864000L 这样的结果,但在 JavaScript 看来,这并不是一个有效的数字(而我需要在 JavaScript 中使用这些日期时间)。
有没有人知道处理这种情况的最佳方法?我是不是应该把这个长数字转成字符串,然后去掉引号?这听起来有点疯狂。
=== 编辑补充 ===
更大的问题是 Django 把引号转换成了它的 HTML 编码形式 &39;(或者类似的)。处理这个问题的最好方法是把长数字转成字符串,当模板解析这个字符串时,使用 {{ created_on_timestamp|safe }} 来让引号正常显示。
2 个回答
在这行代码中:
created_on_timestamp = str(created_on_timestamp)
你正在把某个东西转换成字符串。Python控制台用单引号来表示字符串(你说的“tick marks”是指这个吗?)当然,字符串的数据本身是不包括引号的。
当你使用 int()
函数把它再转换回数字时,int()
会知道这个数字很大,所以返回一个长整型数字。
在Python控制台中,这个长数字后面会有一个 L
,但数字的实际内容是没有这个 L
的。
>>> l = 42000000000
>>> str(l)
'42000000000'
>>> l
42000000000L
>>> int(str(l))
42000000000L
>>> type( int(str(l)) )
<type 'long'>
虽然Python控制台是用这种方式(Python语法)来表示数字和字符串的,但你应该可以正常使用它们。你是担心会出现问题,还是说你现在真的遇到了什么问题呢?
>>> i = 1240832864000L
>>> i
1240832864000L
>>> print i
1240832864000
>>>
>>> '<script type="text/javascript"> var num = %s; </script>' % i
'<script type="text/javascript"> var num = 1240832864000; </script>'
这个 L 只有在你调用这个对象的 __repr__
方法时才会出现。
你是什么时候、怎么把这些数据发送给 JavaScript 的呢?如果你是以 JSON 格式发送的,那就不用担心长的字面量或者 Python 是怎么在 Python 内部显示它的对象了。