鱼C论坛

 找回密码
 立即注册
查看: 1635|回复: 8

[已解决]第19讲第4题的瞎想

[复制链接]
发表于 2021-3-10 15:27:11 | 显示全部楼层 |阅读模式

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

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

x
以下两个代码的区别是什么??为什么一个结果是None一个是Baby??

  1. def fun3(var):
  2.      var = ' 小甲鱼 '

  3. var = 'Baby'
  4. fun3(var)
  5. print(fun3(var))
复制代码

  1. def fun3(var):
  2.      var = ' 小甲鱼 '

  3. var = 'Baby'
  4. fun3(var)
  5. print(var)
复制代码


至于为什么说是瞎想,是因为还是不太懂为什么 fun3(var)没用,查询了一大堆相关的,结果越搞越乱
  1. var = ' Hi '

  2. def fun1():
  3.     global var
  4.     var = ' Baby '
  5.     return fun2(var)

  6. def fun2(var):
  7.     var += 'I love you'
  8.     fun3(var)        #对,就是它
  9.     return var

  10. def fun3(var):
  11.     var = ' 小甲鱼 '

  12. print(fun1())
复制代码
最佳答案
2021-3-10 15:36:08
本帖最后由 Daniel_Zhang 于 2021-3-10 15:40 编辑
  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '

  4. var = 'Baby'
  5. fun3(var)
  6. print(fun3(var))
复制代码


print 出来的是 None 是因为 fun3 函数没有返回值

先定义了 var 为 Baby,var 传入 fun3 进行修改

但是 fun3(var) 运行之后,print 的是 fun3(var) 而不是 var


--------------------------------

但是第二个代码,

  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '

  4. var = 'Baby'
  5. fun3(var)
  6. print(var)
复制代码


之所以是 Baby,因为 fun3 调用的时候,存在一个变量的作用域的问题

即,即使在 fun3 中对 var 进行了修改,也只是在 fun3 内部,var 才是 '小甲鱼'

如果需要使 fun3 中修改的 var 值 在后面的print 里面 打印出 '小甲鱼',可以如下修改:

  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '
  4.     return var

  5. var = 'Baby'
  6. var = fun3(var)
  7. print(var)
复制代码


或者

  1. # -*- coding: utf-8 -*-

  2. def fun3():
  3.     global var  # 引用 全局变量 var 并修改这个全局变量
  4.     var = ' 小甲鱼 '

  5. var = 'Baby'
  6. fun3()
  7. print(var)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-10 15:36:08 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Daniel_Zhang 于 2021-3-10 15:40 编辑
  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '

  4. var = 'Baby'
  5. fun3(var)
  6. print(fun3(var))
复制代码


print 出来的是 None 是因为 fun3 函数没有返回值

先定义了 var 为 Baby,var 传入 fun3 进行修改

但是 fun3(var) 运行之后,print 的是 fun3(var) 而不是 var


--------------------------------

但是第二个代码,

  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '

  4. var = 'Baby'
  5. fun3(var)
  6. print(var)
复制代码


之所以是 Baby,因为 fun3 调用的时候,存在一个变量的作用域的问题

即,即使在 fun3 中对 var 进行了修改,也只是在 fun3 内部,var 才是 '小甲鱼'

如果需要使 fun3 中修改的 var 值 在后面的print 里面 打印出 '小甲鱼',可以如下修改:

  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '
  4.     return var

  5. var = 'Baby'
  6. var = fun3(var)
  7. print(var)
复制代码


或者

  1. # -*- coding: utf-8 -*-

  2. def fun3():
  3.     global var  # 引用 全局变量 var 并修改这个全局变量
  4.     var = ' 小甲鱼 '

  5. var = 'Baby'
  6. fun3()
  7. print(var)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 15:44:38 | 显示全部楼层
Daniel_Zhang 发表于 2021-3-10 15:36
print 出来的是 None 是因为 fun3 函数没有返回值

先定义了 var 为 Baby,var 传入 fun3 进行修改

那我如果想把print(fun3(var))运行出一个结果要怎么改?、
  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '

  4. var = 'Baby'
  5. fun3(var)
  6. print(fun3(var))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 15:48:06 | 显示全部楼层
孤妓与酒 发表于 2021-3-10 15:44
那我如果想把print(fun3(var))运行出一个结果要怎么改?、

加上一个 return 不就好了?打印 fun3 的返回值

  1. # -*- coding: utf-8 -*-

  2. def fun3(var):
  3.     var = ' 小甲鱼 '
  4.     return var

  5. var = 'Baby'
  6. print(fun3(var))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 15:50:07 | 显示全部楼层
Daniel_Zhang 发表于 2021-3-10 15:48
加上一个 return 不就好了?打印 fun3 的返回值

哭,搞来搞去还是return搞不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 15:53:42 | 显示全部楼层
孤妓与酒 发表于 2021-3-10 15:50
哭,搞来搞去还是return搞不懂

哈哈哈,很正常

return 怎么说呢,个人感觉

就有点类似于,你调用了这个函数,如果你需要它当中生成的某一个结果,就 return 那个结果

用一个变量进行接收 return 的东西,或者直接 print 打印

具体的看你自己的需求
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-3-10 16:01:03 | 显示全部楼层
孤妓与酒 发表于 2021-3-10 15:50
哭,搞来搞去还是return搞不懂

  1. def fun3(var):
  2.     var = ' 小甲鱼 '#在函数fun3中定义了参数var,值为'小甲鱼'
  3.     return var#使用return把定义的值返回给函数fun3中的var参数,所以这一步def fun3(var) 等于def fun3(var='小甲鱼')
  4.     #fun3(var)中的var是形参, var = ' 小甲鱼 ' 这个var是实参,因为定义了值'小甲鱼'
  5. var = 'Baby'#这个是在外部定义的var参数
  6. print(fun3(var))#调用函数fun3,并打印参数var的值
复制代码

#不知说的准不准确, 有误的话请大佬指正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-3-10 16:07:06 | 显示全部楼层
本帖最后由 jackz007 于 2021-3-10 16:10 编辑
孤妓与酒 发表于 2021-3-10 15:50
哭,搞来搞去还是return搞不懂


        return 的作用主要有两个,其一,是结束函数调用,其二,是把函数的运算结果传递给函数调用者。
        高中应该学过三角函数 sin(30) = 1/2,tan(30) = sqrt(3) / 3,显然,在这里,sin() 、tan() 就是函数,那么,1/2、sqrt(3) / 3 就是函数值,这些函数就是通过 return 1/2,return sqrt(3) / 3 来传递函数值的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 16:09:59 | 显示全部楼层
TC_DHL 发表于 2021-3-10 16:01
#不知说的准不准确, 有误的话请大佬指正

我不是大佬,你问上面的老哥,那才是真正的大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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