[英]What are use cases to hand over different numbers in random.seed( 0 )
[英]Generation of random numbers and the use of random.seed()
我有一個腳本,該腳本應生成一個隨機數,代表傳感器溫度在25到28°C(含)之間,並使用體內的xml執行POST請求。 代碼的結構如下:
def randomTemperature():
random.seed()
return str(random.randint(25,28))
create_DATA_contentInstance_xml_body = '''<obj>
<str name="appId" val="''' + new_senzor_name + '''"/>
<str name="category" val="temperature "/>
<int name="data" val="''' + randomTemperature() + '''"/>
<int name="unit" val="celsius"/>
</obj>'''
create_DATA_contentInstance = urllib2.Request(url=create_DATA_contentInstance_url ,
data=create_DATA_contentInstance_xml_body,
headers={'Authorization': 'Basic abcaW46YabcaW4='})
def createDATAcontentInstance():
urllib2.urlopen(create_DATA_contentInstance)
print "\n=== Created a DATA contentInstance ==="
def createSensorAndDataInstances():
while True:
#generate a random delay
randomDelay = random.randint(1,5)
time.sleep(randomDelay)
createDATAcontentInstance()
createSensorAndDataInstances()
如果我運行createSensorAndDataInstances()
,則始終返回並發布相同的模擬溫度。
我目前的理解是random.seed()
方法使用系統的當前時間作為該方法的參數,因此,如果我運行以下代碼,該方法應返回一個隨機數,這是我腳本的簡化版本碼:
import random
import time
def randomTemperature():
random.seed()
return str(random.randint(25,28))
def createSensorAndDataInstances():
while True:
#generate a random delay
randomDelay = random.randint(1,5)
time.sleep(randomDelay)
print randomTemperature()
createSensorAndDataInstances()
有人知道為什么在第一種情況下它總是返回相同的數字嗎?
EDIT1:嘗試了@dursk的建議,但仍然無法正常工作。 我進行了以下更改:
create_DATA_contentInstance_xml_body = '''<obj>
<str name="appId" val="''' + new_senzor_name + '''"/>
<str name="category" val="temperature "/>
<int name="data" val="{}"/>
<int name="unit" val="celsius"/>
</obj>
'''
和
create_DATA_contentInstance = urllib2.Request(url=create_DATA_contentInstance_url ,
data=create_DATA_contentInstance_xml_body.format(randomTemperature()),
headers={'Authorization': 'Basic YWRtaW46YWRtaW4='})
第一次加載模塊時,對xml字符串中的randomTemperature()
的調用執行一次 。 您需要參數化字符串,然后調用該方法,每次都傳遞一個新值。
create_DATA_contentInstance_xml_body = '''
<obj>
<str name="appId" val="{}"/>
<str name="category" val="temperature "/>
<int name="data" val="{}"/>
<int name="unit" val="celsius"/>
</obj>
'''
def createDATAcontentInstance():
urllib2.urlopen(create_DATA_contentInstance.format(
new_senzor_name,
randomTemperature()
)
print "\n=== Created a DATA contentInstance ==="
因為您在同一秒內重復調用random.seed()。 您需要在腳本開頭將其命名為ONCE,而無需再做一次。 不應將它放置在您多次調用的函數中。
對不起 ,不是真的,請參閱durks的回答。 但是我所說的random.seed()(每個腳本只需調用一次)仍然有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.