2.1 Python函数-函数参数

一、形参&实参

  • 形参 指的是出现在函数定义中的参数名称;
  • 实参 指的是在调用函数时实际传入的参数值;
  • 形参定义了一个函数能接受何种类型的实参
  • 形参 可以在函数内被作为“变量”使用,也叫“形参变量”。
  • 实参 可以是任何的表达式,最终算出的值会被赋值给函数体中对应的形参变量。(变量、具体的值、算数表达式、字符串表达式、函数调用等都可以作为实参的参数)

二、参数类型

在这里插入图片描述

2.1 实参类型

实参是在调用函数时传入的值。实参只有两种:

  • 位置参数
  • 关键字参数

位置参数之前不能出现关键字参数,关键字参数之后也不能出现位置参数。

在为函数传入实参时,要遵循的顺序由左到右是:

  • 位置参数在前
  • 关键字参数在后。

2.1.1 位置参数

实参的 位置参数 只能出现在参数列表左侧部分,之前不能有 关键字参数

位置参数 有以下两种书写方式:

function1(3, 5)
function1(*(3, 5))

上面 function1() 函数调用中的 35 都是位置参数,是位置参数的两种写法。

2.1.2 关键字参数

实参的 关键字参数 只能出现在 位置参数 之后。

关键字参数 有以下两种书写方式:

function2(a=3, b=5)
function2(**{'a': 3, 'b': 5))

上面 function2() 函数调用中的 35 都是关键字,是关键字参数的两种写法。

2.2 形参类型

形参是出现在函数定义中的参数名称,有以下5种:

  • 仅限位置1参数(positional-only)
  • 位置或关键字参数(positional-or-keyword)
  • 仅限关键字参数(keyword-only)
  • 可变位置参数(var-positional)
  • 可变关键字参数(var-keyword)

且,仅限位置参数、位置或关键字参数、仅限关键字参数 还分为有缺省值的没有缺省值的;可变位置参数、可变关键字参数 不存在缺省值这一说法。
在这里插入图片描述

在定义形参时,要遵循的顺序由左到右是:

  • 无缺省值的仅限位置参数
  • 有缺省值的仅限位置参数 或 无缺省值的位置或关键字参数
  • 有缺省值的位置或关键字参数
  • 仅限关键字参数(有无缺省值都可) 或 可变位置参数
  • 可变关键词参数

2.2.1 仅限位置参数

仅限位置参数的形参,在实参中只能通过位置参数的方式传入值。

在形参列表中通过 / 字符,定义仅限位置参数。/ 左侧的形参均为 仅限位置参数

下面 function1() 函数中的 pos_only1pos_only2 均是仅限位置参数:

def function1(pos_only1, pos_only2, /, positional_or_keyword):
    pass
#下面 有缺省值的 仅限位置参数, 之后的 位置或关键字参数(positional_or_keyword) 应该也要 有缺省值,否则报错
def function1(posonly1, posonly2=None, /, positional_or_keyword=None):
    pass

Python 中 pass 是空的占位语句。不做任何事情,是为了保持程序结构的完整性。

2.2.2 位置或关键字参数

位置或关键字参数的形参,在实参中可以通过位置参数传入值,也可以通过关键字参数传入值,两种方式任选其一均可。

如果在实参中通过关键字参数传入值,之后的实参也应该通过关键字传入值。因为在实参中关键字参数之后不允许出现位置参数。如有疑问请参阅 实参类型

下面 function2() 函数中的 pos_or_kw1pos_or_kw2 均是位置或关键字参数:

def function2(pos_or_kw1, pos_or_kw2=None):
    pass
#下面 有缺省值的 位置或关键字参数(pos_or_kw1) 之后出现的 位置或关键字参数(pos_or_kw2) 也要有缺省值,否则报错
def function2(posonly1, posonly2=None, /, pos_or_kw1=None, pos_or_kw2=None):
    pass

2.2.3 仅限关键字参数

仅限关键字参数的形参,在实参中只能通过关键字参数的方式传入值。

在形参列表中通过 * 字符,定义仅限关键字参数。仅限关键字参数,出现在 * 的右侧 。

下面 function3() 函数中的 kw_only1kw_only2 均是仅限位置参数:

