python 参数传递方式

Python 参数传递方式为赋值传递

python 函数参数既不是传值,也不是传引用,文档上定义的传递方式叫做 call by assignment (赋值传递)

如果将可变对象传递给方法,该方法会获得对同一个对象的引用,虽然可以通过此引用随意修改外部对象,但是如果在方法中重新绑定引用,外部作用域将一无所知。

以 List (mutable 类型) 为例:

def try_to_change_list_contents(the_list):
    print('got', the_list)
    the_list.append('four')
    print('changed to', the_list)

outer_list = ['one', 'two', 'three']
print('before, outer_list =', outer_list)
try_to_change_list_contents(outer_list)
print('after, outer_list =', outer_list)

传进函数的是 outer_list 的引用,可以在函数内部任意修改这个外部变量,输出:

before, outer_list = ['one', 'two', 'three']
got ['one', 'two', 'three']
changed to ['one', 'two', 'three', 'four']
after, outer_list = ['one', 'two', 'three', 'four']

但是,如果在函数内部改变变量所指的对象,外部对象不受影响,下面的例子,在函数内部,the_list 指向了新的对象,outer_list 不受影响:

def try_to_change_list_reference(the_list):
    print('got', the_list)
    the_list = ['and', 'we', 'can', 'not', 'lie']
    print('set to', the_list)

outer_list = ['we', 'like', 'proper', 'English']

print('before, outer_list =', outer_list)
try_to_change_list_reference(outer_list)
print('after, outer_list =', outer_list)

输出:

before, outer_list = ['we', 'like', 'proper', 'English']
got ['we', 'like', 'proper', 'English']
set to ['and', 'we', 'can', 'not', 'lie']
after, outer_list = ['we', 'like', 'proper', 'English']

如果将不可变对象传递给方法,仍然无法重新绑定外部引用,甚至无法改变对象。

以 string (immutable 类型) 为例:

def try_to_change_string_reference(the_string):
    print('got', the_string)
    the_string = 'In a kingdom by the sea'
    print('set to', the_string)

outer_string = 'It was many and many a year ago'

print('before, outer_string =', outer_string)
try_to_change_string_reference(outer_string)
print('after, outer_string =', outer_string)

输出:

before, outer_string = It was many and many a year ago
got It was many and many a year ago
set to In a kingdom by the sea
after, outer_string = It was many and many a year ago

Python 可变数据类型与不可变数据类型

以下数据类型可变 (mutable)

  1. Lists
  2. Dictionaries
  3. Sets

以下数据类型不可变 (immutable)

  1. Integers
  2. Floating-Point numbers
  3. Booleans
  4. Strings
  5. Tuples
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值