Python 如何设置在整个程序中不断重新分配的随机变量?

Python 如何设置在整个程序中不断重新分配的随机变量?,python,random,variable-assignment,Python,Random,Variable Assignment,我想创建一个名为Random的变量,它每次调用时都会不断变化 我想要这段代码: Random = randint(0, 10) print Random print Random print Random 而不是给我这样的东西: 6 6 6 3 6 1 而是类似于: 6 6 6 3 6 1 每次使用之前都不必重新分配Random。我还在几个不同的函数中使用了Random。那么,我如何允许它在代码中的任何地方使用,而不必每次都将其作为随机变量重新赋值呢 对不起,如果这是一个愚蠢的问题,但

我想创建一个名为Random的变量,它每次调用时都会不断变化

我想要这段代码:

Random = randint(0, 10)
print Random
print Random
print Random
而不是给我这样的东西:

6
6
6
3
6
1
而是类似于:

6
6
6
3
6
1
每次使用之前都不必重新分配Random。我还在几个不同的函数中使用了Random。那么,我如何允许它在代码中的任何地方使用,而不必每次都将其作为随机变量重新赋值呢

对不起,如果这是一个愚蠢的问题,但我在这方面非常新,我不知道我在做什么。请保持简单的解释

编辑:这里还有一些代码:

def something1(Random, useless, whatever)

etc...

def something2(Random, useless, whatever)

etc...

...

main():

   for index in range(800):

     Random = randint(1, 10)

     something1(Random, useless, whatever)


Random = randing(1, 10)


something2(Random, useless, whatever)

这会持续一段时间。

如果你所说的是你真正想要的(即每次使用时都给出随机值的变量),那么你并不真正想要一个变量。只需将
Random
的每个实例替换为
randint(0,10)
。或者,您可以制作自己的功能:

def rand10():
    return randint(0, 10)

然后每次使用
Random
变量时只需调用
rand10()

Random只是一个整数类型,它包含由randint()生成的值。因为它是一个整数类型,所以在每次调用时,如果不重新分配,它就不能更改其值

您所能做的是定义一个类,这样当它被告知打印时,它将返回一个不同的值:

from random import randint

class Random:
   def __str__(self):
      return str(randint(1,10))

random = Random()
print(random)   # prints a value
print(random)   # could print a different value
print(random)   # could print a different value
在这个想法非常糟糕的地方,你几乎可以做你想做的事,但是。。。既然我们在这里提出了一个非常糟糕的想法,我不会真正写出代码,但我会告诉你怎么做,如果你想的话,你可以想出来

  • 创建一个新模块,让我们调用它
    Util
  • Util
    中编写一个类,我们将该类称为“疯狂”
  • 在类
    Util.Crazy
    中,创建一个名为
    Random
    ,其getter返回一个随机值(使用您禁止的任何边界)
  • 在模块级创建名为
    C
    Util.Crazy
    实例
  • 现在,您可以在需要新值的任何时候拼写它
    C.Random
  • 我没有仔细考虑它,但我没有看到任何明显的方法来摆脱
    C.Random
    ,只称它为
    Random
    (如果你将
    Random
    赋值给
    Crazy().Random
    ,它只会坚持值,而不是绑定)。我确信你可以用
    globals()
    做一些真正可怕的事情,或者你可以使用原始描述符协议来做你想做的事情

    import numpy as np
    x = "np.random.randn()"
    for i in range(3):
       print(eval(x))
    
    eval()计算传递给它的str变量中写入的内容。每次调用eval(x)都会得到一个新的随机变量

    我同意这有点欺骗,但会让代码更干净一些,因为eval(x)看起来肯定比调用某个表达式更好(特别是如果您的rv分布是由复杂的表达式定义的,并且您经常在代码中使用它)


    我相信这就是您所需要的。

    您好,这可能会很晚,但您可以尝试将random分配给none,然后使用while函数给程序一个循环,然后在那里您可以将其分配给所需的随机数范围。我会举一个例子

    import random
    Random = None
    while Random != 0:
         Random = random.randint(0,10)
         print(Random)
    

    这意味着只要值不为零,就会不断生成值,如果生成了零,程序就会跳出循环

    这是你不能重新分配随机值的原因吗?因为我发布的只是一个简单的例子。我在程序中使用这个变量几十次,我不想在150行程序中每5行代码就使用一次。为什么不直接使用
    def foo():返回randint(0,10)
    ,然后调用
    foo()
    ?我使用的函数需要将一个随机变量作为参数。出于某种原因,如果我尝试在参数中调用rand10函数,它会显示:UnboundLocalError:assignmentuserDefinedFunction之前引用的局部变量“Random”是我创建的一个函数,它接受3个参数。我需要这个函数来循环,所以我将它设置在for循环中:对于范围(800)内的索引:userDefinedFunction(Random,x,y)这个想法是,与其使用
    userDefinedFunction(Random,x,y)
    ,不如使用
    userDefinedFunction(rand10(),x,y)
    。我可能不得不这样做。但是我如何允许所有函数使用随机函数,而不在每次使用函数时重新分配它呢?@FelisVulpes:也许更好的问题是,为什么不在每次使用函数时分配它如此重要?(如果我知道你在问什么)在这个例子中,你实际上没有重新分配任何东西。您所做的只是生成一个值,并在对随机对象调用print时打印它。您希望随机对象存储randint()的值,然后仅在特定时间更改它吗?是的,但这太复杂了。我只是想用昆克威说的话。把randomint(1,10)放在参数中。不知道你刚才说了什么。正如我所说,我是一个初学者。@FelisVulpes:你应该听其他人的话,他们告诉你,你根本不应该做你想做的事。在这里,编写函数并调用它是正确的解决方案。我不知道这是正确的做法。这个程序看起来很邋遢,因为我必须每隔5行重新分配一次变量。@FelisVulpes:Hrm,也许你应该给我们看更多的代码——很难弄清楚你在说什么。你上面给出的例子可以简单地通过在每行添加括号来解决(例如调用函数)-
    print Random()
    我这样做是为了上课,如果我的老师用谷歌搜索我的代码,我就无法让她找到我的代码。这里有一些东西:def something 1(随机的,无用的,随便什么)等等。。。定义一些东西2(随机的,无用的,不管什么)等等。。。main():对于范围(800)内的索引:Random=randint(1,10)something1(Random,无用,随便什么)Random=randing(1,10)something2(Random,无用,随便什么