鱼C论坛

 找回密码
 立即注册
查看: 1918|回复: 3

这个程序的运行原理是什么?为什么没有返回hi、小甲鱼

[复制链接]
发表于 2020-2-4 16:02:58 | 显示全部楼层 |阅读模式

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

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

x
var = 'hi'
def fun1():
    global var
    global var #这句和上面这句的作用是什么
    var = 'Baby'
    return fun2(var)
def fun2(var):
    var  += 'I Love You'
    fun3(var)
    return var
def fun3(var):
    var = "小甲鱼"
print(fun1())
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-4 16:04:46 | 显示全部楼层
1. global var 的意思是将 var 当做全局变量,也就是全局变量 var 被修改为 'Baby'。

2. fun3 并没有返回 "小甲鱼",var = "小甲鱼" 中的 var 只是局部变量,所以这一句无效。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 21:47:50 | 显示全部楼层
1.是将 var 设为全局变量,之后将 var 需改为 "Baby".

2.fun2 和 fun3 函数都是改变了局部变量,而全局变量没变。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 08:57:29 | 显示全部楼层
首先明确,声明函数def 和调用函数()是分开的。
函数可以随意声明,但只有调用的时候才生效。

第二点就是要说清楚,函数里的变量和全局变量是不一样的,
函数里你有一万个变量,只要函数调用一结束,那些变量就都没了,
只有通过return的方式可以返回。
所以你要注意return这一块。


所以代码第一行实际上是print(func1())
这个时候func1被调用,
  1. In [5]: var = 'hi'
  2.    ...: def fun1():
  3.    ...:     global var
  4.    ...:     global var #这句和上面这句的作用是什么
  5.    ...:     var = 'Baby'
  6.    ...:     return fun2(var)
复制代码

这个时候看func1的函数,global var就是把全局变量也就是外边那个var让函数识别
var首先被赋值为‘hi’
然后又被重新赋值为‘Baby’
然后应该return

这里return 的是一个函数,也就变成了return func2('Baby')
先去执行func2
接下来看func2的函数
  1.    ...: def fun2(var):
  2.    ...:     var  += 'I Love You'
  3.    ...:     fun3(var)
  4.    ...:     return var
复制代码

func2(‘Baby’)
再以此类推
var = ‘BabyI Love You’

这里要说清楚一个问题,就是函数有没有return
如果函数有return ,那么可以通过赋值的方式获取函数返回值
不然就像fun3一样
  1.    ...: def fun3(var):
  2.    ...:     var = "小甲鱼"
复制代码

没有return 值就不会被传回。
再去执行func2的return
return的值就是‘Baby I Love You’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-22 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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