鱼C论坛

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

[已解决]19讲,函数:我的地盘我做主。

[复制链接]
发表于 2017-4-7 23:02:43 | 显示全部楼层 |阅读模式

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

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

x
4. 目测以下程序会打印什么内容?
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

没法理解fun(var)  具体理解句子过程:
QQ图片20170407230056.png
最佳答案
2017-4-8 10:59:31
本帖最后由 文质彬彬胡汉三 于 2017-4-8 11:05 编辑

哈哈哈 ,自然水,我胡漢三來啦 。
首先定義了var = 'Hi',然後在fun1()中,聲明全局變量var,緊接著var = 'baby',下一步返回了fun2()的值,fun2(var)這個函數中,函數的形勢參數var的實際參數就是fun1()中的 var(2) = var(1)+'I love you ',即:
var = 'baby I love you ',
下一步,fun3(var)這個函數中,沒有任何返囘值,因此fun2()的實際參數是不受影響的,fun2(var)返回的是var(2)的值,即屏幕打印baby I love you.
如果你修改fun2(var),返回的是fun3(var),代碼如下:
var = ' Hi '
def fun1():
    global var
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return fun3(var)
def fun3(var):
    var = ' 小甲鱼 '
print(fun1())
此時屏幕打印的結果是None,因爲fun3()并無有返囘值,若修改fun3(var),代碼如下:
var = ' Hi '
def fun1():
    global var
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return fun3(var)
def fun3(var):
    var = ' 小甲鱼 '
    return var
print(fun1())
此時屏幕打印值就是小甲魚

還有一點忘了說,var是全局變量,但是在fun1()中聲明調用了最初定義的var后,下一步,var = 'baby'已經修改全局變量var的值,可以嘗試一下使用
print(var),這個時候屏幕打印就是baby


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-7 23:40:14 | 显示全部楼层
因为return fun2(var)时调用var的值
而在fun2中var是临时变量,但是它的只是'Baby '
这一句修改了var的值var += 'I love you'变成'Baby I love you'
fun3没有修改fun2中var的值,然后返回fun2中的var最后再返回给print就是'Baby I love you'
这个时候全局变量还是'Baby'没有改变,print(fun1())只是输出一个返回值而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 00:01:39 | 显示全部楼层
本帖最后由 自然水 于 2017-4-8 00:03 编辑
lumber2388779 发表于 2017-4-7 23:40
因为return fun2(var)时调用var的值
而在fun2中var是临时变量,但是它的只是'Baby '
这一句修改了var的 ...


意思就是:

fun2(var):

函数体内的var调用了 “全局的var ”
然后拼接了 'i love you ' 接着赋值到 局部的var 中  
即,在fun2中的局部变量var = ‘Baby i love you’?

后面return var ,这个var 是局部的 Baby i love you’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 00:19:38 | 显示全部楼层
自然水 发表于 2017-4-8 00:01
意思就是:

fun2(var):

对的 你可以尝试把局部变量和全局变量都打印出来看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 10:59:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 文质彬彬胡汉三 于 2017-4-8 11:05 编辑

哈哈哈 ,自然水,我胡漢三來啦 。
首先定義了var = 'Hi',然後在fun1()中,聲明全局變量var,緊接著var = 'baby',下一步返回了fun2()的值,fun2(var)這個函數中,函數的形勢參數var的實際參數就是fun1()中的 var(2) = var(1)+'I love you ',即:
var = 'baby I love you ',
下一步,fun3(var)這個函數中,沒有任何返囘值,因此fun2()的實際參數是不受影響的,fun2(var)返回的是var(2)的值,即屏幕打印baby I love you.
如果你修改fun2(var),返回的是fun3(var),代碼如下:
var = ' Hi '
def fun1():
    global var
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return fun3(var)
def fun3(var):
    var = ' 小甲鱼 '
print(fun1())
此時屏幕打印的結果是None,因爲fun3()并無有返囘值,若修改fun3(var),代碼如下:
var = ' Hi '
def fun1():
    global var
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return fun3(var)
def fun3(var):
    var = ' 小甲鱼 '
    return var
print(fun1())
此時屏幕打印值就是小甲魚

還有一點忘了說,var是全局變量,但是在fun1()中聲明調用了最初定義的var后,下一步,var = 'baby'已經修改全局變量var的值,可以嘗試一下使用
print(var),這個時候屏幕打印就是baby


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 13:40:45 | 显示全部楼层
文质彬彬胡汉三 发表于 2017-4-8 10:59
哈哈哈 ,自然水,我胡漢三來啦 。
首先定義了var = 'Hi',然後在fun1()中,聲明全局變量var,緊接著var = ' ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 08:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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