代码在转换为函数后停止工作(Python)

时间:2015-11-02 21:33:08

标签: python python-3.x

我正在用Python编写蒙特卡罗模拟,我有一些代码可以复制矩阵中的某些行。当我最初编写代码时,它看起来像这样:

newReplicas = []

for j in range( len(replicas) ):
    replica = replicas[j]
    r2 = 0
    for x in replica:
        r2 += x * x
        V = 0.5 * mass * w**2 * r2
        W = exp(-(V - ER) / rootT)
        mn = int(W + random.uniform(0,1))
        if mn >= 3:
            newReplicas.append( replica )
            newReplicas.append( replica )
            newReplicas.append( replica )
        elif mn == 2:    
            newReplicas.append( replica )
            newReplicas.append( replica )
        elif mn == 1:
            newReplicas.append( replica )
replicas = newReplicas

这个工作非常好但是当我把它变成一个函数时,它会完全停止工作并且不会复制任何行。以下是我尝试将其转换为函数后的代码:

def branch(replicas): 
    newReplicas = []
    for j in range( len(replicas) ):
        replica = replicas[j]
        r2 = 0
        for x in replica:
            r2 += x * x
        V = 0.5 * mass * w**2 * r2
        W = exp(-(V - ER) / rootT)
        mn = int(W + random.uniform(0,1))
        if mn >= 3:
            newReplicas.append( replica )
            newReplicas.append( replica )
            newReplicas.append( replica )
        elif mn == 2:    
            newReplicas.append( replica )
            newReplicas.append( replica )
        elif mn == 1:
            newReplicas.append( replica )
    replicas = newReplicas

branch(replicas)

print(replicas)

我一直使用的值如下:

mass = 1
w = 1
ER = 0.5
rootT = sqrt(0.02)

为什么会发生这种情况,我该如何解决?

3 个答案:

答案 0 :(得分:1)

您需要在函数内返回副本并调用函数

def branch(replicas):
    # code here
    return new_replicas

然后别的地方叫它

print branch(replicas)

函数可以执行任何您想要的操作,但要实际执行代码,您必须通过键入其名称来调用该函数(在您的情况下为branch并在之后添加括号以调用该函数。)你的函数接受一个参数,你必须通过函数调用中的任何内容来传递branch(replicas)

如果要在执行该函数后使用这些副本,则为其分配变量

new_replicas = branch(replicas)

答案 1 :(得分:0)

您需要实际调用该函数才能运行它:

branch(something)

答案 2 :(得分:0)

该函数必须返回或打印某些内容或为全局变量赋值。否则,没有必要使用它。其次,你必须在函数本身之外的地方调用它。

myNewProject