python函数注意事项-参数的改变

本文通过实例演示了在Python中如何处理函数内的列表参数。展示了当函数内部修改传入的列表参数时,原始列表也会随之发生变化的现象,并探讨了其背后的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于python中的函数,如果我们在函数需要一个参数,而在函数中又对这个参数做了改变,那么函数调用结束后这个参数会被改变。


下面这个场景:我们有一个列表,其中包括16进制的数:

hex_list = ['0xffffffff','0x11111111']

但是我们想在输出结果中显示十进制的数,于是我们可能定义一个专门输出的函数:

def test(something):
    for i in something:
        ind = something.index(i)
        something[ind] = int(i,16)
    return something

下面打印一下结果:

x = test(hex_list)
print 'result:',x

会得到:

result: [4294967295L, 286331153]

好的,现在看看最初的 hex_list 的变化:

print 'hex_list before test():',hex_list
x = test(hex_list)
print 'result:',x
print 'hex_list after test():',hex_list

输出:

hex_list before test(): ['0xffffffff', '0x11111111']
result: [4294967295L, 286331153]
hex_list after test(): [4294967295L, 286331153]

我们很惊奇的发现最初的 hex_list 的值被改变了。这是因为在函数中对传入的参数操作了。

有人可能会说,函数中最后将传入的参数返回了,所以会发生改变,那么我们再来看:

hex_list = ['0xffffffff','0x11111111']

def test(something):
    result = ''
    for i in something:
        ind = something.index(i)
        something[ind] = int(i,16)
        result = result + str(something[ind])
    return result

print 'hex_list before test():',hex_list
x = test(hex_list)
print 'result:',x
print 'hex_list after test():',hex_list

输出:

hex_list before test(): ['0xffffffff', '0x11111111']
result: 4294967295286331153
hex_list after test(): [4294967295L, 286331153]

由此可见,不管返回值是什么,传入的参数都被改变了,就是因为这一句:

something[ind] = int(i,16)
以上实验在2.7.5中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值