我正在与局部和全局变量作斗争。
我在做这个:
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?
Input是一个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"
这两个都通过(如果用户输入任何非0的整数,则返回"True"
)。如果你真的想强迫用户不要输入类似"2"的内容,你可以这样做:
def some_func(inpt):
return {1:"True",0:"False"}[inpt]
但我不推荐那个。。。
基本上,您希望参数通过引用传递,但Python对基本数据类型的工作方式并非如此。这样做的蟒蛇方式如下:
def some_func(input):
if input == 1:
return "True"
elif input == 0:
return "False"
然后
raw_input = some_func(raw_input)
注意:您可以这样做:print bool(int(raw_input("Input 1 or 0: ")))
更像蟒蛇的做法如下:
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
然而,如果你确实想使用global
,你可以这样做,但这真的很难,而且这不是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
其他一些注意事项:尽量不要使用像散货箱这样的名称,例如Input
和RawInput
,因为这会使事情变得不清楚并混淆一切。
我应该怎么做才能使输入在作用
def SomeFunc(Input):
as_string = str(Input)
if Input == '1':
Input = "True"
elif Input == '0':
Input = "False"
请注意,python有一个本机布尔类型,已经包含了值True
和False
。您可以单独使用Input
的整数值作为条件。