More about Parameter Passing in Python(Mainly about list)

  我之前写了一篇关于Python参数传递(http://www.cnblogs.com/lxw0109/p/python_parameter_passing.html)的博客,

写完之后,我发现我在使用list的时候(我想在函数中改变实参),感觉使用文章中提到的传参理解还是有点儿迷惑和混乱

所以在此关于list的参数传递,再做一下补充和说明,这些是我个人的理解,如果您感觉有任何疑问或者不同的观点,非常

感谢您与我讨论,谢谢。

 

#!/usr/bin/python
#coding:utf-8
#File: listParaPass.py
#Author: lxw
#Time: 2014-04-19
#Usage: Learn more about parameter passing in Python.

# 所以得到的结论就是:想改变实参,则实参不能以分片的形式传递,且函数内部须以分片的形式操作

def change(x):
    x[:] = ['o', 'k']
    print('x is {0}'.format(x))

#1:
a = [10, 20, 30]
print('a is {0}'.format(a))        # a is [10, 20, 30]
change(a)                        # x is ['o', 'k']
print('a is {0}'.format(a))        # a is ['o', 'k']

#2:
a = [10, 20, 30]
print('a is {0}'.format(a))        # a is [10, 20, 30]
# 想改变实参,则不能传分片;使用分片传,不会影响到实参。
change(a[:])                    # x is ['o', 'k']
print('a is {0}'.format(a))        # a is [10, 20, 30]

print('')
print('')

def change1(x):
    # 与上面的例子对比得到如下结论:
    # 想改变实参(前提实参传的不能是分片),则函数内须用分片;若函数内不使用分片,则不会影响到实参。
    x = ['o', 'k']
    print('x is {0}'.format(x))

#1:
a = [10, 20, 30]
print('a is {0}'.format(a))        # a is [10, 20, 30]
change1(a)                        # x is ['o', 'k']
print('a is {0}'.format(a))        # a is [10, 20, 30]

#2:
a = [10, 20, 30]
print('a is {0}'.format(a))        # a is [10, 20, 30]
change1(a[:])                    # x is ['o', 'k']
print('a is {0}'.format(a))        # a is [10, 20, 30]


print('')
print('')

def change2(x):
    x[1:3] = ['o', 'k']
    print('x is {0}'.format(x))

#1:
a = [10, 20, 30]
print('a is {0}'.format(a))        # a is [10, 20, 30]
change2(a)                        # x is [10, 'o', 'k']
print('a is {0}'.format(a))        # a is [10, 'o', 'k']

#2:
a = [10, 20, 30]
print('a is {0}'.format(a))        # a is [10, 20, 30]
change2(a[:])                    # x is [10, 'o', 'k']
print('a is {0}'.format(a))        # a is [10, 20, 30]

 注:把索引(如:a[1])也归入分片操作。

 

posted @ 2014-04-19 22:01  XiaoweiLiu  阅读(704)  评论(0编辑  收藏  举报