简体   繁体   English

将参数更改为 python 中的 boolean 值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM