Python 如何在循环内调用随机函数使结果随机

2017-11-03 13:56:21 +08:00
 testVmap

代码如下,要如何修改才能让每次循环结果不同

#interface.py
import interface_data_random

def run(url,data_module):
    for index,item in enumerate(data_module):
        print(item)

def main():
    url='www.baidu.com'
    data_module=[
        interface_data_random.api_102,
        ]
for i in range(5)://使用循环每次随机结果相同,单独调用随机结果就不同
    run(url,data_module)

if __name__ == '__main__':
    main()
#interface_data_random.py
import random

api_102=["102",
    {
        "params": {"id": random.randint(1,1000)}
    }]
3933 次点击
所在节点    Python
6 条回复
morefreeze
2017-11-03 14:26:20 +08:00
那是因为 api_102 在 import interface_data_random 已经被确定了,你的 data_module 也就确定了,总之,data_module 就是**一个**确定的值,和你循环几次没有关系
可以把 api_102 包到一个函数里,并且每次循环调用这个函数
takanasi
2017-11-03 14:40:57 +08:00
你这个代码 for 根本运行不了,而且 //是什么鬼
vipfts
2017-11-03 15:21:16 +08:00
import 机制问题吧 在 import 的时候 params 的值已经 random 出来了
大概用闭包 pickle 一下?? 我是不会
zwgmlr3
2017-11-03 15:33:09 +08:00
api_102 = lambda :["102",{"params": {"id": random.randint(1,1000)}}]

def api_102():
return ["102",{"params": {"id": random.randint(1,1000)}}]

调用的时候加括号:interface_data_random.api_102()

最后:Python 里单行注释用 #
testVmap
2017-11-03 16:08:01 +08:00
for i in range(5):#经过指点改了一下,这样就可以了
data_module=[
interface_data_random.api_102,
]
run(url,data_module)


感谢大家建议,封装成函数也不行,最后将定义放在了循环里
//是手贱随便打的,尴尬啊
hcnhcn012
2017-11-03 17:29:06 +08:00
放在一个包,不然在 import 的时候就已经 random 好了,在后面调用的时候当然只有重复引用了啊,如果一定要放两个包,你把 interface_data_random.api_02 封装成一个函数然后在另个文件里 for 调用就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX