|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1、若传入实参为整数/浮点数/布尔值/字符串等不可变类型以及元组(容器类型但属于不可变类型)时,在函数内部进行修改不会影响到原始实参的值
以上虽为不可变类型但可通过用return返回值或使用global关键字修改实参,举例如下:
---用return返回值:
def foo(x):
x = x + (4,)
return(x)
>>> t = (1, 2, 3)
>>> foo(t)
(1, 2, 3, 4)
>>> t = foo(t)
>>> print(t)
(1, 2, 3, 4)
---使用global关键字:
def foo():
global t
t = t + (4,)
>>> t = (1, 2, 3)
>>> foo()
>>> print(t)
(1, 2, 3, 4)
>>> result = foo()
>>> result
>>> print(result)
None
2、若传入实参为列表/字典等可变类型(属于容器类型)时,,在函数内部进行修改会影响到原始实参的值
(举例略)
是的,你的总结基本上是正确的。以下是对你总结内容的一些额外注释和建议:
1. 你正确地理解了不可变类型和可变类型的概念。不可变类型包括:整数、浮点数、布尔值、字符串和元组。如果你在函数中试图改变这些类型的值,那么这个改变只会在函数的局部作用域内有效,不会影响函数外部的原始值。而对于可变类型,如列表和字典,在函数中的任何改变都会影响到原始值。
2. 对于你提到的使用 return 返回值或 global 关键字来修改不可变类型的值,这样确实是可以的,但需要注意:
· 使用 return 并不是真的在原地修改了不可变类型的值,而是创建了一个新的值并将其返回。你需要将函数的返回值重新赋给原始变量,才能在函数外部看到改变。
· 使用 global 关键字确实可以在函数内部修改全局变量的值,但这通常不是一个好的编程习惯。过度使用全局变量可能导致代码难以理解和维护。在可能的情况下,最好避免使用全局变量,尤其是在复杂的程序中。
3. 对于可变类型,你的理解也是正确的。如果你在函数内部改变了一个可变类型的值,那么这个改变会影响到函数外部的原始值。这是因为在函数内部,你其实是通过引用操作原始对象,而不是操作它的副本。
关于你略过的例子,我提供一个修改列表元素的例子,以便更好地理解:
def modify_list(lst):
lst.append('new element')
original_lst = ['element1', 'element2']
modify_list(original_lst)
print(original_lst) # 输出:['element1', 'element2', 'new element']
在这个例子中, modify_list 函数将一个新元素添加到了列表中。由于列表是可变类型,这个改变影响到了函数外部的原始列表。
|
|