【发布时间】:2012-04-26 09:38:18
【问题描述】:
我编写的代码有效,但我想知道为什么。我不小心在代码中犯了一个错误,但由于某种原因它可以工作,为什么?当我将lastkeys 传递给move.mov 时,键不应该是一个新变量吗?与ent.playerlocation 相同,move.mov 中的player 不应该是一个新变量吗?当我退出函数时,原始变量将更改为新变量的值。我已经尝试重新创建它,但没能做到。
main.py:
import pygame
import move, updatescreen
class entities:
def __init__(self):
self.playerlocation = [64,64]
if __name__ == '__main__':
pygame.init()
screen=pygame.display.set_mode((640,360),pygame.RESIZABLE,32)#pygame.FULLSCREEN
pygame.display.set_caption('Pygame Window')
ent = entities()
lastkeys = [0,0,0,0]
ispaused = 0
while True:
move.userevents(lastkeys)
move.mov(lastkeys, ent.playerlocation)
updatescreen.gameupdate(screen,ent)
move.py:
import pygame, sys
def userevents(keys):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
keys[0] = 1
elif event.key == pygame.K_RIGHT:
keys[1] = 1
elif event.key == pygame.K_UP:
keys[2] = 1
elif event.key == pygame.K_DOWN:
keys[3] = 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
keys[0] = 0
elif event.key == pygame.K_RIGHT:
keys[1] = 0
elif event.key == pygame.K_UP:
keys[2] = 0
elif event.key == pygame.K_DOWN:
keys[3] = 0
def mov(keys,player):
if keys[0]:
player[0] -=1
elif keys[1]:
player[0] +=1
if keys[2]:
player[1] -=1
elif keys[3]:
player[1] +=1
【问题讨论】:
-
Python: How do I pass a variable by reference? 的可能重复项(我知道这与您所问的几乎完全相反,但答案是相关的,更重要的是,每次问这个问题时(大约 5一天次)在 SO 上,它会从不知道赋值和变异对象之间的区别,或者名称和变量之间的区别的人那里产生大量的虚假信息,所以......
标签: python function pointers reference module