簡體   English   中英

python:是否可以在函數內創建一個列表?

[英]python: Is it possible to create a list inside of a 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。 我這樣做的方法是在每次執行runRounds之前定義'firstList = []',以便每次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

在函數中創建的變量不是全局變量,因此您無法隨時訪問它們。

這是可行的代碼

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 你必須返回這兩個,以便以后訪問它們,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM