在声明函数的时候,一般会根据函数所要实现的功能来决定函数是否需要参数。在多数情况下,我们声明的函数都会使用到参数。
函数的参数可分为两种:形参(形式参数)、实参(实际参数)
形式参数:定义在函数声明中的参数。
实际参数:在使用函数的时候实际传给函数的参数。
1 # 例如 2 def func(param1, param2): # 这里的参数为形式参数 3 print("参数1", param1) 4 print("参数2", param2) 5 6 func("name", "age") # 这里的参数为实际参数
参数的类型
在C/C++、JAVA等语言中,声明参数的时候都要规定参数的类型是什么,并且在传参的过程中,也必须根据相应的类型来传。但是,在python中,并不需要这么做,因为python是一门弱类型的语言,它对于类型的要求远远没有上述的语言强,所以在编程的时候,不需把太多心思花在类型对应上。
在声明参数的时候,没有指明参数的类型,所以在调用函数时,可以传任意的类型,如int、str、list、tuple、dict、函数类型等。
1 def func(param): 2 print(type(param)) 3 4 def func2(): 5 pass 6 7 func(12) # 传整数类型 8 func("hello world") # 传字符串类型 9 func([1, 2]) # 传一个列表 10 func({"name": "tom"}) # 传一个字典 11 func((‘a‘, ‘b‘)) # 传一个元组 12 func(func2) # 传一个函数 13 14 # --------------运行结果----------------- 15 # <class ‘int‘> 16 # <class ‘str‘> 17 # <class ‘list‘> 18 # <class ‘dict‘> 19 # <class ‘tuple‘> 20 # <class ‘function‘>
参数的种类
在函数中,实参必须依据形参而存在。要实现功能强大的函数,肯定不能只有单一形式的参数,那么它都有哪些形式的参数呢?
在python中,参数大致有这几种:位置参数、关键字参数、默认参数、可变参数
位置参数:位置参数为python中最常用的参数形式,它要求形参跟实参一一对应,如果没有一一对应就会报错,并且,位置参数必须在函数括号内的最左边。
关键字参数:关键字参数的形式与位置参数一样,所以在形参中看不出它们的区别,它们的区别是在传参的时候,关键字参数要求在传参的过程中要指明要传给哪个参数,并赋予值,要注意的是,关键字参数必须在位置参数的后面,使用过的位置参数不能再作为关键字参数传值。
默认参数:默认参数就是在声明参数的时候给参数一个初始值,这样在调用函数的时候,如果没有给该参数传值,就会使用默认值,注意,默认参数必须声明在位置参数后面。
可变参数:可变参数声明在所有参数的后面,可变参数有两种,*args和**kwargs。*args是将多余的位置参数按元组的形式组合到一起,当所传的是一个序列,并且序列前有一个*,表示该序列中的每一个元素按位置参数的形式传,多余的在以列表的形式整合到一起;**kwargs是以字典的方式存储未声明的并以键值形式对出现的参数,或者是以**{}形式的字典,并且该形式必须是函数的最后部分。
1 def func(x, y, z=0, *args, **kwargs): 2 print(x) 3 print(y) 4 print(z) 5 print(args) 6 print(kwargs) 7 8 func(1, 2, 3) # 位置参数,按x、y、z的位置传参 9 print("==================") 10 func(1, y=3) # 关键字参数,指定y传的是什么 11 print("==================") 12 func(1, 2) # 默认参数,不传参数给z,z将使用默认值 13 print("==================") 14 func(1, 2, 3, [4, 5]) # 可变参数,将多余的参数传给args 15 print("==================") 16 func(*[1, 2, 3, 4, 5]) # 将列表里面的元素按位置参数一一传值,多余的将传给args 17 print("==================") 18 func(*[1, 2, 3, 4, 5], a=0) # 将以键值对出现的声明中未指定参数名的参数传给kwargs 19 print("==================") 20 func(*[1, 2, 3, 4, 5], {"age": 18}, **{"name": "tom"}) # 将**{}形式的字典传给kwargs 21 22 # ---------------运行结果------------------ 23 # 1 24 # 2 25 # 3 26 # () 27 # {} 28 # ================== 29 # 1 30 # 3 31 # 0 32 # () 33 # {} 34 # ================== 35 # 1 36 # 2 37 # 0 38 # () 39 # {} 40 # ================== 41 # 1 42 # 2 43 # 3 44 # ([4, 5],) 45 # {} 46 # ================== 47 # 1 48 # 2 49 # 3 50 # (4, 5) 51 # {} 52 # ================== 53 # 1 54 # 2 55 # 3 56 # (4, 5) 57 # {‘a‘: 0} 58 # ================== 59 # 1 60 # 2 61 # 3 62 # (4, 5, {‘age‘: 18}) 63 # {‘name‘: ‘tom‘}
注意事项:
1.在使用函数时,要先弄清楚函数需不需要参数,或需要哪些参数
2.在传参的时候,一定要与形参相对应
3.关键字参数不能再位置参数之前,不能重复传参
4.声明函数时,默认参数必须定义在可变参数之前,其它参数之后
原文:https://www.cnblogs.com/yulinjun/p/13196537.html