鱼C论坛

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

[已解决]第019讲:函数:我的地盘听我的 求大神解答。

[复制链接]
发表于 2020-5-13 21:58:25 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 hxha2007 于 2020-5-13 22:00 编辑

新手入门,之前完全没接触过程序。


def fun(var):
    var = 1314
    print(var, end='')

var = 520
fun(var)
print(var)

这个fun(var)具体是什么意思?

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

这个fun3(var)又是什么意思?
我的理解是def fun1下面的函数把var从hi变成了baby,返回fun2。
def fun2 之后var从baby 加了个 i love you 。

然后一个独立的fun3(var)是什么意思,下面那个  return var 到底返回的是哪个var?

求各路大神解惑。
最佳答案
2020-5-13 22:06:49
本帖最后由 Twilight6 于 2020-5-13 22:15 编辑

第一问:
因为你前面定义了函数:
def fun(var):
    var = 1314
    print(var, end='')
所以这里的:fun(var) 是指调用你定义的函数fun并且传入参数var=520
这里是为了让你知道,有函数内部如果定义了一个与外部的全局变量同名的变量,就会启用屏蔽效果
内部函数会创建一个与外部同名的局部变量来暂时覆盖外部的全局变量
一旦出去函数外面var就变回了全局变量
——————————————————————————————————————————————————分割线——
第二问:
var = 'Hi' 是全局变量 , 然后你定义了这个函数
def fun1():
    global var    # 通过声明global,来允许函数内部更改外面的全局变量
    var = ' Baby '  # 这里就可以成功把var更改为   'Baby'
    return fun2(var) # 这里返回结果又调用了func2函数

def fun2(var):     
    var += 'I love you'   # 拼接上 I love you 并返回
    fun3(var)    # 调用第三个函数   看到这先去看第3个函数 ,最后在看func2  的 return
    return var  # 返回最终结果  Baby I love you

def fun3(var):
    var = ' 小甲鱼 '  # 这边没有生命var是全局变量,所以产生屏蔽效果 var在这是局部变量 
    # 一结束func3函数 就消失了的变量 ,所以不影响上面的结果

print(fun1())








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

使用道具 举报

发表于 2020-5-13 22:06:34 | 显示全部楼层
那些 var 都是与全局变量 var 同名的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 22:06:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-5-13 22:15 编辑

第一问:
因为你前面定义了函数:
def fun(var):
    var = 1314
    print(var, end='')
所以这里的:fun(var) 是指调用你定义的函数fun并且传入参数var=520
这里是为了让你知道,有函数内部如果定义了一个与外部的全局变量同名的变量,就会启用屏蔽效果
内部函数会创建一个与外部同名的局部变量来暂时覆盖外部的全局变量
一旦出去函数外面var就变回了全局变量
——————————————————————————————————————————————————分割线——
第二问:
var = 'Hi' 是全局变量 , 然后你定义了这个函数
def fun1():
    global var    # 通过声明global,来允许函数内部更改外面的全局变量
    var = ' Baby '  # 这里就可以成功把var更改为   'Baby'
    return fun2(var) # 这里返回结果又调用了func2函数

def fun2(var):     
    var += 'I love you'   # 拼接上 I love you 并返回
    fun3(var)    # 调用第三个函数   看到这先去看第3个函数 ,最后在看func2  的 return
    return var  # 返回最终结果  Baby I love you

def fun3(var):
    var = ' 小甲鱼 '  # 这边没有生命var是全局变量,所以产生屏蔽效果 var在这是局部变量 
    # 一结束func3函数 就消失了的变量 ,所以不影响上面的结果

print(fun1())








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

使用道具 举报

发表于 2020-5-13 23:51:09 | 显示全部楼层
本帖最后由 sunrise085 于 2020-5-13 23:53 编辑

第一问
fun(var)就是调用fun函数,实参是var

第二问
写了注释,你看一下。这是变量作用域的问题。局部变量和全局变量其实是不同的变量,你可以用print(id(var))看一下就知道了,可以分别在三个函数和主程序中输出var的id就可以看出来了。
var = ' Hi '            #全局变量var,称之为var0,变量var0=' Hi '

def fun1():
    global var          #全局变量var0,变量var0=' Hi '
    var = ' Baby '      #全局变量var0,变量var0=' Baby '
    return fun2(var)    #全局变量var0,实参var0=' Baby '。得到的返回值在第11行

def fun2(var):          #局部变量var,称之为var1,变量var1=' Baby '
    var += 'I love you' #局部变量var1=' Baby I love you'
    fun3(var)           #局部变量var1,实参var1=' Baby I love you'。fun3()不影响var1的值
    return var          #将var1作为返回值,var1=' Baby I love you'。fun2()的返回值不影响var0的值

def fun3(var):          #局部变量var,称之为var2,变量var2=' Baby I love you'
    var = ' 小甲鱼 '    #局部变量var2=' 小甲鱼 '

print(fun1())           #该语句打印的是fun1()的返回值,即第6行的return内容,也即第11行的返回值' Baby I love you'
print(var)              #全局变量var0=' Baby '
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 18:16:28 | 显示全部楼层
Twilight6 发表于 2020-5-13 22:06
第一问:
因为你前面定义了函数:

你好,想问下这里第八行调用了第三个函数,然后去看第三个函数具体是什么意思,能解释一下吗,谢谢,因为如果看第三个函数不是就直接吧第二个函数的var变成成了第三个函数里的var,然后在返回到第二个函数在输出吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 19:49:51 | 显示全部楼层
thrstone 发表于 2020-6-2 18:16
你好,想问下这里第八行调用了第三个函数,然后去看第三个函数具体是什么意思,能解释一下吗,谢谢{:10_2 ...

你没认真看了  12行注释:这边没有生命var是全局变量,所以产生屏蔽效果 var在这是局部变量
所以 fun3 中的 var 不会改变全局的 var  一个是局部变量 一个是全局变量 只是在fun3函数内部 把全局变量暂时屏蔽了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 10:02:09 | 显示全部楼层
Twilight6 发表于 2020-6-2 19:49
你没认真看了  12行注释:这边没有生命var是全局变量,所以产生屏蔽效果 var在这是局部变量
所以 fun3  ...

我明白了,谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 10:06:06 | 显示全部楼层
thrstone 发表于 2020-6-3 10:02
我明白了,谢谢你

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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