参数传递

  • 参数传递
在Python中, 类型属于对象,变量是没有类型的
a = [1,2,3]
a = "Runoob"
以上代码这种,[1,2,3]是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),能够是 List 类型对象,也能够指向 String 类型对象

  • 可更改(mutable)与不可更改(immutable)对象
在 Python 中,string 、tuples,和 numbers 是不可更改的对象,而 list,dict 则是能够修改的对象

  • 不可变类型
变量赋值 a = 5,后赋值 a = 10,实际是新生成一个 int 值对象10,再让 a 指向 它,而5被丢弃,不是改变 a 的值,至关于新生成了 a

  • 可变类型
变量赋值 la = [1,2,3,4]后再赋值 la[2] = 5,则是将 list la 的第三个元素值更改,自己 la 没有动,只是其内部的一部分值被修改

  • Python 函数的参数传递

  • 不可变类型
相似 c++ 的值传递,如整数、字符串、元祖。如 fun(a) ,传递的只是 a 的值,没有影响 a 对象自己,好比在 fun(a) 内部修改 a 的值,只是修改另外一个复制的对象,不会影响 a 自己
#Pyton 传不可变对象实例
def ChangeInt(a):
    print a      #按传值的方式赋值变量 b,a和b都指向了用一个int对象 2
    a =10        # a 又指向了 int 对象 10
b = 2
ChangeInt(b)
print b          

# 输出
2
2
实例中有 int 对象 2,指向了 变量 b ,在传递给 ChangeInt 函数时,按传值的方式赋值了变量 b( 即赋值了引用),因此a 和 b都指向了同一个 Int 对象 2 ,在 a =10 时,则新生成一个 int值对象 10,并让 a 指向它

  • 可变类型
相似 c++ 的引用传递,如列表、字典。如 fun(la) ,则将 la 真正的传过去,修改后 fun 外部的 la 也会受影响
def changeMe(mylist):
    "传入修改的列表"
    mylist.append([1,2,3,4])
    print ('函数内取值' ,mylist)
    return

#调用 changeMe()

mylist = [10,20,30]
changeMe(mylist)
print ('函数外取值',mylist)

#输出
函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]
传入函数的和为末尾添加新内容给的对象用的是用同一个引用
相关文章
相关标签/搜索