我已经在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
>>>
答案 0 :(得分:1)
以交互方式运行命令时,Python会打印您键入的表达式的结果。此外,它将打印您使用print
语句输出的所有内容。
但是,它不会打印您调用的每个函数的结果。只是最后一个。
答案 1 :(得分:0)
当您具有带有return语句的函数,但是未将return分配给实际变量时,它将打印返回的值
x = func_call(is_evern(5))
>>5 is odd
返回变量将阻止打印返回。或者,如果您无意使用变量,请不要返回该变量
答案 2 :(得分:0)
它没有打印结果,因为您没有告诉它这样做。 return
和print
是非常不同的命令。
也许您由于许多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