目录
- python函数形参
- 位置参数
- 关键字参数
- 默认参数
- 非关键字可变长参数(元组)
Python函数形参
函数的参数分类:
- 形式参数和实际参数
- 关键字参数
- 可变类型参数和不可变类型参数
- 位置参数
- 可变长度参数
- 默认值参数
位置参数
必须按照准确顺序将函数调用中的实参传递给函数定义中相应的形参。
def user(name, age): print("{} is {} years old".format(name,age)) # format()方法是寻找字符串中{}标识,然后把参数依次赋值给字符串中 user("Tom", 10) user(10, "Tom") # 输出 Tom is 10 years old 10 is Tom years old
关键字参数
仅针对函数的调用,通过"参数名=参数值"的方式,可以直接在实参中将名称和值关联起来。这样就不需要根据形参名字来区分参数了,即使不按照顺序,解释器也可以通过给出的关键字来匹配参数的值。
1:单个关键字参数
def user(name, age): print("{} is {} years old".format(name, age)) user("Tom", 10) user(age=10, name="Tom编程客栈") # 即使实参的位置不是按照形参位置,也能匹配到相对应参数的值。 # 输出: Tom is 10 years old Tom is 10 years old
2:可变长度关键字参数,即字典参数。可以传递多个关键字参数
- 如何使用:在定义函数的形参中,使用带有两个星号的形参,此时在调用函数时就可以传递多个关键字参数,这些关键字参数都会传递给带有两个星号的形参中
- 使用场景:在预先不知道传递给函数的会是什么信息的情况下
def users(f_name, l_name, **user_info): prinjst("first name: " + f_name) print("last name: " + l_name) for arg_name, arg_value in user_info.items(): print("{}:{}".format(arg_name, arg_value)) users("tom", "leaf", location="here", height=150, length=80 ) # 输出 first name: tom last name: leaf location:here height:150 length:80
默认参数
编写函数时形参指定了默认值的参数,在调用函数中给形参提供了实js参时,优先使用调用函数时提供的实参,如果调用函数时没有提供实参值,使用函数定义中的默认值
Tip:关键字参数必须放在所android有位置参数的右边。如果放在左边,调用函数时传递的实参会默认从左往右进行关联,很有可能用户这个实参是传递给位置参数的,但是却被左边的关键字参数拦截接收,那么关键字参数右边的位置参数就没有实参传递。此时就会报错。
def user(name, age=12): print("{} is {} years old".format(name, age)) user("Tom", 10) # age参数传递了编程实参值,那么优先使用传递的实参值 user("Tom") user(name="Tom") user(age=10, name="Tom") # 两个参数都是关键字参数,那么参数位置颠倒也可以正确匹配到 # 输出: Tom is 10 years old Tom is 12 years old Tom is 12 years old Tom is 10 years old
非关键字可变长参数(元组)
- 如何使用:在定义函数的形参中,使用带有一个星号的形参,此时在调用函数时就可以传递多个参数,这些参数都会被封装到一个元组中,传递给函数定义中这个带有一个星号的形参
- 使用场景:在预先不知道传递给函数的会是什么信息的情况下
def users(*names): print(str(names)) for name in names: print(name) users("tech") users("tom", "test", "amy") # 输出 tech tach ('tom','tets','amy') tom test amy
Tip:如果要让函数接受不同类型的实参,就必须在函数定义中将接纳任意数量实参的形参放在最后,这样Python会先匹配位置实参和关键字实参,最后再将余下的实参都收集到最后一个元组实参中。
到此这篇关于关于Python中函数的几种形参的文章就介绍到这了,更多相关Python函数形参内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论