鱼C论坛

 找回密码
 立即注册
查看: 635|回复: 2

[课后作业] 第018讲关于作用域的小问题

[复制链接]
发表于 2019-2-1 18:06:48 | 显示全部楼层 |阅读模式

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

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

x
python教程[课后作业] 第018讲有如下的一个问题:

目测以下程序会打印什么内容?

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())


我给出的答案是:小甲鱼
分析思路是:
1、其实上面这个程序输出的是第二个函数fun2(var)最终的var。
2、经过 global var,var = ' Baby ' 语句后,var的值为‘baby’
3、经过var += 'I love you' 语句后,var的值为‘baby i love you’.
4、接着fun3(var)这个语句又将var的值从‘baby i love you’.变为‘小甲鱼’
5、因此,fun2最终输出的var是‘小甲鱼’
6、因此程序最终print的东西是‘小甲鱼’
-------------------------
然鹅,正确的答案是‘baby i love you’.
-------------------------
我的问题是,在我分析的第四步中,难道var并没有被fun3改变么?最终为什么fun3对var的赋值没有生效?
谢谢各位大神解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-1 18:15:15 | 显示全部楼层
不要被几个英文迷惑了,函数传值,就是传进,或return 出

改一下不就一目了然了
  1. var = ' Hi '

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

  6. def fun2(a):
  7.     a += 'I love you'
  8.     fun3(a)
  9.     return a

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

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

使用道具 举报

发表于 2019-2-1 22:16:33 | 显示全部楼层
本帖最后由 梦星 于 2019-2-1 22:17 编辑

分析思路是:
1、其实上面这个程序输出的是第二个函数fun2(var)最终的var。
2、经过 global var,var = ' Baby ' 语句后,var的值为‘baby’
3、经过var += 'I love you' 语句后,var的值为‘baby i love you’.
4、接着fun3(var)这个语句是局部变量
5、因此,fun2最终输出的var是‘baby’
6、因此程序最终print的东西是‘baby i love you’

说白了,fun3(var)这个语句就是没用的,因为你打印的是fun1()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-13 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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