Python之函数参数细讲
创始人
2024-05-31 14:14:21
0

文章目录

  • 前言
  • 一、了解形式参数和实际参数
    • 1. 通过作用理解
    • 2. 通过一个比喻来理解形式参数和实际参数
  • 二、位置参数
    • 1. 数量必须与定义时一致
    • 2. 位置必须与定义时一致
  • 三、关键字参数
  • 四、为参数设置默认值
  • 五、可变参数
    • 1. *parameter
    • 2. **parameter
  • 总结


前言

  在调用函数时,大多数情况下,主调函数和被调函数之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。函数参数在定义函数时放在函数名称的后面的一对小括号中,对于初学者来说,函数参数一般是难点。接下来针对参数展开详细介绍。


一、了解形式参数和实际参数

  在使用参数时,经常会用到形式参数实际参数,二者都叫做参数,它们的区别将先通过形式参数与实际参数的作用来进行讲解,再通过一个比喻和实例进行深入探讨。

1. 通过作用理解

形式参数和实际参数在作用上的区别如下:

  • 形式参数:在定义函数时,函数名后面括号中的参数为 “形式参数”。
  • 实际参数:在调用一个函数时,函数名后面括号中的参数为 “实际参数”,也就是将函数的调用者提供给函数的参数称为实际参数。通过下图可以更好的理解。
    在这里插入图片描述

  根据实际参数的类型不同,可以分为将实际参数的值传递给形式参数将实际参数的引用传递给形式参数两种情况。其中,当实际参数为不可变对象时,进行值传递当实际参数为可变对象时,进行的是引用传递。实际上,值传递和引用传递的基本区别就是,进行值传递后,改变形式参数的值,实际参数的值不变;而进行引用传递后,改变形式参数的值,实际参数的值也一同改变
  例如,定义一个名称为 function 的函数,然后为 function() 函数传递一个字符串类型的变量作为参数(代表值传递),并在函数调用前后分别输出该字符串变量,再为 function() 函数传递一个列表类型的变量作为参数(代表引用传递),并在函数调用前后分别输出该列表。代码如下:

# 定义函数
def sentence(place):print('原值:', place)place += place
# 调用函数
print('==========值传递==========')
a = '丽江'
print('函数调用前:', a)
sentence(a)  # 采用不可变对象 —— 字符串
print('函数调用后:', a)
print('==========引用传递==========')
list1 = ['昆明', '长沙', '西安']
print('函数调用前:', list1)
sentence(list1)  # 采用可变对象 —— 列表
print('函数调用后:', list1)

上面代码的执行结果如下:

==========值传递==========
函数调用前: 丽江
原值: 丽江
函数调用后: 丽江
==========引用传递==========
函数调用前: ['昆明', '长沙', '西安']
原值: ['昆明', '长沙', '西安']
函数调用后: ['昆明', '长沙', '西安', '昆明', '长沙', '西安']

  从上面的执行结果可以看出,在进行值传递时,改变形式参数的值后,实际参数的值不改变在进行引用传递时,改变形式参数的值后,实际参数的值也发生改变

2. 通过一个比喻来理解形式参数和实际参数

  函数定义时参数列表中的参数就是形式参数,而函数调用时传递进来的参数就是实际参数。就像剧本选主角一样,剧本的角色相当于形式参数,而演角色的演员就相当于实际参数。


二、位置参数

  位置参数也称必备参数,是必须按照正确的顺序传到函数中,即调用时的数量和位置必须和定义时是一样的

1. 数量必须与定义时一致

  在调用函数时,指定的实际参数的数量必须与形式参数的数量一致,否则将抛出 TypeError 异常,提示缺少必要的位置参数。如下图代码所示:

在这里插入图片描述

2. 位置必须与定义时一致

在调用函数时,指定的实际参数的位置必须与形式参数的位置一致,否则将产生以下两种结果。

  • 抛出 TypeError 异常。抛出异常的情况主要是因为实际参数的类型与形式参数的类型不一致,并且在函数中,这两种类型还不能正常转换。 例如下图代码所示:

在这里插入图片描述

  • 产生的结果与预期不符。在调用函数时,如果指定的实际参数与形式参数的位置不一致,但是它们的数据类型一致,那么就不会抛出异常,而是产生结果与预期不符的问题。例如下图代码所示:

在这里插入图片描述

说明由于调用函数时,传递的实际参数的位置与形式参数的位置不一致时,并不会总是抛出异常,所以在调用函数时一定要确定好位置,否则会产生 Bug,还不容易被发现。


三、关键字参数

  关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与形式参数的位置完全一致。只要将参数名写正确即可。这样可以避免用户需要牢记参数位置的麻烦,使得函数的调用和参数传递更加灵活方便。比如下图代码所示:

在这里插入图片描述


四、为参数设置默认值

  调用函数时,如果漏掉忘了指定某个参数则将会抛出异常,为了解决这个问题,我们可以为参数设置默认值,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,则直接使用定义函数时设置的默认值。定义带有默认值参数的语法格式如下:

def functionname(..., [parameter1 = defaultvalue1]):[functionbody]

参数说明

  • functionname:函数名称,在调用函数时使用。函数名称的命名应遵循标识符命名规则,如果有多个单词,每个单词用下划线_连接。
  • parameter1 = defaultvalue1:可选参数,用于指定向函数中传递的参数,并且为该参数设置默认值为 defaultvalue1。
  • functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。

