我测试了以下代码:
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)
答案 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之间的值,而这并不总是我们想要做的(例如您的示例或我的示例)我们要返回一个字符串)
请让我知道我的答案是否还不够清楚,感谢您的评论。