鱼C论坛

 找回密码
 立即注册
查看: 954|回复: 7

[已解决]全局变量和局部变量之二

[复制链接]
发表于 2020-6-15 23:17:10 | 显示全部楼层 |阅读模式

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

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

x
全局变量和局部变量3.png 问题如图片文字所述
最佳答案
2020-6-15 23:22:01
本帖最后由 Twilight6 于 2020-6-15 23:48 编辑


问题一:

fun2、fun3 都发生了屏蔽机制,我之前叙述有错误,感到很抱歉!!!

当 var 进入 fun2 时候 函数就没有声明了,所以这个时候的 var += 'I love you'  可以看成   var = var + 'I love you'   

而 赋值操作是先计算右边 然后赋值左边,所以当赋值时候 就触发了屏蔽机制 此时已经和 之前的 var = ' Baby ' 拼接成功了

所以变成了局部变量 var = 'Baby I love you'  然后传入 fun3(var)   fun3相对于 fun2 是是局部,而fun2相对于 fun3 是全局作用域,所以fun3 对 fun2 的 var 产生了屏蔽机制

fun3 里面的赋值就没意义了,因为一出了fun3 就不复存在了,所以 fun2() 函数 的 fun3 对 var 并没有发生改变,最后返回 var = 'Baby I love you'

问题二:

是没有意义的,小甲鱼老师就是出题考考我们的,看看我们是不是真的理解了这些关系

fun3 的返回值没意义,因为没有一个变量接收或者直接返回 fun3

你可以试试这样的代码:
var = ' Hi '

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

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

def fun3(var):
    var += ' 小甲鱼 '
    return var

print(fun1())

会发现结果是:
>>> Baby I love you 小甲鱼

因为 fun2 也 return 了 fun3 函数,可以等价与在同个作用域了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-15 23:22:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-15 23:48 编辑


问题一:

fun2、fun3 都发生了屏蔽机制,我之前叙述有错误,感到很抱歉!!!

当 var 进入 fun2 时候 函数就没有声明了,所以这个时候的 var += 'I love you'  可以看成   var = var + 'I love you'   

而 赋值操作是先计算右边 然后赋值左边,所以当赋值时候 就触发了屏蔽机制 此时已经和 之前的 var = ' Baby ' 拼接成功了

所以变成了局部变量 var = 'Baby I love you'  然后传入 fun3(var)   fun3相对于 fun2 是是局部,而fun2相对于 fun3 是全局作用域,所以fun3 对 fun2 的 var 产生了屏蔽机制

fun3 里面的赋值就没意义了,因为一出了fun3 就不复存在了,所以 fun2() 函数 的 fun3 对 var 并没有发生改变,最后返回 var = 'Baby I love you'

问题二:

是没有意义的,小甲鱼老师就是出题考考我们的,看看我们是不是真的理解了这些关系

fun3 的返回值没意义,因为没有一个变量接收或者直接返回 fun3

你可以试试这样的代码:
var = ' Hi '

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

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

def fun3(var):
    var += ' 小甲鱼 '
    return var

print(fun1())

会发现结果是:
>>> Baby I love you 小甲鱼

因为 fun2 也 return 了 fun3 函数,可以等价与在同个作用域了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-15 23:30:01 | 显示全部楼层
Twilight6 发表于 2020-6-15 23:22
因为 是return fun2()  所以 func2 是算属于 fun1 的作用域里

而 fun2 里面的 fun3 是在fun2作用域直 ...

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

使用道具 举报

发表于 2020-6-15 23:50:22 | 显示全部楼层

您重新看下第一个问题,我之前的叙述有很大的错误! 误导了你 很抱歉,这和 是不是return 并无关联

return 也不能改变函数作用域的问题,上面我已经重新修改 如果看不懂可以继续追问~~~非常抱歉!!!

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小甲鱼的铁粉 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-6-16 22:51:08 | 显示全部楼层

                               
登录/注册后可看大图

这个里面我尝试在fun2里面将var声明为全局变量,可是报错了,是因为var是fun2函数的形式参数吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 23:20:42 | 显示全部楼层
润木 发表于 2020-6-16 22:51
这个里面我尝试在fun2里面将var声明为全局变量,可是报错了,是因为var是fun2函数的形式参数吗?

你刚刚没点回复 我看不见你的消息嗷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-16 23:22:36 | 显示全部楼层
Twilight6 发表于 2020-6-16 23:20
你刚刚没点回复 我看不见你的消息嗷

这个问题我重新发了个求助帖,图片好像刷不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 23:23:36 | 显示全部楼层
润木 发表于 2020-6-16 23:22
这个问题我重新发了个求助帖,图片好像刷不出来

骚等 我在编辑哈 等下发你那个帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 16:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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