Глобальные переменные, объявленные внутри функции, по-прежнему считаются локальными
Я пытаюсь написать программу линкора. У меня есть две игровые матрицы: одна для игрока, другая для компьютера. Они определены за пределами 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()