代码示例如下图所示:

在这里插入图片描述

说明在传参时,如果没有指定某个参数值,则使用形式参数中该参数的默认值;如果指定了参数值,则会覆盖默认值,使用指定的参数值;比如下图代码所示。

在这里插入图片描述

注意:在定义函数时,指定默认的形式参数必须在所有参数的最后,否则将产生语法错误。比如下图所示。

在这里插入图片描述

说明定义函数时,为形式参数设置默认值要牢记一点:默认参数必须指向不可变对象


五、可变参数

  在Python中,还可以定义可变参数。可变参数也称为不定长参数,即传入函数中的实际参数可以是任意多个。定义可变参数时,主要有两种形式:一种是 *parameter,另一种是 **parameter

1. *parameter

  这种形式表示接收任意多个实际参数并将其放到一个元组中。例如,定义一个函数,让其可以接收任意多个实际参数,代码如下图所示:

在这里插入图片描述

如果想要使用一个已经存在的列表作为函数的可变参数,可以在列表的名称前加 “ * ”。例如下图代码所示:

在这里插入图片描述

2. **parameter

  这种形式表示接收任意多个类似于关键字参数一样显式赋值的实际参数,并将其放到一个字典中。例如,定义一个函数,让其可以接收任意多个显式赋值的实际参数,代码如下图所示:

在这里插入图片描述

如果想要使用一个已经存在的字典作为函数的可变参数,可以在字典的名称前加 “ ** ”。例如下图代码所示:

在这里插入图片描述


总结

  参数是学习函数必须要精通的重要一环。对初学者来说,默认值参数是易错点可变参数是难点每个参数都是要掌握的重点

相关内容

热门资讯

曾经的爱 曾经的爱我自己来回答我可能是真的喜欢她但是,每次不知道为什么看到她就一中伤心的感觉不知道谁能告诉我这...
小公鸡不见偷偷的跟在小鸭子后面... 小公鸡不见偷偷的跟在小鸭子后面也下了水偷偷地这个词加上这个词的好处是小公鸡不见偷偷的跟在小鸭子后面也...
开紫钻一年多少钱? 开紫钻一年多少钱?我卖180 ,一年大概120 玩旋舞特适合用财富通开8.8折一共是211
关于韩剧 关于韩剧灰姑娘的姐姐吧,不错。还有一枝梅。狗与狼的时间,都好看。
谁小泰罗的电影? 谁小泰罗的电影?小泰罗奥特曼的电影? 你说的这个是奥特曼剧场版《奥特物语》网上搜一下就能找到
电纸书和mp4功能一样吗,买电... 电纸书和mp4功能一样吗,买电子书好还是mp4好啊?推荐一款吧?谢谢看你具体干什么了,如果喜欢看电子...
关于ff14的装备出售问题! ... 关于ff14的装备出售问题! 为什么好多装备无法在市场出售?紫装绿装不说,为什么普通白装也不能关于f...
为什么佛法的争论那么激烈? 为什么佛法的争论那么激烈?因为他们没有一个统一的经典,来指导他们,告诉他们真理. 不然他们就不会拜那...
为什么有的调皮美女不喜欢调皮男... 为什么有的调皮美女不喜欢调皮男人,不稳重没有安全感。她喜欢成熟有男人味安全感男人?大部分女人都喜欢成...
哪些男明星男人味儿彰显,成熟的... 哪些男明星男人味儿彰显,成熟的魅力撩动心弦让你沦陷?朱一龙,张若昀,李钟硕,李承铉,靳东等,这些男明...
天书奇谈里皇城里的盘龙石柱在哪... 天书奇谈里皇城里的盘龙石柱在哪阿、?点左上角的【寻】会出来一个框,里面有蟠龙石柱,点击左键会自动寻找...
50年前,长沙镖子岭。老烟头把... 50年前,长沙镖子岭。老烟头把他的旱烟在地上敲了敲:“下不下去喃?”独眼的小伙子说:“不去,电视剧5...
如何评价演员袁姗姗,她是不是真... 如何评价演员袁姗姗,她是不是真的不适合娱乐圈?因人而异吧,我个人还是比较喜欢她的,虽然长得确实不漂亮...
各路大神? 各路大神?既然可以发送、接受文件,可以确认电脑蓝牙驱动正常,可以连接手机蓝牙。接下来要确认手机有蓝牙...
三国演义诸葛亮的资料 三国演义诸葛亮的资料三国演义诸葛亮的资料去看史书就知道了诸葛亮子孔明,号卧龙,南阳人,著作出师表,隆...
如何隐藏一个硬盘分区,只能我自... 如何隐藏一个硬盘分区,只能我自己能进,别人都看不到。用patition magic 隐藏分区
韩剧名字其中两个字是爱情 韩剧名字其中两个字是爱情没关系,是爱情啊--赵寅成,孔孝真最佳爱情--车胜元,孔孝真爱情能用钱买吗-...
谁炒股一年能挣百万 谁炒股一年能挣百万规定时间 数量 你以为在算加减法 能有正解答案 股市是有时长时短 时多时少 这是没...
一个你不爱的人 一个你不爱的人面拒绝 呵呵,女的都出来了,这问题到是比较符合你们!其他的怎么女的回答的那么少??
有人有曲的成语 有人有曲的成语曲尽人情【读音】qū jìn rén qíng【释义】委婉周到地把人之常情或世态充分体...