更改函数语句中给定的变量
Changing the variable given in a function statement
到目前为止我的代码是:
def errorCheckInt(n):
try:
n = int(n)
checkValue1 = True
except:
checkValue1 = False
它应该采用变量输入(即 n),并尽可能将其更改为整数。如果是字符串,它将尝试获取不同的输入。
然而,它并没有起作用,我认为这是因为你不能改变代码中的变量。
这个可能不是很清楚,所以我举个例子:
testingNum = "2"
# def errorCheckInt here
errorCheckInt(testingNum)
# Should change testingNum to integer value 2, not string "2"
后面会跟一个 while 语句,检查它是否成功(checkValue1 是 True 还是 False),然后可能要求新的输入并检查错误(取决于用户提供的输入)。
如果这还不是很清楚,请评论一个问题,我也许可以告诉你我的想法。
提前致谢!
当 errorCheckInt
为 运行 时,变量 n
绑定到与 testingNum
相同的值。但是,对于 n =
,您更改 binding,而不是 value,因此 n
指向与 testingNum
。您需要的是传递一个可变类型并更改其中的绑定:
def errorCheckInt(n):
try:
n[0] = int(n[0])
checkValue1 = True
except:
checkValue1 = False
testingNum = [ "2" ]
errorCheckInt(testingNum)
# testingNum is now 2 and type(testingNum) is int
我不清楚你说 “你不能更改代码中的变量”是什么意思。老实说,我要在这里迈出一大步(因为我不知道你在 Python 理解方面的位置)。
有两个概念我觉得您可能遇到了麻烦。 (1) 是对象可变性的概念,(2) 如何在 [=78 的范围内外使用和定义变量=].
当您像这样重新分配一个值时:
n = int(n)
你实际上并没有修改外部变量持有的值(testingNum
)。这是因为 Python 中的变量只是对对象的引用。这意味着您的变量将始终指向同一个对象,除非它被明确地重新分配。当您处理 可变性 的概念时,这会让人感到困惑。例如,列表、字典和 类 是可变对象。如果你这样做:
t = []
n = t
然后做:
n.extend([1,2,3,4])
您会看到 n
和 t
现在看起来像:
[1,2,3,4]
当你终于明白发生了什么事时,这并不是真正神秘的行为。整数 4
和 [1,2,3,4]
是不同的对象。唯一的区别是 [1,2,3,4]
在分配给 t
时也是与初始 []
相同的对象。另一方面,当您将整数或字符串重新分配给变量时,您只是更改了变量指向 的对象。就这些了。
这如何适用于您的示例?
本质上,您所缺少的只是一个 return
语句:
def errorCheckInt(n):
try:
n = int(n)
checkValue1 = True
except:
checkValue1 = False
return n
testingNum = "2"
newNum = errorCheckInt(testingNum) # You can catch it here with newNum.
了解 return 语句的用法是等同的。当您在函数内分配对变量的引用时,一旦退出函数,该变量就会超出范围;换句话说,如果您之后再尝试调用它,就会出错。为了避免这种情况,您需要在 outer 范围内的变量中捕获函数的结果。这使您可以继续使用刚刚在函数内计算的数据。
备注
完成您所要求的更好方法是使用 isinstance
。例如,
print isinstance(4, int)
# True
print isinstance('4', int)
# False
这将自动检查该值是否是 int
类型的实例。 更清晰。
进一步说明
可变性的一个有趣事实是,当您在函数内部传递对可变对象的引用时,使用 [].append(4)
修改对象将意味着指向该对象的任何变量(即使是来自外部)获得相同的 update 如果你愿意的话。因此,在某些情况下,使用 return 语句不是必需的,但明确说明有时是值得的。
到目前为止我的代码是:
def errorCheckInt(n):
try:
n = int(n)
checkValue1 = True
except:
checkValue1 = False
它应该采用变量输入(即 n),并尽可能将其更改为整数。如果是字符串,它将尝试获取不同的输入。
然而,它并没有起作用,我认为这是因为你不能改变代码中的变量。
这个可能不是很清楚,所以我举个例子:
testingNum = "2"
# def errorCheckInt here
errorCheckInt(testingNum)
# Should change testingNum to integer value 2, not string "2"
后面会跟一个 while 语句,检查它是否成功(checkValue1 是 True 还是 False),然后可能要求新的输入并检查错误(取决于用户提供的输入)。
如果这还不是很清楚,请评论一个问题,我也许可以告诉你我的想法。
提前致谢!
当 errorCheckInt
为 运行 时,变量 n
绑定到与 testingNum
相同的值。但是,对于 n =
,您更改 binding,而不是 value,因此 n
指向与 testingNum
。您需要的是传递一个可变类型并更改其中的绑定:
def errorCheckInt(n):
try:
n[0] = int(n[0])
checkValue1 = True
except:
checkValue1 = False
testingNum = [ "2" ]
errorCheckInt(testingNum)
# testingNum is now 2 and type(testingNum) is int
我不清楚你说 “你不能更改代码中的变量”是什么意思。老实说,我要在这里迈出一大步(因为我不知道你在 Python 理解方面的位置)。
有两个概念我觉得您可能遇到了麻烦。 (1) 是对象可变性的概念,(2) 如何在 [=78 的范围内外使用和定义变量=].
当您像这样重新分配一个值时:
n = int(n)
你实际上并没有修改外部变量持有的值(testingNum
)。这是因为 Python 中的变量只是对对象的引用。这意味着您的变量将始终指向同一个对象,除非它被明确地重新分配。当您处理 可变性 的概念时,这会让人感到困惑。例如,列表、字典和 类 是可变对象。如果你这样做:
t = []
n = t
然后做:
n.extend([1,2,3,4])
您会看到 n
和 t
现在看起来像:
[1,2,3,4]
当你终于明白发生了什么事时,这并不是真正神秘的行为。整数 4
和 [1,2,3,4]
是不同的对象。唯一的区别是 [1,2,3,4]
在分配给 t
时也是与初始 []
相同的对象。另一方面,当您将整数或字符串重新分配给变量时,您只是更改了变量指向 的对象。就这些了。
这如何适用于您的示例?
本质上,您所缺少的只是一个 return
语句:
def errorCheckInt(n):
try:
n = int(n)
checkValue1 = True
except:
checkValue1 = False
return n
testingNum = "2"
newNum = errorCheckInt(testingNum) # You can catch it here with newNum.
了解 return 语句的用法是等同的。当您在函数内分配对变量的引用时,一旦退出函数,该变量就会超出范围;换句话说,如果您之后再尝试调用它,就会出错。为了避免这种情况,您需要在 outer 范围内的变量中捕获函数的结果。这使您可以继续使用刚刚在函数内计算的数据。
备注
完成您所要求的更好方法是使用 isinstance
。例如,
print isinstance(4, int)
# True
print isinstance('4', int)
# False
这将自动检查该值是否是 int
类型的实例。 更清晰。
进一步说明
可变性的一个有趣事实是,当您在函数内部传递对可变对象的引用时,使用 [].append(4)
修改对象将意味着指向该对象的任何变量(即使是来自外部)获得相同的 update 如果你愿意的话。因此,在某些情况下,使用 return 语句不是必需的,但明确说明有时是值得的。