鱼C论坛

 找回密码
 立即注册
查看: 1709|回复: 16

[已解决]return 这个函数的用法我始终云里雾里,没搞懂它功能是什么?

[复制链接]
发表于 2020-7-8 14:22:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def full_name(name1,name2,name3):
    if name3:
        names=name1 + name2 + name3
    else:
        names=name1 + name2
        
    title_name=names.title()

    return print(title_name)
   
full_name(name1="li",name2="xiao",name3="pang")

这个代码中return没有起到任何作用呀。
感谢大神指点迷津!
最佳答案
2020-7-8 14:33:23
本帖最后由 Twilight6 于 2020-7-8 14:41 编辑



当一个函数没有设置 return 时候,默认返回的是 None

举些例子:
def func():
    x = 100
    return print(x)

print(func())
运行结果:
100
None
这里 100 是函数里面的 print 打印的

而 None 就是因为 print 函数没有返回值 所以你在外部打印函数的时候会打印 None
def func():
    x = 100
    return x

func()   # 直接调用函数不会打印返回值结果,但是实际上有返回值,只是没有打印
print(func()) # 这里就可以将函数的返回值打印出来
运行结果:
100
这样打印就不会有 None  因为打印的是函数返回的结果,而函数返回了的值是 x 的值

而为什么要设置函数返回值呢?因为你需要一个函数运行后 返回出一个结果给你,所以需要设置函数的返回值,在看看这几个简单例子:
def func():
    x = 100
    return x

z = func()
temp = z*2
print(temp)
这边函数设置了返回值,所以 z 可以接收到函数 func 的返回值,此时 z  = func() 就可以视为 z = 100 了

而如果不设置返回值:
def func():
    x = 100

z = func()
print(z)
打印结果为 None ,说明 func() 返回了一个 None 给 z,这个时候你就不能用函数内的结果给其他代码进行使用了


需要注意的是在 IDLE 或者其它编译器的控制台会自动打印出除了 None 以外的返回值

而如果你脚本直接运行,则不会自动打印函数的返回值,需要你配合 print 函数将 函数调用的结果给打印除了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 14:27:03 | 显示全部楼层

print 函数没有返回值,所以你设置 return  print(xxx) 的时候返回的是 None

你要返回的是 title_name ,而不是 print ,print 是可以打印函数的返回值的,所以你在调用函数那边加上print 就好了
def full_name(name1, name2, name3):
    if name3:
        names = name1 + name2 + name3
    else:
        names = name1 + name2

    title_name = names.title()

    return title_name


print(full_name(name1="li", name2="xiao", name3="pang"))

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2020-7-8 14:33:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-8 14:41 编辑



当一个函数没有设置 return 时候,默认返回的是 None

举些例子:
def func():
    x = 100
    return print(x)

print(func())
运行结果:
100
None
这里 100 是函数里面的 print 打印的

而 None 就是因为 print 函数没有返回值 所以你在外部打印函数的时候会打印 None
def func():
    x = 100
    return x

func()   # 直接调用函数不会打印返回值结果,但是实际上有返回值,只是没有打印
print(func()) # 这里就可以将函数的返回值打印出来
运行结果:
100
这样打印就不会有 None  因为打印的是函数返回的结果,而函数返回了的值是 x 的值

而为什么要设置函数返回值呢?因为你需要一个函数运行后 返回出一个结果给你,所以需要设置函数的返回值,在看看这几个简单例子:
def func():
    x = 100
    return x

z = func()
temp = z*2
print(temp)
这边函数设置了返回值,所以 z 可以接收到函数 func 的返回值,此时 z  = func() 就可以视为 z = 100 了

而如果不设置返回值:
def func():
    x = 100

z = func()
print(z)
打印结果为 None ,说明 func() 返回了一个 None 给 z,这个时候你就不能用函数内的结果给其他代码进行使用了


需要注意的是在 IDLE 或者其它编译器的控制台会自动打印出除了 None 以外的返回值

而如果你脚本直接运行,则不会自动打印函数的返回值,需要你配合 print 函数将 函数调用的结果给打印除了

评分

参与人数 1鱼币 +1 收起 理由
小甲鱼的铁粉 + 1 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 14:43:35 | 显示全部楼层
Twilight6 发表于 2020-7-8 14:33
当一个函数没有设置 return 时候,默认返回的是 None

举些例子:

好长,最棒的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 14:44:34 | 显示全部楼层
Stubborn 发表于 2020-7-8 14:43
好长,最棒的!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 15:05:19 | 显示全部楼层
来学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 15:14:21 | 显示全部楼层
本帖最后由 heidern0612 于 2020-7-8 15:19 编辑

return的主要返回一个结果,可用于函数的再加工,或结果用于再加工。

给个简单的复合例子,你就明白用法了。
def msgbox(msg):
    if msg:
        return msg, "打印内容存在。"
    else:
        return None, False


msg = input("是否存在打印内容:")

