Python函数参数类型

博客简介

关于函数,我们一定都不陌生。函数参数的传递分为可更改类型mutable:numbers,strings, tuples不可更改(immutable)类型:list,set,dictionary本篇博客针对Python3中的函数参数类型规则作出总结:
Python中的函数参数类型有:

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数
  • 强制位置参数

必需参数

  • 必需参数须以正确的顺序传入函数。
  • 调用时的数量必须和声明时的一样。
  • 举例:
def func(a,b):
	print("Function:%d %d"%(a,b))
func(1,2)
'''
Function:1 2
'''

关键字参数

  • 函数调用使用关键字参数来确定传入的参数值。
  • 使用关键字参数允许函数调用时参数的顺序与声明时不一致
  • 使用function(key=value)的形式来传入参数,Python 解释器能够用参数名匹配参数值。
  • 举例:
def func(a,b):
	print("Function:%d %d"%(a,b))
func(b=2,a=1)
'''
Function:1 2
'''

默认参数

  • 默认参数允许改关键字没有匹配具体值
  • 如果没有传递参数,则会使用默认参数
  • 举例:
def func(a,b=0):
	print("Function:%d %d"%(a,b))
func(1)
'''
Function:1 0
'''

不定长参数

有时候我们也许需要一个函数能处理比当初声明时更多的参数。类似于传入一个C++中的数组:

  • 参数长度可变,也可以是0
  • 参数有两种类型:元组tuple和字典dictionary
  • 不定长元组:function(*tuple)的形式传入
  • 如果单独出现星号,*前面的参数必须不能有关键字传入 * 后的参数必须用关键字传入。
  • 不定长字典:function(*diction)的形式传入

*Tuple形式传入:

def func(a,*b):
	print("Function:",a,b)

def function(a,*b):
	print("Function:",a)
	for val in b:
		print(val)

func(1,2,3,4,5)
func(1,(2,3,4,5))
function(1,2,3,4,5)
'''
Function: 1 (2, 3, 4, 5)
Function: 1 ((2, 3, 4, 5),)
Function: 1
2
3
4
5
'''
def function(b,*x,c):
	print("sucess")
function(1,0,c=1)
'''
1 2 3 4 (0,) 5
sucess
function(b=1,0,c=1)
错误
'''

**dictionary形式传入

#coding=UTF-8
def func(a,**b):
	print("Function:",a,b)

def function(a,**b):
	print("Function:",a)
	for key,val in b.items():
		print(key,"=>","val")

func(1,key1="value1",key2="value2",key3="value3")
function(1,key1="value1",key2="value2",key3="value3")
'''
Function: 1 {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
Function: 1
key1 => val
key2 => val
key3 => val
'''

注意:这里的dictionary只是形式导入,key为参数名,而非真正的键值。

强制位置参数

Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式:

  • /之前的参数必须使用指定位置的必须参数传入
  • /之后的参数不做要求
  • 举例:
def func(a, b, /, c, d, *e, f, g):
    print(a, b, c, d, e, f,g)
func(1,2,3,4,0,0,0,f=5,g=6)
'''
1 2 3 4 (0, 0, 0) 5 6
'''
'''
形参 a 和 b 必须使用指定位置参数,c 或 d 也必须是指定位置的形参(*),而 f 或 g 要求为关键字形参:
'''
发布了191 篇原创文章 · 获赞 377 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44307065/article/details/104461533