可以%s是一个整数? * Python代码*

时间:2013-07-21 18:55:40

标签: python

从djangobook看这个django代码:

from django.http import Http404, HttpResponse
import datetime

def hours_ahead(request, offset):
    try:
        offset = int(offset)
    except ValueError:
        raise Http404()
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)
    return HttpResponse(html)
尝试后

,它将偏移量转换为整数,对吧?在'datetime.timedelta(hours = offset)'行中,offset用作整数,但在行中 'html =“在%s小时内,它将是%s。” %(偏移量,dt)'

偏移是%s,这是一个字符串,对吗?还是我想念理解?我以为%s只能是一个字符串,而不是一个整数?

3 个答案:

答案 0 :(得分:11)

%s在其相应的参数上调用str()方法...(类似于%r调用repr()) - 因此其中任何一个都可以用于任何对象......与%d%i相同)和%f不同,例如需要适当的类型。

答案 1 :(得分:1)

如果offset整数(在这种特殊情况下,对于任何对象类型都不是这样),那么您可以使用%s中的任何一个,{{1} },%d,你会得到相同的结果。

%r格式化显示的整数,%d调用%s参数,str()调用%r

repr()

另见documentation

答案 2 :(得分:1)

将来,当你对某些事情好奇时,启动翻译并自己探索最简单的案例。

>>> a = 1
>>> a
1
>>> 'this is %s string.' % (a)
'this is 1 string.'

然后从那里推断出问题。也许接下来使用一个任意对象,因为int工作在你认为你需要str的地方:

>>> from threading import Thread
>>> b = Thread()
>>> b
<Thread(Thread-1, initial)>
>>> 'this is %s string.' % (b)
'this is <Thread(Thread-1, initial)> string.'

这是我探索意外结果的一般流程。如果你是一名博士,那就去吧,但我个人从来没有读过这本书。我只是不这样吸收信息。