鱼C论坛

 找回密码
 立即注册
查看: 1411|回复: 4

作用域与返回值

[复制链接]
发表于 2021-11-7 19:45:25 | 显示全部楼层 |阅读模式

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

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

x
var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var

def fun3(var):

    var = ' 小甲鱼 '

print(fun1())


这个是小甲鱼的作业,这样调用后输入的值为什么是 baby  I  love  you呢。fun1的时候好理解一点,声明了变量为全局  后赋值,后面的fun3 我试了一下,无论有没有返回值或者改成 var += '小甲鱼'输出的结果都是一样的,好像fun3存不存在都不影响似的,我也看了debug,还是没有看明白,能不能麻烦详细说一下运行的步骤和为什么fun3的赋值没有用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 19:55:48 | 显示全部楼层
fun3() 里面的 var 和外面的 var 不一样,里面的是局部变量(除非像 fun1() 一样声明全局,才能变成全局变量),外面的是全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 20:11:55 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-7 20:13 编辑
  1. var = ' Hi '

  2. def fun1():
  3.     global var            # 声明 var 为全局变量,在 fun1() 的范围内,修改的 var 都是全局变量
  4.     var = ' Baby '        # 全局变量 var 的内容已经从 ' Hi '变为 ' Baby '
  5.     return fun2(var)      # 返回以全局变量 var 为输入参数,对 fun2(var) 的调用结果

  6. def fun2(var):            # var 是形式参数,属于局部变量,凡是在 fun2() 范围内对 var 的修改均与同名全局变量无关
  7.     var += 'I love you'   # 局部变量 var = ' Baby ' + 'I love you'
  8.     fun3(var)             # 以局部变量 var 为输入参数,调用 fun3()
  9.     return var            # 返回局部变量 var 的内容,这时,var = ' Baby I love you',这也是 fun1() 的返回内容

  10. def fun3(var):            # var 是形式参数,属于局部变量,凡是在 fun3() 范围内对 var 的修改均与同名全局变量无关

  11.     var = ' 小甲鱼 '      # 局部变量 var = ' 小甲鱼 ',此赋值毫无意义,因为一退出函数,这个变量会直接被丢弃掉。

  12. print(fun1())             # fun1() 的返回值为 ' Baby I love you'
  13.                           # var 的值为 var = ' Baby '
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 22:03:29 | 显示全部楼层
傻眼貓咪 发表于 2021-11-7 19:55
fun3() 里面的 var 和外面的 var 不一样,里面的是局部变量(除非像 fun1() 一样声明全局,才能变成全局变 ...

fun3是局部变量没错,但 fun2 不也是局部变量么。为什么就改变了var的值可以直接加上去了呢? 我试了把fun3加上var += '小甲鱼'  或者加上 return 返回值都没有效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-8 17:45:55 | 显示全部楼层
lxlwxj 发表于 2021-11-7 22:03
fun3是局部变量没错,但 fun2 不也是局部变量么。为什么就改变了var的值可以直接加上去了呢? 我试了把fu ...

因为 fun2() 里的 var 是局部变量啊,没有改变 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. fun2(var) # 调用 var2() 函数

  13. print(var) # 打印全局变量 var,明显没有改变
复制代码
以上就是证明 fun2() 里面的 var 是局部变量,改变不会改变全局变量,而 fun3() 没有返回值,所以打印没有东西。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 09:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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