[英]Change parameter to a boolean value in python
I was trying to create a back button in pygame using python but my parameter(condition) is not being set to false, how do I do this?我试图使用 python 在 pygame 中创建一个后退按钮,但我的参数(条件)没有设置为 false,我该怎么做? Here is my code:这是我的代码:
def back(condition): #condition - any boolean variable in my script
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if 5 + 125 > mouse[0] > 5 and 5 + 125 > mouse[1] > 5:
gameDisplay.blit(backBtn, (5, 5))
if click[0] == 1:
if condition:
condition = False
else:
gameDisplay.blit(backBtn_hover, (5, 5))
If you have any sort of answer please answer.如果您有任何答案,请回答。
Thank you: :D谢谢::D
Since condition
is of an immutable type, any change to it is only visible inside the function.由于condition
是不可变类型,因此对其的任何更改仅在 function 内部可见。
You will need to return it and assign it back when calling the function.在调用 function 时,您需要将其归还并重新分配。
def back(condition): #condition - any boolean variable in my script
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if 5 + 125 > mouse[0] > 5 and 5 + 125 > mouse[1] > 5:
gameDisplay.blit(backBtn, (5, 5))
if click[0] == 1:
if condition:
condition = False
else:
gameDisplay.blit(backBtn_hover, (5, 5))
return condition
...
condition = back(condition)
It is usually not advisable to make it a global variable so I'm not going to suggest that.通常不建议将其设为全局变量,因此我不建议这样做。
Do you expect this to happen?你期望这会发生吗?
condition = True
back(condition)
print(condition) # False
That's not how Python works.这不是 Python 的工作方式。 You can't change variables passed to functions.您不能更改传递给函数的变量。 Something like that would work.这样的事情会奏效。
container = { 'condition': True }
back(container)
print(container['condition']) # False
Because in this case you don't change the variable, but its content.因为在这种情况下,您不会更改变量,而是更改其内容。 But anyway it's bad code.但无论如何,这是糟糕的代码。 Normally you would do something like that:通常你会做这样的事情:
condition = True
condition = back(condition)
print(condition) # False
Of course you need to add a return statement to your function.当然你需要在你的 function 中添加一个 return 语句。
Your answer likely is due to scoping of your variables, three examples provided below that hopefully will lead you to a solution:您的答案可能是由于您的变量范围,下面提供的三个示例有望引导您找到解决方案:
Situation 1情况一
condition = True
def back(condition):
condition = False
print(f"{condition=}")
def main():
local_condition = back(condition)
global_condition = condition
print(f"{local_condition=}\n{global_condition=}")
if __name__ == '__main__':
main()
Results:结果:
condition=False
local_condition=None
global_condition=True
Situation 2 with added return in back funciton情况 2 在返回函数中添加了返回
condition = True
def back(condition):
condition = False
print(f"{condition=}")
return condition
def main():
local_condition = back(condition)
global_condition = condition
print(f"{local_condition=}\n{global_condition=}")
if __name__ == '__main__':
main()
Results 2:结果 2:
condition=False
local_condition=False
global_condition=True
Situation 3 redefining global情景三重新定义全球
condition = True
def back(condition):
condition = False
print(f"{condition=}")
return condition
def main():
global condition
condition = back(condition)
global_condition = condition
print(f"{condition=}\n{global_condition=}")
if __name__ == '__main__':
main()
Results 3:结果 3:
condition=False
condition=False
global_condition=False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.