为什么在Python 3.7中明确使用变量时未使用变量

时间:2019-08-25 09:50:54

标签: python python-3.x

我正在尝试创建一个函数,该函数将一个值输入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

在这里仅是我使用代码#的一部分上下文,而不是整个上下文

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。 我希望var2var3var4等可以打印到translate_num将它们转换成的内容,但是它们按照我在代码前面所定义的那样打印。

1 个答案:

答案 0 :(得分:2)

  

我希望var2var3var4等可以打印到translate_num将它们转换成的内容,但是它们按照我在代码前面所定义的那样打印。

您不能设置参数值。因此,var2 = ""语句没有任何意义。您所做的是设置 local 变量。但是 caller 端的变量将不会更新。想象一下,您使用translate_num(0, 5)调用了函数,那么您期望代码做什么?是否为5文字分配一个字符串?如果用translate_num(0, 1+2)调用它,然后将其分配给函数调用该怎么办?因此,这将导致很多奇怪的行为。某些编程语言允许这种“按引用传递”,例如C ++和C#(带有refout参数)。

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

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

然后您可以设置变量,例如:

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