Python 如何设置在整个程序中不断重新分配的随机变量?
我想创建一个名为Random的变量,它每次调用时都会不断变化 我想要这段代码: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 = 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,无用,随便什么