| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python学习笔记--参数传递 -> 正文阅读 |
|
[Python知识库]python学习笔记--参数传递 |
调用函数时,主调函数和被调用函数之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接受的数据进行具体的操作处理。 一、了解形式参数和实际参数使用函数时,常会看到形式参数和实际参数,都被称作为参数。 1.通过作用理解形式参数:在定义函数时,函数名后面括号中的参数为”形式参数“。 实际参数:在调用一个参数时,函数名后面括号中的参数为”实际参数“。也就是将函数的调用者提供给函数的参数成为实际参数,调用实际的值。 根据设计的参数的类型不同,可以分为两种情况:当实际参数为不可变对象时,进行的是值传递;当实际参数为可变对象时,进行的是引用传递。 值传递后,改变形式参数的值,实际参数不变(例如字符串); 引用传递后,改变形式参数的值,实际参数的值也一同改变(例如列表)。 2.通过一个比喻来理解形式参数和实际参数函数定义是参数列表中的参数就是形式参数,而函数调用时传递进来的参数就是实际参数,就像剧本选主角一样,剧本的角色相当于形式参数,而演角色的演员就相当于实际参数。 例子:根据身高、体重计算BMI指数
其中,person、height和weight称为形式参数,而在调用BMI()函数时,需要输入的数据都是实际参数,在调用时,这些值将被传递给相应的形式参数 二、位置参数位置参数也称必备参数。必须按照正确的顺序将其传到其函数中,即调用时的数量和位置必须和定义时是一样的。 1.数量必须与定义时一致在调用函数时,指定的实际参数的数量必须与形式参数的数量一致,否则将抛出typeerror异常,提示缺少必要的位置参数。 例如,上例中
?少传递一个参数,就会报错“BMI()函数缺少一个必要的位置参数” 2.位置必须与定义时一致在调用函数时,指定的实际参数的位置必须与形式参数一致,否则将产生 抛出TypeError的异常信息
或者产生的结果与预期不符,在调用函数时,尽管所传递的实际参数的位置与形式参数的位置不一致,但并不会出异常,因此这个Bug不容易被发现,要确定好位置。 在例子中就是体重(weigh)和身高(height)互换了,导致数据与预期不符
三、关键字参数关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与实际参数的位置完全一致。这样可以避免用户需要牢记参数位置的麻烦,使得函数的调用和参数传递更加灵活方便。 上例中可以如下:
这样虽然在指定实际参数时,顺序与定义函数时不一致,但是运行结果与预期是一致的。 四、为参数设置默认值调用函数时,如果没有指定某个参数,则将会抛出异常。为此,我们可以为参数设置默认值,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,可以直接使用定义函数时设置的默认值。定义带有默认值参数的函数的语法格式如下:
参数说明如下:
在定义函数时,指定默认的形式参数必须在所有参数的最后,否则将产生语法错误 例子:修改后的上例
然后调用BMI()函数,不指定person,如下:
执行结果如下:
在python中,可以使用“函数名.__defaults__”查看函数的默认值参数的当前值,其结果是一个元组。例如,显示上面定义的BMI()函数的默认值参数的当前值,可以使用“BMI.__default__”。 另外,使用可变对象作为函数参数的默认值时,多次调用可能会导致意料之外的情况,例如:
显示一下结果:
显然上述结果不是我们想要的,为了防止这种情况,最好使用None作为可变对象的默认值,此时还需要加上检查代码,如下:
显示一下结果:
定义函数时,为形式参数设置默认值要牢记一点:默认参数必须指定不可变对象。 五、可变参数在python中,还可以定义可变参数,可变参数也称不定长参数,即传入函数中的实际参数可以是零个、一个、两个到任意个。 定义可变参数时,主要有两种形式:一种*parameter:另一种是**parameter。下面分别进行介绍。 1.*parameter我的理解:遍历中把我搞糊涂的点,1.如果是已经被定义整合好的元组和列表,遍历的时括号内的元素,已经被整合好的元组和列表就是其中的一个元素2.如果是直接写在括号里的字符串则是散的,会挨个遍历,而“*”的作用就是把已经成整合好的元组和列表拆解散。 *parameter形式表示接受任意多个实际参数并将其放到一个元组中。 如果想要使用一个已经存在的列表最为函数的可变参数,可以在列表的名称前加“*”。 例子:
无论元组还是列表要遍历都要加上“*”
疑问: 01.? 例子:根据身高、体重计算BMI指数
2.**parameter**parameter形式表示接受任意多个类似关键字参数一样显显式赋值的实际参数,并将其放到一个字典中。例如,定义一个函数,让其可以接受任意多个显式赋值的实际参数,代码如下:
调用两次printsign()函数,代码如下:
疑问: 01.为什么“沂蒙”和“冷毅毅”这个字符串不用加""??? 执行结果如下:
如果想要使用一个已经存在的字典作为函数的可变参数,可以在字典的名称前加“**”。例如:
调用了之后,显示一下结果:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 3:22:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |