Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python函数中返回局部变量时出现问题_Python_Function - Fatal编程技术网

在Python函数中返回局部变量时出现问题

在Python函数中返回局部变量时出现问题,python,function,Python,Function,我是一个初学者,我相信这是一个简单的错误。在我不小心粘贴而不是复制正确的代码之前,我让程序正确运行。如果给定奇数,则代码应输出True,如果给定偶数,则代码应输出False。以下是我已修改的内容,但仍然无法在全局范围内将isOdd值更改为False: def odd(x): while x%2==0: isOdd=False return isOdd isOdd=True x=42 odd(x) print(isOdd) 在主程序中,忽略了返回值。更改代码以将其分配到所需的

我是一个初学者,我相信这是一个简单的错误。在我不小心粘贴而不是复制正确的代码之前,我让程序正确运行。如果给定奇数,则代码应输出True,如果给定偶数,则代码应输出False。以下是我已修改的内容,但仍然无法在全局范围内将isOdd值更改为False:

def odd(x):
  while x%2==0:
    isOdd=False
    return isOdd
isOdd=True
x=42
odd(x)
print(isOdd)

在主程序中,忽略了返回值。更改代码以将其分配到所需的位置。要学习的一件重要事情是名称空间和变量范围。您的程序有两个名为isOdd的变量:主程序和函数中各一个。Python不会以任何方式链接它们

# isOdd=True  This line does *not* assign a value inside the function
x=42
isOdd = odd(x)
print(isOdd)

它可以按以下方式固定:

def奇数(x):
全局isOdd#使用“全局”关键字
当x%2==0时:
isOdd=False
返回isOdd
但我不建议使用全局变量声明

这使得代码片段和上下文难以读取

在您的情况下(要知道是否是奇数),只需使用返回

is_odd = odd(x)

在这种情况下,if-else更适合使用。就像下面的代码(在C++中),我想不需要使用循环

void number_check(int var1){
if(var1%2==0){
    cout << "Variable Is Even!" << endl;
}else{
    cout << "Variable is Odd!" << endl;
}
void number\u检查(int var1){
if(var1%2==0){

cout您的函数可以简化为一个只有几个字符的值。在大多数语言中,0的计算结果为false,包括Python。任何其他数字的计算结果都为true。您只需要将值转换为布尔值并返回它

def odd(x):
  return bool(x % 2)

x = 42
result = odd(x)
print(result)
注 您的问题包括一些与Python中的作用域相关的错误。我建议您参考变量作用域文档,提高对何时使用while循环和if语句的理解

工具书类
Python变量作用域:

变量不是那样工作的-你不能返回或传递变量,
返回一些变量
并不意味着调用者现在有一个
一些变量
或者对调用者已有的
一些变量
做任何事情。这里检查一下。不需要在这里使用全局变量…合理化这里的global通常会证明global的过度使用是合理的。@pygeek我同意,这是过度使用。这只是解决方案之一。但这是一个简单的程序,如果数字是奇数,它会打印True或False。对不起,有人告诉我不要使用if语句,而是使用%Operator,但如果我们在循环中运行它,我猜它不会结束。因为var1%2==0;将始终是如果是偶数,则为true