鱼C论坛

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

[已解决]返回值

[复制链接]
发表于 2021-2-4 08:34:42 | 显示全部楼层 |阅读模式

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

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

x
def eggs(i):
        i.append('hello')
spam=[1,2,3]
eggs(spam)
print(spam)
当eggs()被调用时,没有使用返回值来为spam赋新值是什么意思?
最佳答案
2021-2-4 12:40:34
对于 list
span = [1, 2, 3]
来说
这叫 赋新值
span = [2, 3, 4]
这叫 修改
span.append(4)

那可变类型的作为参数,在函数内部 修改 了该 参数 的话,函数外部的 可变类型 也会被修改。
拿你的例题来说
def eggs(i):
        i.append('hello')
spam=[1,2,3]
eggs(spam)
这里 spam 本来是 [1, 2, 3],可是调用 eggs(spam) 之后就被修改了。
如果后面又有函数需要使用这个 spam 列表的话,使用的就是 被修改之后的 spam 了,而不是最初的 spam([1, 2, 3],这就是影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 08:41:54 | 显示全部楼层
没有看懂你的问题,。但是你这样定义函数没有return语句就是默认return None
下边执行的时候把'hello'添加进spam里了,这有什么疑问吗,我执行结果是打印[1, 2, 3, 'hello']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 08:44:56 | 显示全部楼层
或者你的意思是在egg函数定义里最后加一句return i
还有函数你没有学通之前还是不要拿可变序列作为参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 08:48:16 | 显示全部楼层
洋洋痒 发表于 2021-2-4 08:44
或者你的意思是在egg函数定义里最后加一句return i
还有函数你没有学通之前还是不要拿可变序列作为参数

这是书里的例题,他说,eggs直接修改了该列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 08:49:23 | 显示全部楼层
确实修改了列表啊。下边执行的时候把'hello'添加进spam里了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 08:52:04 | 显示全部楼层
洋洋痒 发表于 2021-2-4 08:44
或者你的意思是在egg函数定义里最后加一句return i
还有函数你没有学通之前还是不要拿可变序列作为参数

拿可变序列作为参数有什么影响吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 09:27:14 | 显示全部楼层
Sss123057057 发表于 2021-2-4 08:52
拿可变序列作为参数有什么影响吗?

def f(x,li=[]):
    for i in range(x):
        li.append(i*i)
    print(li)

print('---1---')
f(4)
print('---2---')
f(5)


从百度上抄来一个例子,把你认为应该的结果和实际运行得到的结果对比一下就知道为什么不建议了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 12:40:34 | 显示全部楼层    本楼为最佳答案   
对于 list
span = [1, 2, 3]
来说
这叫 赋新值
span = [2, 3, 4]
这叫 修改
span.append(4)

那可变类型的作为参数,在函数内部 修改 了该 参数 的话,函数外部的 可变类型 也会被修改。
拿你的例题来说
def eggs(i):
        i.append('hello')
spam=[1,2,3]
eggs(spam)
这里 spam 本来是 [1, 2, 3],可是调用 eggs(spam) 之后就被修改了。
如果后面又有函数需要使用这个 spam 列表的话,使用的就是 被修改之后的 spam 了,而不是最初的 spam([1, 2, 3],这就是影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 16:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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