Sss123057057 发表于 2021-2-4 08:34:42

返回值

def eggs(i):
      i.append('hello')
spam=
eggs(spam)
print(spam)
当eggs()被调用时,没有使用返回值来为spam赋新值是什么意思?

洋洋痒 发表于 2021-2-4 08:41:54

没有看懂你的问题,。但是你这样定义函数没有return语句就是默认return None
下边执行的时候把'hello'添加进spam里了,这有什么疑问吗,我执行结果是打印

洋洋痒 发表于 2021-2-4 08:44:56

或者你的意思是在egg函数定义里最后加一句return i
还有函数你没有学通之前还是不要拿可变序列作为参数

Sss123057057 发表于 2021-2-4 08:48:16

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

这是书里的例题,他说,eggs直接修改了该列表

洋洋痒 发表于 2021-2-4 08:49:23

确实修改了列表啊。下边执行的时候把'hello'添加进spam里了,

Sss123057057 发表于 2021-2-4 08:52:04

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

拿可变序列作为参数有什么影响吗?

洋洋痒 发表于 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)


从百度上抄来一个例子,把你认为应该的结果和实际运行得到的结果对比一下就知道为什么不建议了

°蓝鲤歌蓝 发表于 2021-2-4 12:40:34

对于 list span = 来说
这叫 赋新值
span =
这叫 修改
span.append(4)

那可变类型的作为参数,在函数内部 修改 了该 参数 的话,函数外部的 可变类型 也会被修改。
拿你的例题来说

def eggs(i):
      i.append('hello')
spam=
eggs(spam)
这里 spam 本来是 ,可是调用 eggs(spam) 之后就被修改了。
如果后面又有函数需要使用这个 spam 列表的话,使用的就是 被修改之后的 spam 了,而不是最初的 spam(,这就是影响。
页: [1]
查看完整版本: 返回值