鱼C论坛

 找回密码
 立即注册
查看: 1736|回复: 4

[已解决]关于函数变量的问题

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

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

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

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

var = 520
fun(var)
print(var)
为什么上述程序输出的是1314520呢?
我理解的是var = 1314是函数中的局部变量,下面var = 520是全局变量,后面print语句是在这个程序的作用域中实现的,所以不应该是输出520吗
最佳答案
2020-11-24 15:29:55
这涉及函数调用中参数传递的问题。在函数调用过程中,进行阐述的传递:
如果是不可变对象,在函数体的修改不会影响实参的值(例如:整型,字符串和元组)
如果是可变的对象,在函数体的修改会影响到实参的值(例如:集合,列表和字典)
我是这样理解的,显示运行函数外面var,赋值为int 520,然后调用fun(),将var=520传参数给函数。但是在函数内重新给了局部变量var赋值1314,所以函数内输出为1314,这时已经结束函数调用fun(var),下一句执行输出var(是实参)还是520,(end不换行,拼接输出)显示是1314520.
再举个例子:
# conding -utf-8

var = 520
t = 1
x = [1,2,3]
def fun(var,t):
    var = 1314
    t = t+1
    print(".............调用不可变对象.....................")
    print(var,t)

fun(var,t,)
print(var,t)
print("...............调用可变对象 .........................")
def fun1(x=[]):
    x.append(99)
    for i in x:
        print(i)   
    return x

fun1(x)
print(x)
输出为:
.............调用不可变对象.....................
(1314, 2)
(520, 1)
...............调用可变对象 .........................
1
2
3
99
[1, 2, 3, 99]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-24 10:39:56 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2020-11-24 10:43 编辑

        fun() 内的变量 var 赋值在先,所以,是局部变量,与主函数中的 var 不属于同一个变量。
        调用 fun() 的时候,打印的 var 是 1314,不换行,然后在主函数中打印的 var 是 520,所以,最后输出的就是 1314520。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 15:29:55 | 显示全部楼层    本楼为最佳答案   
这涉及函数调用中参数传递的问题。在函数调用过程中,进行阐述的传递:
如果是不可变对象,在函数体的修改不会影响实参的值(例如:整型,字符串和元组)
如果是可变的对象,在函数体的修改会影响到实参的值(例如:集合,列表和字典)
我是这样理解的,显示运行函数外面var,赋值为int 520,然后调用fun(),将var=520传参数给函数。但是在函数内重新给了局部变量var赋值1314,所以函数内输出为1314,这时已经结束函数调用fun(var),下一句执行输出var(是实参)还是520,(end不换行,拼接输出)显示是1314520.
再举个例子:
# conding -utf-8

var = 520
t = 1
x = [1,2,3]
def fun(var,t):
    var = 1314
    t = t+1
    print(".............调用不可变对象.....................")
    print(var,t)

fun(var,t,)
print(var,t)
print("...............调用可变对象 .........................")
def fun1(x=[]):
    x.append(99)
    for i in x:
        print(i)   
    return x

fun1(x)
print(x)
输出为:
.............调用不可变对象.....................
(1314, 2)
(520, 1)
...............调用可变对象 .........................
1
2
3
99
[1, 2, 3, 99]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 09:52:42 | 显示全部楼层
jackz007 发表于 2020-11-24 10:39
fun() 内的变量 var 赋值在先,所以,是局部变量,与主函数中的 var 不属于同一个变量。
         ...

噢噢明白了 fun()函数运行之后本身是要打印出来的,不换行继续执行后面的程序就是最终结果了,感谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 10:00:46 | 显示全部楼层
输出的是1314520
实际上是两个部分,分别是
1314 和 520
1314是fun函数打印的
def fun(var):
    var = 1314
    print(var, end='')
fun(var)
在fun(var)中有局部变量'var=1314'不论你传入什么参数,都会打印一个1314
而print最后的end='',意味着打印结束后,没有空格,不换行
之后你执行了
print(var)
在全局变量中var=520
会打印一个520

由于fun(var)中print参数end=‘’
这个520会打印在1314的后面
所以有了1314520的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 21:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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