Глобальные переменные, объявленные внутри функции, по-прежнему считаются локальными

Я пытаюсь написать программу линкора. У меня есть две игровые матрицы: одна для игрока, другая для компьютера. Они определены за пределами main потому что я хочу, чтобы они были глобальными переменными, потому что несколько функций манипулируют / читают их. Я использую Python 2.6.1.

#create player game board (10x10 matrix filled with zeros)
playerBoard = [[0]*10 for i in range(10)]
#create computer game board (10x10 matrix filled with zeros)
computerBoard = [[0]*10 for i in range(10)]

Затем я определяю основную функцию.

#define main function
def main():
    global playerBoard
    global computerBoard
    #keepGoing is true
    keepGoing = True
    #while keepGoing is true
    while keepGoing:
        #call main menu function. Set to response.
        response = mainMenu()
        #if response is 1
        if response == "1":
            #begin new game
            #call clearBoards function
            clearBoards()
            #call resetCounters function
            resetCounters()
            #call placeShips function (player)
            playerBoard = placeShips(playerBoard, "player")
            #call placeShips function (computer)
            computerBoard = placeShips(computerBoard, "computer")
            #call guessCycler function
            guessCycler()
        #if response is 2
        if response == "2":
            #keepGoing is false
            keepGoing = False

Несмотря на мое заявление global playerboard а также global computerBoard в main PyScripter по-прежнему говорит, что это локальные переменные. Я не понимаю этого. Как я могу убедиться, что они глобальные?

Документы, на которые я уже посмотрел:
Использование глобальных переменных в функции, отличной от той, которая их создала
Изменение глобальных переменных внутри функции
http://www.python-course.eu/global_vs_local_variables.php

1 ответ

Я определенно думаю, что вы должны пересмотреть, если вам нужно, чтобы они были глобальными - вы не делаете.

Самый дешевый способ - это объявить ваши вещи и передать их в качестве параметров функции

def MyFunc(board1):
    print board1

board1 = "Very weak horse"
MyFunc(board1)    

Реальный способ сделать это - создать класс, а затем получить к нему доступ, используя

class MySuperClass():
     def __init__(self):
         self.horse = "No way up" 

     def myRealCoolFunc(self):
           print self.horse
 uhhh = MySuperClass()
 uhhh.myRealCoolFunc()
Другие вопросы по тегам