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