首先,我想说我是一个编码新手。几天前我注册了一个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
向控制台发送文本。
打印完全绕过程序.
用它与用户以文本形式交流信息。不要在程序中使用它来传输数据。