鱼C论坛

 找回密码
 立即注册
查看: 1560|回复: 5

[已解决]python 第19讲

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

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

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

x
把代码改成如下为什么还是一样的结果,删去了global,最后一段加了return var
var = ' Hi '
def fun1():
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return var
def fun3(var):
    var = ' 小甲鱼 '
    return var
print(fun1())

原代码:
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())
最佳答案
2021-1-12 18:56:58
global函数是将变量设置为全局变量,使其能在函数里面访问并使用;
但是在这段代码里(就是你所指的原代码)
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())
他将var变量设置为全局变量后,fun1()函数里面又将var重新赋值了,赋值内容为' Baby '
然后接着往下走,return fun2(var),这里将var的值,也就是'Baby'传到了fun2()函数里面
然后执行var += 'I love you',到这里的时候var的值为' Baby I love you',然后fun3(var),
又将'Baby I love you'传到了fun3()函数里面,但是因为fun3()函数没有进行return,所以
可以不用理他,所以最后返回的值为' Baby I love you'
但是你修改的代码,在fun3()函数里面加上了return var,这里因为是作用域的原因,你
在fun3()函数里面加一句print(var),你可以发现他输出的结果是'小甲鱼'的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-12 17:42:59 | 显示全部楼层
你删的与补的对 fun1() 根本就没有什么影响,那结果肯定还是一样啊。
控制变量法,也要 控制 与 结果 相关的变量 才行啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 18:11:59 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-12 18:14 编辑

        fun3() 的返回值毫无意义,因为,它无法影响 fun2() 的返回结果,只有让 fun3() 的返回结果影响了 fun2() 的返回结果(变量 var),fun3() 的 return var 才会具有意义,同时,print(fun1()) 也才会真正见到效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 18:56:58 | 显示全部楼层    本楼为最佳答案   
global函数是将变量设置为全局变量,使其能在函数里面访问并使用;
但是在这段代码里(就是你所指的原代码)
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())
他将var变量设置为全局变量后,fun1()函数里面又将var重新赋值了,赋值内容为' Baby '
然后接着往下走,return fun2(var),这里将var的值,也就是'Baby'传到了fun2()函数里面
然后执行var += 'I love you',到这里的时候var的值为' Baby I love you',然后fun3(var),
又将'Baby I love you'传到了fun3()函数里面,但是因为fun3()函数没有进行return,所以
可以不用理他,所以最后返回的值为' Baby I love you'
但是你修改的代码,在fun3()函数里面加上了return var,这里因为是作用域的原因,你
在fun3()函数里面加一句print(var),你可以发现他输出的结果是'小甲鱼'的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 19:02:26 | 显示全部楼层
我后面又想了下,好像是因为在fun2()函数那里已经return var了,所以结果是' Baby I love you',如果你将
fun2()函数中的return var修改为return fun3(var),那么返回的结果就是'小甲鱼'了,4楼那最后两段好像有点问题 ,看看就好,不建议参考
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 19:10:56 | 显示全部楼层
var = ' Hi '
def fun1():
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    a = fun3(var)
    print(a)
    return var
def fun3(var):
    var = ' 小甲鱼 '
    return var
print(fun1())
我这边稍微改了下代码,将fun2()函数中的fun3(var)返回的值,赋值给了a,然后将他打印出来,
其实fun3(var)的值,是返回到了变量a中,他并没有将值返回到fun1()函数。
不好意思一下占了几楼,因为想法都是断断续续来的,所以回帖也断断续续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 18:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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