鱼C论坛

 找回密码
 立即注册
查看: 2516|回复: 19

新手提问

[复制链接]
发表于 2016-11-19 13:56:06 | 显示全部楼层 |阅读模式
1鱼币
各位大侠:能否告诉我下面函数的执行经过,怎么就输出:1314520


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

var = 520
fun(var)
print(var)


谢谢!

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

使用道具 举报

发表于 2016-11-19 14:01:54 | 显示全部楼层
变量传进去函数以后被修改了,所以先打印出的还是1314
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-19 14:05:02 | 显示全部楼层
alltolove 发表于 2016-11-19 14:01
变量传进去函数以后被修改了,所以先打印出的还是1314

还是不太明白。能否说的详细点,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-19 14:50:26 | 显示全部楼层
主程序中var为520,但是函数把var的值改为了1314
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-19 14:55:36 | 显示全部楼层
渝耗子 发表于 2016-11-19 14:50
主程序中var为520,但是函数把var的值改为了1314

还是很晕,那应该是输出520才对啊,你能否跟我说说函数的执行经过,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-19 15:28:39 | 显示全部楼层
def fun(var):
    var = 1314   #函数的局部变量,在函数里面为了区分外部的var暂时把外部的var=520隐藏起来
    print(var, end='')

var = 520
fun(var)  #调用函数是var=1314
print(var)#此次调用的是外部的var=520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-19 17:28:13 | 显示全部楼层
你初学者就不要把所以变量都写的一样搞晕自己嘛,
重新写一些变量比如:
def fun(var):
    var = 1314
    print(var,end="")

temp = 520
fun(temp)   
调用这个函数的时候,其实相当于fun(var = temp)函数内部的var只是复制了temp的值,函数内部对var做任何修改都不会影响到函数外面的temp变量。函数执行完毕后先答应出1314,再执行print 520,最后就是1314520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-19 19:03:40 | 显示全部楼层
var = 520 #给全局var赋值为520
fun(var)    #调用fun()函数把全局的var传进去
执行fun(var)时,由于函数体中又给var赋值,此时python为了保护全局var不被修改,所以生成一个临时变量var并把
1314赋给它,打印出 1314,然后函数调用结束,临时变量var也被销毁
回到调用fun()的下一行继续打印 520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-19 19:04:45 | 显示全部楼层
如果还是没弄懂,那就@我吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-19 19:24:10 | 显示全部楼层
本帖最后由 人zai旅途 于 2016-11-19 19:34 编辑

def fun(var):  # 定义包含一个变量的函数 fun(var)
    var = 1314  # 函数内var赋值为1314,局部变量
    print(var, end='') # 函数的输出是 打印var的值且不换行, end='',表示用‘’来代替print()函数默认参数的不换行
                              #fun()输出结果为函数内定义的var的值

var = 520  # 全局变量var赋值为520
fun(var)  #调用fun()函数,输出1314,注意,这里不换行,也就是后边在有输出的内容,将紧挨着(end=''的作用)
print(var) # 输出520,全局变量;上面说了,本行代码输出的内容将紧紧挨着前面的1314,最终输出1314520

本题关键是搞明白,名字一致时,全局变量和局部变量的关系。详细描述是这样的

在任何程序语言中全局变量的修改都必须谨慎,Python也不例外,当在函数体内对对全局变量进行修改时,Python程序会自动生成一个与全局变量名一样的局部变量,从而达到对全局变量保护(在函数体内的操作不会改变全局变量值)的作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-20 23:09:29 | 显示全部楼层
先打印1314在打印520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-21 09:26:05 | 显示全部楼层
这个是局部变量的问题。520是你在外边定义的变量,传进去之后就又会被赋值1314,所以第一个打印1314.后面你打印var是在函数外部,打印的是外部的变量var,是520.不是函数内部的变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-21 10:44:15 | 显示全部楼层
你的主程序中,首先调用了fun(var),打印出来1314,之后紧接着打印出主程序的变量var = 520,因此加起来就是1314520。希望对你有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-21 10:45:11 | 显示全部楼层
蛋炒饭妖妖 发表于 2016-11-21 09:26
这个是局部变量的问题。520是你在外边定义的变量,传进去之后就又会被赋值1314,所以第一个打印1314.后面你 ...

嗯嗯,这个回答通俗易懂,给个赞!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-21 14:09:05 | 显示全部楼层
变量的命名还是要区分下的好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-24 00:15:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-24 23:14:30 | 显示全部楼层
两个var一个是全局变量,一个是局部变量,在函数里面的var是局部变量,它不能修改全局变量的值。第一次fun(var)这个命令,虽然var是520,但在函数里面,var又重新被赋值成1314,就是被1314覆盖掉了。这跟所有语言语法都是一样的,再次赋值就把之前的覆盖掉了。所以fun打印出的是1314,而且fun函数里面加了个end,不换行。
最后一条命令是print,这时的var是全局变量,因为函数里面的var只能用在局部,不能传出来。所以print的参数仍然是520,最后结果就是1314520.
这个例子就是考察局部变量和全局变量的赋值及传递问题,非常值得思考。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-25 07:11:55 | 显示全部楼层
zhangqinghao 发表于 2016-11-24 23:14
两个var一个是全局变量,一个是局部变量,在函数里面的var是局部变量,它不能修改全局变量的值。第一次fun ...

您解释的很清楚,非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-26 00:31:35 | 显示全部楼层
如果问题解决了,麻烦把贴给结一下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 00:30:52 | 显示全部楼层
人zai旅途 发表于 2016-11-19 19:24
def fun(var):  # 定义包含一个变量的函数 fun(var)
    var = 1314  # 函数内var赋值为1314,局部变量
  ...

受教了,讲的很好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 19:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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