Python中函数参数传递方式介绍

一、参数使用介绍

在Python中,类型属于对象,变量是没有类型的。变量仅仅是一个对象的引用(一个指针),可以是List类型对象,也可以是String类型对象

1.1 可更改(mutable)与不可更改(immutable)对象

在 Python 中,strings, 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 本身
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

1.2 调用函数时可使用的正式参数类型

  • 必备参数
  • 关键字参数
  • 默认参数
  • 不定长参数

1.2.1 必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样

1.2.2 关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值

1.2.3 默认参数

调用函数时,默认参数的值如果没有传入,则被认为是默认值

1.2.4 不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名

代码:

def normal_func_test1(str):
    print("这是 {} 的第一个实例,普通函数传参".format(str))

def keyparams_func_test2(name, age):
    print("这是 {} 的第二个实例,关键字传参".format(name))

def default_func_test3(name, age = 30):
    print("这是 {} 的第三个实例,默认参数,当具备默认值的参数没有传参时,则使用默认值;否则使用新值".format(name))

def no_length_limit_func_test4(arg1, *vartuple):
    print("这是 小明 的第四个实例,不定长参数")
    print("参数1:", arg1)
    for var in vartuple:
        print("不定长参数:", var)


if __name__ == '__main__':
    name = "小明"
    normal_func_test1(name)
    keyparams_func_test2(name=name, age=18)
    default_func_test3(name)
    no_length_limit_func_test4("加油", 666, 888, 999)

输出结果:

这是 小明 的第一个实例,普通函数传参
这是 小明 的第二个实例,关键字传参
这是 小明 的第三个实例,默认参数,当具备默认值的参数没有传参时,则使用默认值;否则使用新值
这是 小明 的第四个实例,不定长参数
参数1: 加油
不定长参数: 666
不定长参数: 888
不定长参数: 999

猜你喜欢

转载自blog.csdn.net/sinat_34241861/article/details/121388030
今日推荐