python学习之引用传参

传参时的注意点

Posted by YangSijie on September 11, 2018

python引用传参

介绍:

在python中的函数参数的传递,都是采用的==引用传递==,而不是(值传递,C默认是用值传递,除非使用指针)。

但是在python中的变量有两种类型:

  • 可变类型(列表,字典)
  • 不可变类型(数字,字符,元组)

因此,虽然是采用引用传递,但是对于两种不同类型的参数,显示出来的效果是不一样的。

对于可变类型,函数是==可以修改==原始对象的。

对于不可变类型,函数==无法修改==原始对象。

案例:

>>> def test(arg):
...     if isinstance(arg, str):	# 参数为字符或字符串
...         arg = 'hahaha'
...     elif isinstance(arg, int) or isinstance(arg, float):	# 参数为数字
...         arg = 0
...     elif isinstance(arg, list):	# 参数为列表
...         arg[0] = 'hahahaha'
...     elif isinstance(arg, dict):	# 参数为字典
...         arg['hahaha'] = 'hahaha'
...     elif isinstance(arg, tuple):	# 参数为元组
...         print arg
>>>
>>> test_str = 'test_str'	# 测试字符或字符串的情况
>>> test(test_str)
>>> print test_str			# 原始值没有变
test_str
>>>
>>>
>>> 
>>> test_int_or_float = 12.3	# 测试数字的情况
>>> test(test_int_or_float)
>>> print test_int_or_float		# 原始值没有变
12.3
>>> 
>>> 
>>> 
>>> test_tuple = ('123', 123)	# 测试元组的情况
>>> test(test_tuple)			# 由于元组本身无法修改,所以在函数内也没有对其做修改
('123', 123)
>>> 
>>> 
>>> 
>>> test_list = [1, 2, 3]		# 测试列表的情况
>>> test(test_list)
>>> print test_list				# 原始值变化
['hahahaha', 2, 3]
>>> 
>>> 
>>> 
>>> test_dict = {}				# 测试字典的情况
>>> test(test_dict)
>>> print test_dict				# 原始值变化
{'hahaha': 'hahaha'}