python - flask 开发中这里的seed()方法有什么用?

 linjiabin43 发布于 2022-10-30 08:13
class User(UserMixin, db.Model):
         # ...
    @staticmethod
    def generate_fake(count=100):
             from sqlalchemy.exc import IntegrityError
             from random import seed
             import forgery_py
             seed()
             for i in range(count):
                 u = User(email=forgery_py.internet.email_address(), username=forgery_py.internet.user_name(True), password=forgery_py.lorem_ipsum.word(), confirmed=True, name=forgery_py.name.full_name(), location=forgery_py.address.city(), about_me=forgery_py.lorem_ipsum.sentence(), member_since=forgery_py.date.date(True))
                 db.session.add(u)
                 try:
                     db.session.commit()
                 except IntegrityError:
                     db.session.rollback()
                     
 class Post(db.Model):
         # ...
  @staticmethod
  def generate_fake(count=100):
         from random import seed, randint
         import forgery_py
         seed()
         user_count = User.query.count()
         for i in range(count):
            u = User.query.offset(randint(0, user_count - 1)).first()
            p = Post(body=forgery_py.lorem_ipsum.sentences(randint(1, 3)),
                      timestamp=forgery_py.date.date(True),
                      author=u)
            db.session.add(p)
            db.session.commit()
            
            
           
           
           seed()方法不是里面加了参数才能让随机结果相同吗?这里在两个方法上调用是为什么呢?这个是《Flask Web 开发》里的一个实例
1 个回答
  • 这个是python标准库里内置的随机数种子,不但python有,C,java里面也有,可以认为是系统提供的一个接口,一般随机数都是一个伪随机数,使用种子之后,能在概率上产生近似的随机数值,这个结论见
    http://www.zhihu.com/question/34606275

    http://blog.chinaunix.net/xmlrpc.php?r=b...

    是这样的,伪随机数的生成一般依赖于对每个初始值做操作,这里的某个初始值一般是由生成器生成的,这个初始值一般会根据当前时间产生,所以你在不同的时间调用,产生的值是不同的,如果你使用相同的种子,则产生的随机数是相同的。
    写了个例子,你看下。

    # -*- coding: utf-8 -*-
    
    import random
    random.seed(5)  # 这里不再试用无参数的seed,而是指定一个数
    
    print random.random()
    
    random.seed(5) # 这里不再试用无参数的seed,而是指定一个数
    print random.random()
    

    你可以看下,两次的random结果是一样的.附上random.seed的手册

    random.seed([x ])

    Initialize the basic random number generator. Optional argument x can be any hashable object. If x is
    omitted or None, current system time is used; current system time is also used to initialize the generator
    when the module is first imported. If randomness sources are provided by the operating system, they are
    used instead of the system time (see the os.urandom() function for details on availability).
    Changed in version 2.4: formerly, operating system resources were not used.

    2022-10-31 21:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有