2015-03-23 3 views
1

Возможно ли создать список внутри функции? У меня есть некоторые команды, которые я хотел бы объединить в новую функцию (runTimes). Код ниже работает и делает то, что я хочу, чтобы он делал. У меня возникают проблемы с превращением его в функцию.python: возможно ли создать список внутри функции?

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» не определен

Это сокращенный пример моего кода, но она иллюстрирует мою проблему. Мне нужно иметь возможность добавлять finalList с единственным значением, заимствованным из firstList, каждый раз в цикле. То, как я это делаю, - это определить «firstList = []» перед выполнением runRounds каждый раз, так что firstList будет пустым каждый раз, когда выполняется runRounds. Но если я попытаюсь создать 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 

ответ

2

переменные, созданные в функции не являются глобальными, так вы не можете получить к ним доступ в любое время.

Вот код, который будет работать

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 в функции. Вы должны вернуть оба из них, чтобы они могли получить доступ позднее,

Смежные вопросы