Python函数变量:局部和全局



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

我在做这个:

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

其他一些注意事项:尽量不要使用像散货箱这样的名称,例如InputRawInput,因为这会使事情变得不清楚并混淆一切。

我应该怎么做才能使输入在作用

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

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

相关内容

  • 没有找到相关文章

最新更新