Python函数变量:局部和全局

Python函数变量:局部和全局,python,function,global-variables,python-2.7,local-variables,Python,Function,Global Variables,Python 2.7,Local Variables,我正在与局部和全局变量作斗争 我是这样做的: 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

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

我是这样做的:

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))

这两个都通过(如果用户输入的任何整数不是0,则返回
“True”
)。如果您确实想强制用户不要输入类似“2”的内容,您可以执行以下操作:

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

但是我不建议一个…

输入是一个不可变对象的
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))

这两个都通过(如果用户输入的任何整数不是0,则返回
“True”
)。如果您确实想强制用户不要输入类似“2”的内容,您可以执行以下操作:

def some_func(inpt):
    return {1:"True",0:"False"}[inpt]
但我不推荐那个

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

请注意,python有一个本机布尔类型,包括值
True
False
。您可以使用
Input
的整数值本身作为条件

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


请注意,python有一个本机布尔类型,包括值
True
False
。您可以使用
Input
的整数值本身作为条件。

基本上您希望参数通过引用传递,但Python对基本数据类型不是这样工作的。python的方法如下:

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

raw_input = some_func(raw_input)

基本上,您希望参数通过引用传递,但Python对基本数据类型不是这样工作的。python的方法如下:

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

raw_input = some_func(raw_input)

注意:您可以这样做:
打印bool(int(原始输入(“输入1或0”))

更具Python风格的做法如下:

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
s,您可以这样做,但这确实是一种很有技巧的做法,并且不是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
,因为这会使事情变得不清楚,并且会把事情弄混

注意:您可以这样做:
打印bool(int(原始输入(“输入1或0”))

更具Python风格的做法如下:

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
s,您可以这样做,但这确实是一种很有技巧的做法,并且不是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
,因为这会使事情变得不清楚,并且会把事情弄混

对于变量名/函数,使用带下划线的
lowercase\u
最好的方法是不产生任何副作用,并从函数btwi返回值。如果需要,可以将其减少为
Input=str(bool(原始输入(“输入1或0:”))
)。字符串
'0'
转换为bool
False
,后者转换为字符串
“False”
@xhainingx--Nope
bool('0')
True
,因为
'0'
是非空字符串。@mgilson woops,对不起,应该是
Input=str(bool(int(原始输入(“输入1或0”))
对变量名/函数使用带下划线的小写字母
最好的方法是不产生任何副作用,并从函数btwi返回值。如果需要,可以将其减少为
Input=str(bool(原始输入(“Input 1或0:”))
)。字符串
'0'
转换为bool
False
,后者转换为字符串
“False”
@xhainingx--Nope
bool('0')
True
,因为
'0'
是非空字符串。@mgilson-woops,对不起,应该是
Input=str(bool(int)(原始输入(“Input 1或0:))))
Haters,请对被否决的答案添加建设性批评。Haters,请对