从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只能是一个字符串,而不是一个整数?
答案 0 :(得分:11)
%s
在其相应的参数上调用str()
方法...(类似于%r
调用repr()
) - 因此其中任何一个都可以用于任何对象......与%d
(%i
相同)和%f
不同,例如需要适当的类型。
答案 1 :(得分:1)
如果offset
是整数(在这种特殊情况下,对于任何对象类型都不是这样),那么您可以使用%s
中的任何一个,{{1} },%d
,你会得到相同的结果。
%r
格式化显示的整数,%d
调用%s
参数,str()
调用%r
:
repr()
答案 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.'
这是我探索意外结果的一般流程。如果你是一名博士,那就去吧,但我个人从来没有读过这本书。我只是不这样吸收信息。