python:是否可以在函数内创建一个列表?

时间:2015-03-23 03:28:07

标签: python list function

是否可以在函数内创建列表?我有一些命令,我​​想整合到一个新函数(runTimes)。下面的代码可以工作并完成我想要它做的事情。我无法将其转换为函数。

import numpy as np
import random

numRounds = 10
numTimes = 5
finalList = []


# First Function
def runRounds(numberOfRounds):
    for xRound in range(numberOfRounds):
        if random.randint(0,100) >= 85:
            firstList.append(1)
        else:
            firstList.append(0)
    finalList.append(max(firstList))


# Run some # of times
for time in range(numTimes):
    firstList = []
    runRounds(numRounds)
    print firstList


print finalList

我不能只是缩进我的代码来创建一个可用的函数。在下面的示例中,我尝试这样做但它失败了因为' firstList'从来没有真正定义我的假设。我收到以下错误:

NameError:全局名称' firstList'未定义

这是我的代码的缩写示例,但它说明了我的问题。我需要能够在循环中每次从firstList追加一个带有单个值的finalList。我这样做的方法是定义' firstList = []'每次执行runRounds之前,每次runRounds执行时firstList都为空。但是,如果我尝试在新函数中创建firstList,它将无法工作。我在下面的例子中试试。我打赌有一种标准的方法可以做我需要做的事情,我不知道,我还是新的 - 感谢你的耐心...

import numpy as np
import random

numRounds = 10
numTimes = 5
finalList = []


# First Function
def runRounds(numberOfRounds):
    for xRound in range(numberOfRounds):
        if random.randint(0,100) >= 85:
            firstList.append(1)
        else:
            firstList.append(0)
    finalList.append(max(firstList))


# Run some # of times
def runTimes(numberofTimes):
    for time in range(numTimes):
        firstList = []
        runRounds(numRounds)
        print firstList


runTimes(numTimes)

print finalList

1 个答案:

答案 0 :(得分:3)

在函数中创建的变量不是全局变量,因此您无法随时访问它们。

以下是可行的代码

import numpy as np
import random

numRounds = 10
numTimes = 5
finalList = []

def runRounds(numberOfRounds, firstList, finalList):
    for xRound in range(numberOfRounds):
        if random.randint(0,100) >= 85:
            firstList.append(1)
        else:
            firstList.append(0)
    finalList.append(max(firstList))
    return (firstList, finalList)

def runTimes(numTimes, numRounds, finalList):
    for time in range(numTimes):
        firstList = []
        firstList, finalList = runRounds(numRounds, firstList, finalList)
        print(firstList)
    return (firstList, finalList)

firstList, finalList = runTimes(numTimes, numRounds, finalList)

print(finalList)

当您运行runRounds时,您需要将列表作为参数传递,因为您没有在函数中创建任何列表。最后,您需要返回列表,以便以后访问它们。

对于runTimes,您需要传递先前创建的numRounds变量和finalList,因为您正在函数中创建firstList。您必须返回这两个,以便以后可以访问它们,