鱼C论坛

 找回密码
 立即注册
查看: 2558|回复: 22

[已解决]定义函数时的问题

[复制链接]
发表于 2021-2-24 17:33:23 | 显示全部楼层 |阅读模式

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

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

x
刚开始学函数,我有下面几个问题:
0  定义函数时是不是如果不写return它还是有返回值none?
1  下面这两个函数有什么不同
  1. def fire():
  2.         pass
  3.         return '轰,发射成功!'
复制代码

以及
  1. def fire():
  2.         print('轰,发射成功!')
复制代码

我看他们返回的都是一样的,那到底有什么不同呢?
可不可以用print()代替return呢?
谢谢大家
最佳答案
2021-2-25 08:44:25
柿子饼同学 发表于 2021-2-24 21:58
比如说,我这定义一个函数:

然后我怎么写才能把n传输到别的地方呢?(比如想在另一个函数里使用n){: ...
  1. #定义函数num()
  2. def num():
  3.         n = 3
  4.         return n

  5. #定义函数num2()

  6. def num2(n):
  7.     return n**2

  8. n = num()

  9. m = num2(n)

  10. print(m)
复制代码


在这个例子中,我们把函数num()的返回值 赋值给n

也就是 n = num()

拿到了num()的结果3

再将 n 传入 给函数num2() 赋值给 m

也就是

m = num2(n)

m = num2(3)

m = 3**2

m = 9

或者直接将函数num()作为num2()的参数

  1. #定义函数num()
  2. def num():
  3.         n = 3
  4.         return n

  5. #定义函数num2()

  6. def num2(n):
  7.     return n**2

  8. m = num2(num())

  9. print(m)
复制代码


结果

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

使用道具 举报

发表于 2021-2-24 17:34:59 | 显示全部楼层
pass  是python里面的关键字,作用是占位符。
浅显的理解pass   就是没什么用的关键字,啥也不干。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 17:36:37 | 显示全部楼层
  1. def fire():
  2.         print('轰,发射成功!')
  3. print(fire())
复制代码


会输出:轰,发射成功!,None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-24 17:41:22 | 显示全部楼层
z5560636 发表于 2021-2-24 17:36
会输出:轰,发射成功!,None

可是正常使用是一样的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 17:48:40 | 显示全部楼层
柿子饼同学 发表于 2021-2-24 17:41
可是正常使用是一样的呀

并不是所有的返回值都是用来打印的
需要打印的时候,用return+调用的时候print 和 直接打印是一样的

更多的时候返回值另有他用,不能用print代替
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-24 17:53:06 | 显示全部楼层
昨非 发表于 2021-2-24 17:48
并不是所有的返回值都是用来打印的
需要打印的时候,用return+调用的时候print 和 直接打印是一样的

举个栗子好么,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-24 17:55:13 | 显示全部楼层
还是不知道return除了打印还能干什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 17:57:31 | 显示全部楼层
柿子饼同学 发表于 2021-2-24 17:53
举个栗子好么,谢谢

这两种情况效果是一样地
  1. def fun1():
  2.     return 'hello'

  3. def fun2():
  4.     print('hello')

  5. print(fun1())
  6. fun2()
复制代码

结果:
  1. hello
  2. hello
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 18:09:12 | 显示全部楼层
柿子饼同学 发表于 2021-2-24 17:41
可是正常使用是一样的呀
  1. def fire():
  2.         print('轰,发射成功!')
  3. a = fire()
  4. print(a)
复制代码

  1. def fire():
  2.         a = '轰,发射成功!'
  3. a = fire()
  4. print(a)
复制代码


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

使用道具 举报

发表于 2021-2-24 18:10:01 | 显示全部楼层
本帖最后由 曼查克 于 2021-2-24 18:13 编辑

关于return这个例子希望对你的理解有帮助
  1. >>> def a():
  2.         b = 1
  3.         return b

  4. >>> c = a()
  5. >>> c
  6. 1
  7. >>>
复制代码

print的作用只是在交互界面上打印出想打印的字符,而return是实实在在的传出了一个值,可以交给程式使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 18:19:26 | 显示全部楼层
  1. def fun1():
  2.     return '123'

  3. def fun2():
  4.     print('123')

  5. print('运行fun1()')
  6. fun1()
  7. print('运行fun2()')
  8. fun2()

  9. print('----------分割线--------------')

  10. print('赋值操作 fun1()')
  11. s1 = fun1()
  12. print('赋值操作 fun2()')
  13. s2 = fun2()

  14. print('----------分割线--------------')

  15. print(type(s1))
  16. print(type(s2))
复制代码



运行结果:
  1. 运行fun1()
  2. 运行fun2()
  3. 123
  4. ----------分割线--------------
  5. 赋值操作 fun1()
  6. 赋值操作 fun2()
  7. 123
  8. ----------分割线--------------
  9. <class 'str'>
  10. <class 'NoneType'>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 18:37:44 | 显示全部楼层
有返回值的可以被赋值,没有返回值就会返回None
  1. def fire():
  2.         pass
  3.         return '轰,发射成功!'

  4. def fire2():
  5.         print( '轰,发射成功!')
复制代码

  1. >>> a = fire()
  2. >>> b = fire2()
  3. 轰,发射成功!
  4. >>> print(a)
  5. 轰,发射成功!
  6. >>> print(b)
  7. None
  8. >>> type(a)
  9. <class 'str'>
  10. >>> type(b)
  11. <class 'NoneType'>
  12. >>>
复制代码

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

使用道具 举报

发表于 2021-2-24 18:42:52 | 显示全部楼层
怎么说呢,如果你需要在其他地方继续使用函数里面的某个变量,你就需要用 return 语句将该变量传递给需要使用的地方

如果你只是需要打印,就可以直接在函数里面进行打印,而不需要 return

所以,需不需要 return 完全看你要不要在其他地方使用函数里面的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-24 21:58:20 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-24 18:42
怎么说呢,如果你需要在其他地方继续使用函数里面的某个变量,你就需要用 return 语句将该变量传递给需要使 ...

比如说,我这定义一个函数:
  1. def num():
  2.         n = 3
  3.         return n
复制代码

然后我怎么写才能把n传输到别的地方呢?(比如想在另一个函数里使用n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-24 22:01:09 | 显示全部楼层
谢谢大家
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 23:31:54 | 显示全部楼层
  1. def num():
  2.     n = 3
  3.     return n


  4. def call_num(num):  # 调用并打印 n 的值
  5.     print(num)


  6. get_num = num()  # 在此处通过调用 num() 传入 n 的值并赋值给 get_num 并打印
  7. print(get_num)

  8. # 也可以直接打印 num() 传递的值, 即打印 n 的值
  9. print(num())

  10. #   或者在其他的函数中调用 n 的值
  11. call_num(num())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 08:44:25 | 显示全部楼层    本楼为最佳答案   
柿子饼同学 发表于 2021-2-24 21:58
比如说,我这定义一个函数:

然后我怎么写才能把n传输到别的地方呢?(比如想在另一个函数里使用n){: ...
  1. #定义函数num()
  2. def num():
  3.         n = 3
  4.         return n

  5. #定义函数num2()

  6. def num2(n):
  7.     return n**2

  8. n = num()

  9. m = num2(n)

  10. print(m)
复制代码


在这个例子中,我们把函数num()的返回值 赋值给n

也就是 n = num()

拿到了num()的结果3

再将 n 传入 给函数num2() 赋值给 m

也就是

m = num2(n)

m = num2(3)

m = 3**2

m = 9

或者直接将函数num()作为num2()的参数

  1. #定义函数num()
  2. def num():
  3.         n = 3
  4.         return n

  5. #定义函数num2()

  6. def num2(n):
  7.     return n**2

  8. m = num2(num())

  9. print(m)
复制代码


结果

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

使用道具 举报

发表于 2021-2-25 09:41:32 | 显示全部楼层
代码性质上有些区别
(1):
  1. def fire():
  2.     pass#占位符,可以删掉
  3.     return '轰,发射成功!'
  4. print(fire)#用print语句打印返回的值
复制代码

(2):
  1. def fire():
  2.     print('轰,发射成功!')
  3. fire()#调用函数后打印出的结果
复制代码

如果打印出代码(2)fire函数的值是会产生以下的结果
  1. >>> def fire():
  2.         print('轰,发射成功!')

  3. >>> print(fire())
  4. 轰,发射成功!
  5. None
复制代码

以上是代码的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 10:12:00 | 显示全部楼层
柿子饼同学 发表于 2021-2-24 17:55
还是不知道return除了打印还能干什么

return 可以返回一个值,也可以实现闭包的作用
input函数的返回值应该就是通过return函数实现的
以下是一个return的例子
  1. def A(a, b):
  2.      return a + b

  3. def B(c):
  4.      _ = A(6,9)
  5.      return _ * c

  6. print(B(4))
复制代码

print无法实现值的传递效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 11:46:10 | 显示全部楼层
逃兵 发表于 2021-2-25 08:44
在这个例子中,我们把函数num()的返回值 赋值给n

也就是 n = num()

在对函数的赋值操作时,到底是先赋值还是先把函数结果算出来再赋值呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 10:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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