返回打印语句仍显示该值

时间:2018-11-05 04:40:17

标签: python

我测试了以下代码:

In [266]: def foo(): 
     ...:     print("yes") 
     ...:                                                                                                         

In [267]: def bar(): 
     ...:     return foo() 
     ...:                                                                                                         

In [268]: bar()                                                                                                   
yes

In [269]: x = bar()                                                                                               
yes

我对结果感到非常困惑,它的作用就像

In [274]: def foo(): 
     ...:     return print("yes %.1f" %12.333) 
     ...:      
     ...:                                                                                                         

In [275]: foo()                                                                                                   
yes 12.3

我应该如何理解?很像shell脚本shell的命令替换echo $(ls)

2 个答案:

答案 0 :(得分:2)

在方法中,您可以执行一些操作,不返回任何内容,而是直接显示结果(例如打印或返回结果),并让另一部分代码加以利用。

所以,我想解释一下您的代码在做什么:

In [266]: def foo(): 
     ...:     print("yes") # you are printing 'yes'
     ...:                                                                                                         

In [267]: def bar(): 
     ...:     return foo()  #you are returning a foo method
     ...:                                                                                                         

In [268]: bar()    # you are not directly calling foo()                                                                                            
yes

In [269]: x = bar()  # you are not directly calling foo() and this is equivalent to x = print('yes')                                                                                             
yes

一个简单的例子:

>>> def foo():
...     print('Yes')
...
>>> def boo():
...     return foo()
...
>>> boo()
Yes
>>> x = boo() 
Yes
>>> x = print('Yes')
Yes
>>> x = 'Yes' # it is not printed
>>>

因此,基本上,除非在print()中使用shell,否则它不会回显任何变量。 但是,如果您的方法返回一个值,它将被打印。基本上在外壳返回中也将起到打印作用。

>>> def noo():
...     return 'Yes'
...
>>> noo()
'Yes'
>>>

答案 1 :(得分:0)

根据您的代码和解释,我认为您误解了shell脚本

在shell中返回一个字符串(例如),您可以这样做

#!/bin/sh
foo()
{
  echo "my_string"
}

A=$(foo)
echo $A

$ A的值将为“ my_string”

要在python中做同样的事情

def foo():
    return "my_string"

a = foo()
print(a)

我们在shell脚本中使用echo技巧的原因是由于这样的事实,shell中的return只能返回0-255之间的值,而这并不总是我们想要做的(例如您的示例或我的示例)我们要返回一个字符串)

请让我知道我的答案是否还不够清楚,感谢您的评论。