Pycharm中函数中变灰的变量

0s7z1bwu  于 2023-10-20  发布在  PyCharm
关注(0)|答案(2)|浏览(263)

我对python相当陌生,我试图在函数中更改变量的值
为了更容易理解,我将第一个文件命名为File1,第二个文件命名为File2,我在File1中为变量赋值,并在File2中定义了一个函数,当某个事件发生时,该函数应该更改变量的值,但它永远不会更改,相反,变量在函数中变灰。我是不是做错了什么,或者说我有可能做错什么?
Edit:下面是一个代码示例:

File1:
global winner
winner = 0
player_1 = 0
player_2 = 0

File2:
def determine_winner(winner):
    if certain_event:
        winner = 1
    else:
        winner = 2
def winner_score(winner, player_1, player_2):
    if winner == 1:
        player_1 += 1
    elif winner == 2:
        player_2 += 1

这是我的代码的简化版本,赢家永远不会改变值

yr9zkbsy

yr9zkbsy1#

如果它是灰色的,这通常意味着它没有被使用。您正在更改/分配代码中其他地方未使用的变量的值。由于某种原因,你在这个函数中创建了一个局部变量,而你实际上并没有引用你想要的全局变量。
我建议你看看这个链接,看看你想做什么:https://www.geeksforgeeks.org/how-to-import-variables-from-another-file-in-python/
尝试在修改它的函数中返回赢家的新值:

def determine_winner(winner):
    if certain_event:
        winner = 1
    else:
        winner = 2
    return winner

并确保当你调用这个函数时,它看起来像这样:

file1.winner = determine_winner(file1.winner)

或者,你可以简单地删除所有参数,并直接在函数中修改全局变量:

def determine_winner():
    if certain_event:
        file1.winner = 1
    else:
        file1.winner = 2

这里发生的是你正确地将全局变量作为参数传入,问题是当你将变量传入函数时,它只是传入值,而不是指向该数据的实际指针。因此,当你在函数中改变赢家变量时,你就是在改变局部winner变量的值。对于全局赢家变量,你需要返回新的值,或者只是从函数内部引用全局变量,而不是将其作为参数传递给函数。
希望这对你有帮助!

x6yk4ghg

x6yk4ghg2#

它是灰色的,因为在两个文件之间没有对该变量winner的引用。
使用类来完成这个操作,并像这样命名你的文件:

  • File1.py变为Player.py
  • File2.py变为Game.py

下面是伪代码:
Player.py

class Player:
   def __init__(self):
       self.winner = False

Game.py:

import Player # assumes they are in the same directory

def determine_winner(player_1, player_2):
    if certain_event:
        player_1.winner = True
    else:
        player_2.winner = True
    return player_1, player_2

def winner_score(player_1, player_2):
    if player_1.winner:
        player_1 += 1
    elif player_2.winner:
        player_2 += 1

if __name__ == "__main__":
    # If you run the file, it's like you're "playing" the game
    player_1 = Player() # instantiate player 1
    player_2 = Player() # instantiate player 2 (could do more players too)

   # Game stuff
   player_1, player_2 = determine_winner(player_1, player_2)
   # etc...

我的意思是,我不知道你的目标是什么(你可以做其他的事情来使这种方式更好),但一般来说,你应该与类一起工作。

相关问题