Flag, msg = msgbox(msg)

while Flag:
    print(msg)
    break
else:
    print("打印内容为空")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 15:31:58 | 显示全部楼层
举个例子:
def func1():
    print("你好!")

def func2():
    return "你好!"

def func3():
    return print("你好!")

func1()
#上面这行代码会打印"你好!"
#因为在func1中调用了print函数

str1 = func1()
#上面这行代码会打印"你好!"
#但是str1变量中什么也没有
#因为func1没有返回值

str2 = func2()
#str2的值为"你好!"
#但是并没有打印出来
#因为我们没有让它打印

str3 = print("你好!")
#上面那行代码会打印"你好!"
#但是str3变量中什么也没有
#因为print函数没有返回值

str4 = func3()
#上面这行代码和str3的道理是一样的
#因为print函数没有返回值
#所以str4变量中什么也没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 14:55:08 | 显示全部楼层
heidern0612 发表于 2020-7-8 15:14
return的主要返回一个结果,可用于函数的再加工,或结果用于再加工。

给个简单的复合例子,你就明白用法 ...

我可能是段位太低了,您发这个我看的稀里糊涂的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 14:57:29 | 显示全部楼层

我应该是看书的过程中,错过了关键内容知识点,导致我看不懂你的讲解,十分感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 15:00:54 | 显示全部楼层
Twilight6 发表于 2020-7-8 14:27
print 函数没有返回值,所以你设置 return  print(xxx) 的时候返回的是 None

你要返回的是 title_nam ...

十分感谢,你的解答,我编写的那段代码无论加不加return 最终的打印结果都是lixiaopang,我始终没有搞懂return的用法和功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 15:04:18 | 显示全部楼层
Twilight6 发表于 2020-7-8 14:33
当一个函数没有设置 return 时候,默认返回的是 None

举些例子:

看了你的这个讲解,我彻底迷失,"返回值”是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 15:05:11 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-10 15:06 编辑
小甲鱼的嫖客 发表于 2020-7-10 15:00
十分感谢,你的解答,我编写的那段代码无论加不加return 最终的打印结果都是lixiaopang,我始终没有搞懂r ...





你如果是在 IDLE 中或者 其他编译器的控制台直接运行,会自动帮你打印返回值

但是你在编辑器直接运行脚本,如果没有 print 那么返回值将不会被打印出来

print 函数只是为了打印显示

而 return 是为了返回一个值

在举个例子哈,列表的 sort函数没有返回值,所以当你这样做的时候:
a = [3,2,1]
print(a.sort())
会返回:
None
但是列表的  pop 方法有返回值:
a = [3,2,1]
print(a.pop())
返回结果:
1
而设不设置返回值就是函数定义时候的问题了,这里 pop 需要你弹出元素 所以 有返回值

而  sort 是为了在原列表上进行排序,所以并没有返回新的列表,而是在原列表上直接进行改变

简单来说 返回值就是使用这个函数后返回的结果

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 15:14:06 | 显示全部楼层
小甲鱼的嫖客 发表于 2020-7-10 15:00
十分感谢,你的解答,我编写的那段代码无论加不加return 最终的打印结果都是lixiaopang,我始终没有搞懂r ...


你编写的代码无论怎么改 return 会打印结果是因为你给里面加上了 print

说实话,上面那么多大佬也都解释的很清楚了,你这样还不懂.....

那还是暂时跳过吧,先学习下后面的知识,说不定到时焕然大悟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 15:27:15 | 显示全部楼层
Twilight6 发表于 2020-7-8 14:33
当一个函数没有设置 return 时候,默认返回的是 None

举些例子:

我大概明白了,return是让公式返回的是值,如果不加return返回的是公式 没有值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 15:56:05 | 显示全部楼层
本帖最后由 heidern0612 于 2020-7-10 15:57 编辑
小甲鱼的嫖客 发表于 2020-7-10 15:04
看了你的这个讲解,我彻底迷失,"返回值”是什么意思?


这么说吧,你print打印输出到屏幕,是为了给读你程序的人用的,而return是给自己用的。

相当于,你写了个游戏,print是给玩你游戏的人用的,因为它直接输出到屏幕上。

而return是用于你,也就是程序员,再加工这个数据用的。

比如,一个英雄的血量,在喝了一瓶红药之后,上涨了50.

你需要:print给用户看“英雄使用了红药,血量上涨了50”.

而retuen的含义在于,英雄的血量在经过函数一系列运算后,return了一个值给程序员。

return出来这个值之后,也许return这个值之后,你还需要做一系列的加工,比如计算防御,计算英雄总体血量之类的。

然后程序员,也就是你,才决定print出来给用户看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-16 09:51:22 | 显示全部楼层
heidern0612 发表于 2020-7-10 15:56
这么说吧,你print打印输出到屏幕,是为了给读你程序的人用的,而return是给自己用的。

相当于,你 ...

感谢感谢,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表