V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
testVmap
V2EX  ›  Python

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

  •  1
     
  •   testVmap · 2017-11-03 13:56:21 +08:00 · 3907 次点击
    这是一个创建于 2581 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    #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)}
        }]
    
    6 条回复    2017-11-03 17:29:06 +08:00
    morefreeze
        1
    morefreeze  
       2017-11-03 14:26:20 +08:00
    那是因为 api_102 在 import interface_data_random 已经被确定了,你的 data_module 也就确定了,总之,data_module 就是**一个**确定的值,和你循环几次没有关系
    可以把 api_102 包到一个函数里,并且每次循环调用这个函数
    takanasi
        2
    takanasi  
       2017-11-03 14:40:57 +08:00
    你这个代码 for 根本运行不了,而且 //是什么鬼
    vipfts
        3
    vipfts  
       2017-11-03 15:21:16 +08:00
    import 机制问题吧 在 import 的时候 params 的值已经 random 出来了
    大概用闭包 pickle 一下?? 我是不会
    zwgmlr3
        4
    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
        5
    testVmap  
    OP
       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
        6
    hcnhcn012  
       2017-11-03 17:29:06 +08:00 via iPhone
    放在一个包,不然在 import 的时候就已经 random 好了,在后面调用的时候当然只有重复引用了啊,如果一定要放两个包,你把 interface_data_random.api_02 封装成一个函数然后在另个文件里 for 调用就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1430 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 23:51 · PVG 07:51 · LAX 15:51 · JFK 18:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.