迪哥,是你吗? 发表于 2021-12-30 15:04:04

函数课后题疑问求助

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

def fun2(var):
    var += 'I love you'
    def fun3(var):
      v = ' 小甲鱼 '
      return v
    fun3(var)
    return var

print(fun1())

最后打印出来‘Baby I love you’,硬是没能理解,哪位大神指导一下{:10_266:}
在定义fun1的时候,global 的作用范围是只在fun1中声明,还是后边的fun2和fun3也同样受影响?
感谢!

wp231957 发表于 2021-12-30 15:55:47

fun2 受影响是因为传参传过去的
fun3 就是搞笑的   可以忽略

Stubborn 发表于 2021-12-30 16:20:35

你需要明白的一点。函数接受到什么参数,发回到了什参数。

print(fun1())运行fun1函数,没有传递参数

fun1()函数,返回了一个fun2(var)函数,也就是返回了,fun2函数返回的结果。
global 的作用范围是只在fun1中声明,可以改变fun1里面的var。但是同时这个改变后的var也会传递到fun2函数里面

fun2函数里面对var进行修改,运行一下fun3函数,最终返回的是var,而不是fun3运行结果。

最终fun2返回的var会被打印出来

非凡 发表于 2021-12-30 16:41:40


var = ' Hi '
def fun1():
    global var#定义了全局变量
    var = ' Baby ' #重新赋值var,这时候var就不是'Hi'了
    return fun2(var)    #这里相当于调用函数fun2(var='Baby')

def fun2(var):          #fun2(var='Baby')
    var += 'I love you'    #由于fun2()函数里没有通过全局变量var,所以这里的var是fun2()的局部变量,但‘Baby’是上面传的参数。
                           #这时,fun2()局部变量var=‘Baby I love you’
    def fun3(var):            #fun3(var=‘Baby I love you’,)
      v = ' 小甲鱼 '         #fun3()虽调用了,但是fun3()函数对fun2()的局部变量var没任何操作。
      return v       #返回的也和var没点关系
    fun3(var)      #上面说了
    return var    #所以这里返回的是fun2()的局部变量var

print(fun1())

#如果你在这里打印下var,可以看到var = 'Baby'
print(var)


给你提个简单方法,你在关键位置插入个print(var)查看下var在这个变量在函数某个位置时的状态。
如果你用的pycharm你可以用调试看,这就更方便了。

迪哥,是你吗? 发表于 2021-12-31 10:38:51

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

def fun2(var):
    var += 'I love you'
    def fun3(var):
      var = ' 小甲鱼 '
      return var
    fun3(var)
    print(var)

print(fun1())


为什么这个执行后会打印出:
Baby I love you
None

这个None是怎么出来的?

迪哥,是你吗? 发表于 2021-12-31 10:39:56

非凡 发表于 2021-12-30 16:41
给你提个简单方法,你在关键位置插入个print(var)查看下var在这个变量在函数某个位置时的状态。
如果 ...

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

def fun2(var):
    var += 'I love you'
    def fun3(var):
      var = ' 小甲鱼 '
      return var
    fun3(var)
    print(var)

print(fun1())

为什么这个执行后会打印出:
Baby I love you
None

这个None是怎么出来的?

非凡 发表于 2022-1-2 16:46:56

迪哥,是你吗? 发表于 2021-12-31 10:39
为什么这个执行后会打印出:
Baby I love you
None


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

def fun2(var):
    var += 'I love you'
    def fun3(var):
      var = ' 小甲鱼 '
      return var
    fun3(var)
    print(var)

print(fun1())      #None是你这一行代码带出来的,因为你fun1()函数return fun2(),而fun2()没有return任何东西,所以fun190最后返回的是个空值

你可以在后面试下a = fun1(var),然后在print(a)

或者你在你代码第13行下面插一return 1#注意缩进,然后再执行a = fun1(var),看下a 的值

迪哥,是你吗? 发表于 2022-1-4 10:23:56

明白了,谢谢!{:10_279:}
页: [1]
查看完整版本: 函数课后题疑问求助