python函数中的⼏种参数详解(必需参数、默认参数、可变参数、关键字参
数、命名关键字参数)
在编程语⾔中函数之所以发挥着巨⼤的功能,就是其能够对向函数中传⼊的各种参数起到加⼯处理的作⽤,⽽在python中函数⽀持默认参数、必需参数、可变参数、关键字参数和命名关键字参数。本⽂将从例⼦出发介绍这⼏种参数的使⽤⽅式。
⽂章⽬录
必需参数
必需参数正如其名,是函数调⽤所必需的参数,可以按照函数定义参数的顺序传⼊参数,也可以使⽤word = 'argument’这样的指定参数名来传⼊。
例如如下例⼦:
def print_it(word1, word2):
print(word1 +', '+ word2)
# 调⽤函数的⽅法:
print_it('hello','Mary')
print_it(word1 ='hello', word2 ='Mary')
# 这⾥如果传⼊的参数少于两个的话,那么就会报错
# 如果只传word1那么报错为:
# TypeError:print_it() missing 1 required positional argument:'word2'
默认参数
默认参数即函数创建时对某些参数设置了默认值,除⾮调⽤函数时额外再传⼊⼀个参数顶替掉之前的默认值,否则若不传⼊的话就会直接使⽤函数定义时此参数的默认值。要设置默认参数的话需要对这个默认参数进⾏命名,并在函数创建阶段就构建好参数名 = "默认参数值"这样的格式。
例如如下例⼦:
def print_it2(word1 ='hello', word2 ='Mary'):
print(word1 +', '+ word2)
# 由于默认参数的存在,所以在调⽤函数时可以传递参数值,也可以不传递
# 同时也可以直接按照顺序来传⼊参数的,如以下这些例⼦都是可以直接使⽤的
print_it2()
print_it2(word1 ='你好', word2 ='玛丽')
print_it2(word2 ='Jack')
print_it2('你好','玛丽')
可变参数
可变参数稍微复杂⼀点,可变参数的标志就是加⼀个星号*在参数名之前,其意义是收集所有未匹配的位置参数组成⼀个元组对象,这样的元组对象中的元素量是根据调⽤函数时传⼊的参数量所决定的。
例如:
def print_it3(word1,*word2):
python新手函数
print(word1)
print(word2,type(word2))
print_it3('hello','Mary','Jack','World')
# 上⾯的运⾏结果为:
# hello
# ('Mary','Jack','World')<class'tuple'>
从上⾯的例⼦中看到可变参数获取到了除了第⼀个位置参数之外的剩下的所有位置参数,除了上⾯的使⽤⽅法外,再补充⼀种*在函数中的使⽤⽅式:
def print_it3(word1,*word2):
print(word1)
print(word2,type(word2))
word_list =['hello','Mary','Jack','world']
print_it3(*word_list)
# 直接使⽤*号将要传⼊的参数⼀起打包传给函数,这样调⽤运⾏的结果:
# hello
# ('Mary','Jack','World')<class'tuple'>
'''
可以看到这⾥结果同上,这⾥*做了什么呢,它做了解包操作,
解包操作将传⼊的可变列表或者元组等中的⼀个个元素解包成为函数中的⼀个个位置参数,
因此第⼀个出现的位置参数word1就获取到了hello这个元素。
由于函数只需要⼀个位置参数,因此传⼊的列表中除了第⼀个位置参数之外
剩下的各个元素就被分配到了可变参数word2中去了
'''
# 通过上⾯的例⼦理解⼀下使⽤*还可以这样⽤:
def print_it4(word1, word2):
print(word1 +', '+ word2)
word_list =['hello','Mary']
print_it4(*word_list)
# 运⾏结果:
# hello, Mary
# 这⾥的*号也做了解包操作,有时候这样的操作可能会带来⽅便哈
# 但是如果这⾥word_list的元素超过了两个的话,由于解包后产⽣的位置参数⼤于函数所需的参数量,
# 这⾥函数会出现报错
关键字参数
关键字参数的含义即允许函数调⽤时传⼊⼀个或多个包含参数名的参数,这样即使传⼊参数时参数放置位置改变了也不影响(因为这些被命名的参数并不能归到默认参数或者位置参数中,与可变参数类似,都是未被函数直接匹配的参数),这些未被匹配的关键字参数在函数内部会被⾃动组装为⼀个dict(字典)。
设置关键字参数时在参数前加**号,当然在调⽤包含关键字参数的函数时也是可以不传⼊的。
例:
def print_it5(**kwargs):
print(kwargs)
print_it5(word1 ='hello', word2 ='Mary')
# 也可以这样
dic ={'word1':'hello','word2':'Mary'}
print_it5(**dic)
# 上⾯两种⽅式得到的结果都是:{'word1':'hello','word2':'Mary'}
# 可以看出函数从关键字参数中获取到的是⼀个字典,后续函数可以对这个字典中的内容进⾏处理
# 同样的类似⼀个*的可变参数的解包功能,**也能发挥解包功能:
def print_it6(word1, word2):
print(word1 +', '+ word2)
dic ={'word1':'hello','word2':'Mary'}
print_it6(**dic)
# 这⾥**发挥解包功能将word1赋值给对应的word1,word2赋值给对应的word2,但要
# 注意这⾥传⼊的字典和函数中的参数名必须是⼀样的,否则是识别不了的(因为python字典中是没有顺序的)。
# 当然,函数创建时也可以使⽤默认参数,如 def print_it6(word1, word2='nihao')
# 同时传⼊的字典的元素数量要和所需要的函数参数数量⼀致,否则也会报错
# 但是这种情况可以通过在创建函数时加⼀个关键字参数来解决,如def print_it6(word1, word2, word3)
命名关键字参数
命名关键字参数是⼀种较简单的关键字参数类型,其与关键字参数的区别就是传⼊的关键字参数的参数名是确定的,在传⼊的时候必须要和参数名⼀起传⼊(不是按位置顺序直接读取的),且这些参数名都必须要有参数传⼊才⾏,要不然就必须在⼀开始设置默认的关键字参数的参数值。
设置命名关键字参数的标志是有⼀个*号作为分隔符,*号之后的参数除了可变参数外就是命名关键字参数了。如果函数创建时已包含了可变参数,那么在可变参数后可以直接加⼊命名关键字参数,当然此处也仅可以使⽤命名关键字参数,必须在函数调⽤时同时传⼊参数名和参数值。
例:
def print_it7(name, coutry,*, height, hobby):
print(name, country, height, hobby)
print_it7('Jack','China', height ='1.70', hobby ='play games')
# 执⾏结果为:Jack China 1.70 play games
# 如果命名关键字参数中也想设置默认值,只要在定义时定义即可
# 如:def print_it7(name, coutry,*, height ='1.75', hobby)
本⽂将python函数使⽤中的⼏种参数的使⽤和意义进⾏了解释,例⼦⽐较多,但是使⽤的⽅法都在例⼦中了,希望帮助到某些⼈。
参考:
参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。