为什么返回不打印内部函数结果?

时间:2019-08-23 19:10:19

标签: python

我已经在jupyter和python终端上进行了测试,当代码返回时,即使结果为true或false,它也会输出结果,但是为什么它不打印内部函数结果呢? python是否总是打印返回结果?

def is_evern(i):
  if i%2==0: 
    print(i,'is even')
    return(True)
  print(i,'is odd')
  return(False)



def func_call(i):
  return(True)

命令输出:

>>> is_evern(5)
5 is odd
False
>>> func_call(is_evern(5))
5 is odd
True
>>>       

5 个答案:

答案 0 :(得分:1)

以交互方式运行命令时,Python会打印您键入的表达式的结果。此外,它将打印您使用print语句输出的所有内容。

但是,它不会打印您调用的每个函数的结果。只是最后一个。

答案 1 :(得分:0)

当您具有带有return语句的函数,但是未将return分配给实际变量时,它将打印返回的值

x = func_call(is_evern(5))
>>5 is odd

返回变量将阻止打印返回。或者,如果您无意使用变量,请不要返回该变量

答案 2 :(得分:0)

它没有打印结果,因为您没有告诉它这样做。 returnprint是非常不同的命令。

也许您由于许多IDE(交互开发环境)中固有的表达式评估而感到困惑。 Python的交互模式是其中之一:如果给定的是 expression 而不是 command ,则解释器将打印表达式的值;这是IDE的功能。

例如,如果输入2+3,则IDE将显示5。如果输入a = 2+3,则IDE将不打印任何内容(但5被分配给a)。

现在,让我们看一下您的IDE显示屏:

>>> is_evern(5)
5 is odd              this comes from your print command
False                 this is the result of the expression "is_evern(5)"
>>> func_call(is_evern(5))
5 is odd              this comes from your print command
True                  this is the result of the expression

在第二条语句中,您不会得到False,因为这不是整个表达式的结果。相反,该值已分配给i中的func_call,并立即使用。

答案 3 :(得分:0)

Python具有三种类型的作用域: 1.内置 2.全球 3.封闭 4.本地

使用终端时,您位于“全局”范围内,并且只能访问要调用的第一个函数。当您键入函数的名称并调用它时,终端(python命令行)仅看到立即返回,并打印它,但无法访问内部返回,因此需要将其传递给更高的范围对python可见。

答案 4 :(得分:0)

“发生了什么”逐步进行:

var gpas = []; var gp; var total = 0; let count = 0; var max = 0; var min = 0; var out = ""; while (i != "XXX") { var i = prompt("Enter a gpa or XXX to Stop"); if (i != "XXX") { gpas.push(i); } } for (var i = 0; i < gpas.length; i++) { out += gpas[i]; out += "<br/>"; } count++; total += gpas[i]; var avg = total / count; out += avg; document.getElementById('output').innerHTML += out + "<br/>";
5传递给函数
在功能上:
评估为iseven(5),即5%2 => 1
已评估的i%2 => 1==0(跳过False块)
if输出print(i, 'is odd')
返回5 is odd(顺便说一句,return不需要括号,只需空格:False
return False现在代替了False
所以iseven(5)等于写>>> iseven(5)
构建python IDLE(和其他IDE),以便在>>> False之后还有>>>(内置对象)之外的其他东西,它会被打印出来

通过键入进行检查

None

主要问题
>>> False False # expected output >>> None >>> # no output
func_call(is_evern(5))的评估与第1段中的相同,并且返回False(注意:评估需要打印iseven(5)
并再次用5 is odd代替False
因此:iseven(5)等于func_call(is_evern(5))
现在func_call(False)被传递给False
函数内部:
func_call的值为i
False已返回
True代替>>> True
并出于第一行第一段中所述的原因,打印了True