簡體   English   中英

Python不允許我在函數內部使用變量

[英]Python won't let me use variable inside function

我不明白為什么它不能讓我在函數內部使用display_w或display_h。 我無法在函數內部使用它,因為我不想在再次使用它時將其重置。 如何允許它使用這些變量?

import pygame

pygame.init()

display_w = 800
display_h = 600

white = (255, 255, 255)
black = (0, 0, 0)
grey = (100, 100, 100)


def run():

    print("Input your message: ")
    msg = input()

    print("Enter font size: ")
    font_size = int(input())

    display = pygame.display.set_mode((display_w, display_h))
    pygame.display.set_caption("TextPos")

    text_x = 0
    text_y = 0

    def message_to_screen(msg, color, font_size, x, y):

        font = pygame.font.SysFont(None, font_size)
        screen_text = font.render(msg, True, color)
        display.blit(screen_text, [x, y])
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_r:
                    running = False
                    pygame.quit()
                    run()
                if event.key == pygame.K_q:

                    print("Enter display width: ")
                    display_w = int(input())

                    print("Enter display height: ")
                    display_h = int(input())
                    running = False

            message_to_screen(msg, (255, 255, 255), 50, text_x, text_y)
            m_x, m_y = pygame.mouse.get_pos()
            text_x = m_x
            text_y = m_y

            display.fill(white)
            message_to_screen("X: %s" % m_x, black, 30, 10, 10)
            message_to_screen("Y: %s" % m_y, black, 30, 10, 30)
            message_to_screen(msg, black, font_size, text_x, text_y)
            message_to_screen("Press Q to Change Screen Size", grey, 30, display_w - 310, 0)
            message_to_screen("Press R to Restart", grey, 30, display_w - 180, 30)

            pygame.display.update()
run()

來自https://docs.python.org/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python

在Python中,僅在函數內部引用的變量是隱式全局的。 如果在函數體內任何位置為變量分配了值,除非明確聲明為全局變量,否則將假定該變量為局部變量。

盡管起初有些令人驚訝,但片刻的考慮可以解釋這一點。 一方面,要求全局分配變量可防止意外副作用。 另一方面,如果所有全局引用都需要全局,那么您將一直使用全局。 您必須將對內置函數或導入模塊的組件的每個引用聲明為全局引用。 這種混亂將破壞全球宣言對確定副作用的有用性。

在您的情況下,您嘗試在函數中設置變量,因此Python將其視為局部變量。

要將它們視為全局變量,請在本地定義它們時使用global關鍵字,以指示您正在引用和修改函數范圍之外的值。

將它們添加為參數?

def run(display_w, display_h):

一種訪問變量的奇怪方法。 假設您的模塊名稱為xyz。 然后:

import xyz

def func():
    xyz.display_w = 80

暫無
暫無

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

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