我正在为局部变量和全局变量而苦苦挣扎。
我是这样做的:
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?
请您参考如下方法:
输入是一个int,它是一个不可变的对象。换句话说,您无法在任何地方更改它。但是,您可以将其分配给其他东西。关于 python 的棘手事情之一是了解到一切 只是一个引用。当您分配给某物时,您只需更改引用即可。把你的变量想象成进入盒子的字符串。当您分配给一个变量时,您将该字符串放在一个特定的框中。当您将该变量分配给其他内容时,您更改了字符串所在的框。当然,当你真正做加法时,你添加的是盒子的内容,而不是字符串(这有点令人困惑)。如果您习惯于使用 C 语言编程,那么一切都好像是一个自动取消引用的指针(除非您进行赋值)。
那么,怎么办?最简单的方法是从您的函数中返回值。
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"
这两个都通过(如果用户输入任何非 0 的整数,则返回 "True")。如果你真的想强制用户不要输入像“2”这样的东西,你可以这样做:
def some_func(inpt):
return {1:"True",0:"False"}[inpt]
但我不会推荐那个......
