"return"值的作用和方案的意外结果



首先,我想说我是一个编码新手。几天前我注册了一个Python课程;我以前从未有过编程的经验。

我有一个关于"返回"的问题。命令(或者不管它在术语中叫什么)。我知道它的教科书定义-它应该返回一个函数的值调用者-但我仍然不明白它真正做什么…

假设我有一个函数:

def your_salary(a, b)
salary = a * b #a is the number of hours worked, b is a rate per hour

现在我想使用这个函数,所以我在脚本中调用这个函数并计算工资,所以我写:

your_salary(40, 12) #40 hours worked for 12$ each

程序不做任何操作。

当我将内置打印函数添加到函数中时,我将得到正确的结果:

def your_salary(a, b)
salary = a * b
print(salary)
your_salary(40, 12)
=> 480

当我用"return"代替print函数时,我又没有得到任何东西。对我来说,它看起来像&;return&;不将值返回给调用者。当我调用函数时,它没有返回任何东西,程序没有向我显示函数your_salary中定义的计算结果。我想这就是为什么我不明白return是什么意思。将值返回给其调用者。有什么有用的解释吗?

使用print函数将一些变量值打印到控制台与从函数返回值不同。您的函数正在将salary变量打印到控制台,但your_salary返回None值。

def your_salary(a, b)
salary = a * b
return salary
result = your_salary(40, 12)
# I guess you are using an interactive shell or similar
result
=> 480 # Returned value

在交互式解释器中注意这个会话:

Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information.                       
>>> def your_salary(a,b):                                                                    
...     salary = a*b                                                                         
...     return salary                                                                        
...                                                                                          
>>> your_salary(9,200)                                                                       
1800                                                                                         
>>> print(your_salary(9,200))                                                                
1800                                                                                         
>>> i = your_salary(9,200)                                                                   
>>> i                                                                                        
1800                                                                                         
>>>                                                                                          

对于您在交互式解释器中输入的每一行,如果该行返回一个值,它将打印该值。print函数没有返回值,所以我们看到的只是print函数本身的副作用。这是运行脚本时不会发生的事情。

与以非交互方式运行这段代码比较:

C:tmp>cat x.py
def your_salary(a,b):
salary = a*b
return salary
your_salary(9,200)
print("Now!")
print(your_salary(9,200))
C:tmp>python x.py
Now!
1800
C:tmp>

注意,除非有特定的print函数,否则不会打印任何内容。

return做什么

在表达式中调用函数时:

def foo(val):
return val - 1
x = 5
x + foo(x) / 10

函数foo被执行,调用foo(x)被替换为foo的返回值:

x = 5
x + {{ result from calling foo(x) }} / 10

在上面的具体例子中,我们知道foo(x)x - 1组成,所以在这种情况下返回值应该是4:

x = 5
x + 4 / 10

return用于将函数内部的数据传递给函数的调用者。

你的代码有什么问题

你没有return任何东西

在Python中,如果从函数中省略return,则返回None。因此,your_salary函数有效地丢弃了它的结果,并且对your_salary的调用总是求值为None

def your_salary(hours, rate)
salary = hours * rate
your_salary(40, 12)

def your_salary(hours, rate)
salary = hours * rate
None

哦!

如何修复

使用return.

def your_salary(hours, rate)
salary = hours * rate
return salary
your_salary(40, 12)

def your_salary(hours, rate)
salary = hours * rate
return salary
480

print()呢?

正如前面提到的其他答案,print向控制台发送文本。

打印完全绕过程序.

用它与用户以文本形式交流信息。不要在程序中使用它来传输数据。