人zai旅途 发表于 2016-9-25 19:49:34

019课后题:看了答案不太理解,求解惑

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())
print(fun2(var))
print(fun3(var))

输出结果:
Baby I love you
Baby I love you
None

问题:
整个代码的逻辑都不太懂,
1、调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理解?
2、var = 'Hi'怎么理解,后边根本没有他什么事
3、global var   里面的global 是什么函数吗?为什么在IDLE里边变红?这里他出现的意义是什么?
4、为什么前两个输出结果是‘ Baby I love you’?
为什么第三个是‘None’?

曾曾曾曾 发表于 2016-10-9 09:49:33

var='hi',只是在给var赋值而已,为了考我们最后输出的是否有人会认为有Hi,
global这里是将var全局化,这样就可以在整个代码段都可以调用这个变量,建议你再看一下这节课。
输出两个baby我爱你是因为fun2的作用啊,return var,var=baby i love u.返回的不是fun3(var),返回的是变量值。
我能理解的大概是这么多。

曾曾曾曾 发表于 2016-10-9 09:54:28

第三个返回None,应该是因为printfun3(),fun3其实并没有打印值,但是python就算没有输出,也会有返回值,none

人zai旅途 发表于 2016-10-9 20:46:10

曾曾曾曾 发表于 2016-10-9 09:54
第三个返回None,应该是因为printfun3(),fun3其实并没有打印值,但是python就算没有输出,也会有返回值,no ...

谢谢回复!你理解的都对,谢谢!
现在看我之前自己提的问题,大部分都已经明白了,后边的课程会讲,课后题都是坑啊。。
有一点就是print(fun2(var))
var += 'I love you'      var = var +'I love you'
   因为var已经被定义为全局变量=' Baby ',所以,这时候, var =Baby I love you;
fun3(var)函数,定义了 var = '小甲鱼',但是最后return var的结果是Baby I love you,是否说明了fun3()函数内部定义的var仅仅是局部参数,不起作用,因为var在调用fun1()的时候已经定义过了??
但是var = ' Baby ',也是在fun1()内部定义的,只不过前面加了global var;
难道前面已经将var定义为全局变量以后,我在后面fun3()里面再定义var = '小甲鱼',不起作用吗?
我总感觉print(fun2(var))的结果应该是 小甲鱼I love you
这个地方还是有点模糊

曾曾曾曾 发表于 2016-10-10 16:57:59

人zai旅途 发表于 2016-10-9 20:46
谢谢回复!你理解的都对,谢谢!
现在看我之前自己提的问题,大部分都已经明白了,后边的课程会讲,课后 ...

是的,不能修改全局变量,只能使用全局变量。

人zai旅途 发表于 2016-11-19 21:21:53

人zai旅途 发表于 2016-10-9 20:46
谢谢回复!你理解的都对,谢谢!
现在看我之前自己提的问题,大部分都已经明白了,后边的课程会讲,课后 ...

@无符号整形 ,大神,再次复习到这个题目,还是对这个地方有点疑问:
1、1、调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理解?Python的实现机制是什么?
2、var = ' Baby ',是因为在fun1()定义的global var;
这里,已经将var定义为全局变量,为什么,我在后面fun3()里面再定义var = '小甲鱼',不起作用吗?
是需要在fun3()里面再次global var 是吗?
我总感觉print(fun1())、print(fun2(var))的结果应该是 小甲鱼I love you


大神,有空来解惑哈?

无符号整形 发表于 2016-11-20 07:55:37

人zai旅途 发表于 2016-11-19 21:21
@无符号整形 ,大神,再次复习到这个题目,还是对这个地方有点疑问:
1、1、调用fun1()的时候,fun2() ...

1.调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理解?Python的实现机制是什么?
答:当你调用fun2的时候,Python会自动找到fun2的声明部分然后执行
另外你在主部分调用时fun1时,fun2已经在前面了
2.的确不起作用。因为fun3中var='小甲鱼',实际上是定义了一个var局部变量,值是'小甲鱼'

人zai旅途 发表于 2016-11-20 17:07:43

无符号整形 发表于 2016-11-20 07:55
1.调用fun1()的时候,fun2()还没有定义,fun1()函数本身就是用还没有定义的fun2()来定义,这个地方怎么理 ...

谢谢大神回复。
global 只能在定义函数的时候,起一次作用,是吗?如果想让fun3()里面var = '小甲鱼',需要再次global var ,是吗?

漫步Roam 发表于 2016-11-23 23:44:36

全局变量的问题,我刚好遇到。。。就是让变量不会因为def结束而失效{:10_249:}
页: [1]
查看完整版本: 019课后题:看了答案不太理解,求解惑