def function3(arg, *, kw_only1, kw_only2):
    pass
# 仅限关键字参数(kw_only1和kw_only2)中,有无缺省值 其形参顺序不会受影响,也不受其他参数有无缺省值的影响。
# 有缺省值的 可以在 无缺省值 的前面,无缺省值的 也可以在 有缺省值的 前面。
def function3(arg, *, kw_only1, kw_only2=None):
    pass
def function3(arg, *, kw_only1=None, kw_only2):
    pass
def function3(arg, *, kw_only1=None, kw_only2=None):
    pass

2.2.4 可变位置参数

可变位置参数的形参,在实参中只能通过位置参数的方式传入值,且不限制位置参数的数量
“可变位置参数”会以 元组(tuple) 类型接收参数值。经常使用args作为“可变位置参数”的参数名。

“可变位置参数” 是指实参中“位置参数”的数量是可变的,可以传入零个或多个"位置参数"。

在形参列表中通过在 形参名称前加缀* 来定义“可变位置参数。”

在一个函数的形参列表中,只能出现一个 * 。所以只能有一个可变位置参数,且可变位置参数与仅限关键字参数不能共存,因为仅限关键字参数也是通过 * 定义的。

下面 function4() 函数中的 args 就是“可变位置参数”:

def function4(*args, **kwargs):
    pass

2.2.5 可变关键字参数

可变关键字参数的形参,在实参中只能通过关键字参数的方式传入值,且不限制关键字参数的数量
“可变关键字参数”会以 字典(dict) 类型接收参数值。经常使用kwargs作为“可变关键字参数”的参数名。

“可变关键字参数” 是指实参中“关键字参数”的数量是可变的,可以传入零个或多个关键字参数。

在形参列表中通过在 形参名称前加缀** 来定义可变关键字参数。

在一个函数的形参列表中,只能出现一个 ** 。所以只能有一个“可变关键字参数”。

下面 function5() 函数中的 kwargs 就是可变位置参数:

def function5(*args, **kwargs):
    pass

2.3 参数类型举例

下面两个例子,所有形参都是没有缺省值的。

例一:

  • 形参列表由左到右分别为:仅限位置参数、位置或关键字参数、仅限关键字参数、可变关键字参数。
  • 实参列表由左到右分别为:位置参数、关键字参数。
    在这里插入图片描述
    三次 fun1() 函数调用的程序执行结果都如下图一样:
    在这里插入图片描述

例二:

  • 形参列表由左到右分别为:仅限位置参数、位置或关键字参数、可变位置字参数、可变关键字参数。
  • 实参列表由左到右分别为:位置参数、关键字参数。
    在这里插入图片描述
    四次 fun2() 函数调用的程序执行结果都如下图一样:
    在这里插入图片描述

三、参数的数据类型

要区分参数的数据类型参数类型的区别,不要混淆!

  • 参数的数据类型:指的是形参与实参需要满足什么数据类型。比如:int(整数)、float(浮点数)、str(字符串)、list(列表)、dict(字典)等数据类型。请参阅:Python基础-数据类型 了解更多的更详细的数据类型。

  • 参数类型:指的是实参的两种类型,位置参数、关键字参数;以及形参的五种类型,仅限位置参数、位置或关键字参数、仅限关键字参数、可变位置参数、可变关键字参数。

由本文中的 形参&实参 可知,形参定义了一个函数能接受何种类型的实参
形参不仅可以定义函数能接受何种参数类型的实参,还可以定义函数能接受何种数据类型的实参。

形参定义实参的数据类型时,只是推荐实参给出什么样的数据类型,并不强制,如果实参给出的数据类型,不满足形参定义的数据类型,不会报错。
但为了程序的严谨性,给出的实参要尽量满足形参定义的数据类型。

参数的数据类型定义,是在形参种完成定义的,只需在形参名称后面 给出一个 : 并给出 数据类型 即可。
下面函数 function6() 中的 ab 就定义了“参数的数据类型”,并且 b还给出了缺省值。

def function6(a: int, b: str = 10):
    pass

参考资料(如有侵权,请联系作者删除内容):


  1. 具体说明请参考:Python 3.8-新的特性-仅限位置形参 ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值