1

我正在与局部和全局变量作斗争。

我正在这样做:

def SomeFunc(Input):
    if Input == 1:
        Input = "True"
    elif Input == 0:
        Input = "False"

RawInput=int(raw_input("Input 1 or 0: "))
SomeFunc(RawInput)
print str(RawInput)

它表明了这一点:

>>> def SomeFunc(Input):
    if Input ==1:
        Input = "True"
    elif Input ==0:
        Input = "False"

>>> RawInput = int(raw_input("Input 1 or 0: "))
Input 1 or 0: 1
>>> SomeFunc(RawInput)
>>> print str(RawInput)
1

我应该怎么做才能将输入转换为函数中的 str ?

4

4 回答 4

4

输入是int一个不可变对象。换句话说,你不能在任何地方改变它。但是,您可以将其分配给其他东西。关于 python 的一个棘手的事情是知道一切都只是一个参考。当您分配给某物时,您只需更改参考。将您的变量视为进入框中的字符串。当您分配给一个变量时,您将该字符串放在一个特定的框中。当您将该变量分配给其他东西时,您会更改字符串所在的框。当然,当您实际进行添加时,您添加的是框的内容,而不是字符串(这有点令人困惑)。如果您习惯于使用 C 编程,那么这有点像一切都是自动取消引用的指针(除非您进行赋值)。

那么该怎么办?最简单的事情是return从你的函数中获得价值。

def some_func(inpt):
    if inpt == 1:
        return "True"
    elif inpt == 0:
        return "False"
    else:
        raise ValueError("WHAT IS THIS GARBAGE? I SAID 0 OR 1!!!!") # ;^)

现在您可以将您的函数称为:

processed_input = some_func(rw_inpt)

作为旁注,您的功能可以浓缩为:

def some_func(inpt):
    return str(bool(inpt))

或者

def some_func(inpt):
    return "True" if inpt else "False"

这两个都通过("True"如果用户输入任何非 0 的整数,则返回)。如果你真的想强迫用户不要输入像“2”这样的东西,你可以这样做:

def some_func(inpt):
    return {1:"True",0:"False"}[inpt]

但是我不推荐那个...

于 2012-07-13T02:29:17.280 回答
1

注意:您可以这样做:print bool(int(raw_input("Input 1 or 0: ")))

更pythonic的方式如下:

def some_func(x):
    if x == 1:
        return "True"
    elif x == 0:
        return "False"

x = int(raw_input("Input 1 or 0: "))
x = some_func(x)
print x

但是,如果您确实想使用globals ,则可以这样做,但这确实很hacky,并且不是python提倡的良好编码实践之一。

def some_func():
    global x
    if x == 1:
        x = "True"
    elif x == 0:
        x = "False"

x = int(raw_input("Input 1 or 0: "))
some_func()
print x

其他一些注意事项:尽量不要使用像 bultins 这样的名称,例如。Input而且RawInput因为它使事情变得不清楚并将一切都混淆了。

于 2012-07-13T02:33:02.273 回答
1

基本上,您希望参数是按引用传递的,但这不是 Python 对基本数据类型的工作方式。这样做的pythonic方式如下:

def some_func(input):
    if input == 1:
        return "True"
    elif input == 0:
        return "False"

接着

raw_input = some_func(raw_input)
于 2012-07-13T02:30:14.507 回答
0

我应该怎么做才能将输入转换为函数中的 str ?

def SomeFunc(Input):
    as_string = str(Input)
    if Input == '1':
        Input = "True"
    elif Input == '0':
        Input = "False"

请注意,python 具有本机布尔类型,包括值TrueFalse已经。您可以单独使用整数值Input作为条件。

于 2012-07-13T02:29:30.593 回答