Python3 的参数对象

Python3的函数参数对象,可分为两种类型:

  • 不可变对象:int(整形)、str(字符串)、float(浮点型)、tuple(元组)
  • 可变对象:dict(字典)、list(列表)、 set(集合)

参数是可变对象时,类似于C语言中的指针类型。

示例:
可变对象为函数参数时:

def send(lst:list) :
    print(f"send: {lst}")

def func01(lst:list) :
    print(f"run func01, param is {lst}")
    lst.pop()
    send(lst)

def func02(lst:list) :
    print(f"run func02, param is {lst}")
    lst.append("c")
    send(lst)

def func03(lst:list) :
    print(f"run func03, param is {lst}")
    send(lst)

if __name__ == "__main__" :
    # 参数是可变对象,将改变值
    lst = ["a","b"]
    func01(lst)        # lst的值改变,移除最后的元素
    print(lst)
    func02(lst)        # lst的值改变,增加元素
    print(lst)
    func03(lst)
    print(lst)

""" 执行结果如下:
run func01, param is ['a', 'b']
send: ['a']
['a']
run func02, param is ['a']     
send: ['a', 'c']
['a', 'c']
run func03, param is ['a', 'c']
send: ['a', 'c']
['a', 'c']
"""

不可变对象为函数参数时:

# 参数是不可变对象
def send_str(s:str) :
    print(f"send_str: {s}")

def func11(s:str) :
    print(f"run func11, param is {s}")
    s = "func11"
    send_str(s)

def func12(s:str) :
    print(f"run func12, param is {s}")
    s = s + ", add char"
    send_str(s)

def func13(s:str) :
    print(f"run func13, param is {s}")
    send_str(s)


if __name__ == "__main__" :
    # 参数是不可变对象,值保持不变
    s = "abcd"
    func11(s)        # 改变形参的值,并不改变变量的值
    print(s)
    func12(s)        # 改变形参的值,并不改变变量的值
    print(s)
    func13(s)
    print(s)

""" 执行结果如下:
run func11, param is abcd      
send_str: func11
abcd
run func12, param is abcd
send_str: abcd, add char
abcd
run func13, param is abcd
send_str: abcd
abcd
"""

标签: python, 可变对象, 不可变对象, 形参

添加新评论