基本问题无法导入功能名称
我得到一个名字导入错误,而不是在一个方式,是两个文件之间是一致的。我可以将文件A中的名称导入文件B,但不能反过来。
更新基于评论
我(愚蠢)命名的文件 “mix_max.py”,而不是 “min_max.py”。我已经相应地更改了文件并更新了GitHub仓库。我也更新了我的问题中的代码以反映这一点。
背景和代码
而不是在这里复制的所有代码,我做了一个回购协议,以显示我在说什么。
我有以下min_max.py文件:
https://github.com/jeffnyman/tic_tac_toe/blob/master/min_max.py
你可以看到有一条线从tic_tac_toe导入:
from tic_tac_toe import available_moves, apply_move, has_winner
这工作得很好,我能够使用min_max.py中的那些函数,例如74,84和88行。
不过,我也有以下tic_tac_toe.py文件:
https://github.com/jeffnyman/tic_tac_toe/blob/master/tic_tac_toe.py
你会发现一条线,做了类似的进口周围的其他方法:
from min_max import min_max_player
问题
但是,当我尝试使用它(请参阅行126):
if __name__ == '__main__':
play_game(random_player, min_max_player, log=True)
这不起作用。而且它不起作用,因为当我尝试运行tic_tac_toe.py时,from/import会导致“无法导入名称min_max_player”。
解决方法1
我发现我可以改变我的导入到此解决这个问题:
import min_max
且改变这样的代码:
if __name__ == '__main__':
play_game(random_player, min_max.min_max_player, log=True)
的关键变化有min_max.min_max_player
。
我不明白为什么这是必要的,特别是因为我从 tic_tac_toe导入时不必这样做。py 至 min_max.py。
解决方法2
我能明显推迟这样导入:
if __name__ == '__main__':
from min_max import min_max_player
play_game(random_player, min_max_player, log=True)
工程。
我来自Ruby和Java上下文中的Python,所以我担心我在这里丢失了非常明显的东西。所以也许我列为“解决方法”的那些事实上是实际的解决方案?
欢迎来到Python,这很可能是您试图实现的循环导入,也是耦合的症状。祝你好运! – hurturk
是mix_max还是min_max,请检查您的导入语句并更新 – Stack
@Stack好点!我错误地命名了文件'mix_max.py'(令人尴尬)。我会更新这个问题。因此,调用“mix_max”的导入是正确的,但是,我更新了代码以使用正确的文件名。所以同样的错误仍然适用。 –