首页 > 解决方案 > 为什么在 Python 3.7 中明确使用时不使用变量

问题描述

我正在尝试创建一个函数,我输入一个值var并输出一个值var2,但它不起作用。

我尝试使用 return 函数使代码返回值,但这并没有改变任何东西。

def translate_num(var, var2):
    if var == 0:
        var2 = ""
        return var2
    if var == 1:
        var2 = "x"
        return var2
    if var == 2:
        var2 = "o"
        return var2

从这里只是为了我使用代码的一些上下文 # !not the full context

top_lef = game[0][0]
top_mid = game[0][1]
top_rig = game[0][2]
mid_lef = game[1][0]
mid_mid = game[1][1]
mid_rig = game[1][2]
bot_lef = game[2][0]
bot_mid = game[2][1]
bot_rig = game[2][2]
translate_num(top_lef, var1)
translate_num(top_mid, var2)
translate_num(top_rig, var3)
translate_num(mid_lef, var4)
translate_num(mid_mid, var5)
translate_num(mid_rig, var6)
translate_num(bot_lef, var7)
translate_num(bot_mid, var8)
translate_num(bot_rig, var9)
print(" ---  ---  --- \n| ", var1, "  || ", var2, "  || ", var3, "  | \n ---  ---  ---  \n ---  ---  ---  "
                                                                 "\n| ", var4, "  || ", var5, "  || ", var6,
      "  |\n ---  ---  --- \n ---  ---  ---"
      " \n| ", var7, "  || ", var8, "  || ", var9, "  |\n ---  ---  ---")

Pycharm 提出一个错误,指出var2未使用该参数并且该函数var2从外部范围隐藏。我希望var2,var3var4打印到 translate_num 将它们变成的内容,但它们打印为我在代码中前面定义的内容。

标签: pythonpython-3.x

解决方案


我希望var2,var3var4打印到 translate_num 将它们变成的内容,但它们打印为我在代码中前面定义的内容。

您不能设置参数的值。所以这种var2 = ""说法毫无意义。你所做的是设置局部变量。但是调用方的变量不会更新。想象一下,你用 调用了这个函数translate_num(0, 5),那么你希望你的代码做什么?为文字分配一个字符串5?如果你用 调用它translate_num(0, 1+2),那么你会将它分配给函数调用怎么办?因此,它会导致很多奇怪的行为。一些编程语言允许这样的“按引用传递”,如 C++ 和 C#(使用refandout参数)。

因此,我们应该在这里使用返回值将结果传回并将其分配给变量:

def translate_num(i):
    return 'xo'[i-1:i]

然后你可以设置变量,如:

var1 = translate_num(top_lef)
var2 = translate_num(top_mid)
var3 = translate_num(top_rig)
# ...

推荐阅读