def func(arg): arg = ['hello'] var = ['ok']和def func(arg): arg[0] = 'hello' var = ['ok']有什么不同
时间: 2023-10-07 15:06:06 浏览: 128
这两个函数的不同之处在于,第一个函数通过将参数 `arg` 重新赋值为一个含有一个元素 `'hello'` 的列表,来改变 `arg` 的值;而第二个函数则通过修改 `arg` 列表的第一个元素为 `'hello'`,来改变 `arg` 的值。因为在 Python 中,列表是可变对象,而字符串是不可变对象,所以这两种方式对于可变对象和不可变对象的处理方式是不同的。下面是这两个函数的详细解释:
第一个函数:
```
def func(arg):
arg = ['hello'] # 将参数 arg 重新赋值为一个含有一个元素 'hello' 的列表
var = ['ok'] # 定义一个局部变量 var,值为一个含有一个元素 'ok' 的列表
print('arg inside function:', arg) # 输出 arg 的值,结果为 ['hello']
print('var inside function:', var) # 输出 var 的值,结果为 ['ok']
lst = ['hi']
func(lst)
print('lst outside function:', lst) # 输出 lst 的值,结果为 ['hi']
```
在调用这个函数时,我们向它传递了一个列表 `lst`,它的值为 `['hi']`。在函数内部,我们首先将参数 `arg` 重新赋值为一个含有一个元素 `'hello'` 的列表,然后定义了一个局部变量 `var`,其值为一个含有一个元素 `'ok'` 的列表。在函数内部,我们输出了 `arg` 和 `var` 的值,可以看到它们的值分别为 `['hello']` 和 `['ok']`。最后,在函数外部,我们输出了 `lst` 的值,可以看到它的值仍然为 `['hi']`。
第二个函数:
```
def func(arg):
arg[0] = 'hello' # 将列表 arg 的第一个元素修改为 'hello'
var = ['ok'] # 定义一个局部变量 var,值为一个含有一个元素 'ok' 的列表
print('arg inside function:', arg) # 输出 arg 的值,结果为 ['hello']
print('var inside function:', var) # 输出 var 的值,结果为 ['ok']
lst = ['hi']
func(lst)
print('lst outside function:', lst) # 输出 lst 的值,结果为 ['hello']
```
在调用这个函数时,我们向它传递了一个列表 `lst`,它的值为 `['hi']`。在函数内部,我们通过修改 `arg` 列表的第一个元素为 `'hello'`,来改变了 `arg` 的值。然后我们定义了一个局部变量 `var`,其值为一个含有一个元素 `'ok'` 的列表。在函数内部,我们输出了 `arg` 和 `var` 的值,可以看到它们的值分别为 `['hello']` 和 `['ok']`。最后,在函数外部,我们输出了 `lst` 的值,可以看到它的值已经被修改为 `['hello']` 了。
阅读全文