更多课程 选择中心


Python培训

400-996-5531

Python自定义函数的参数解读


近期有朋友提问,在学习Python的自定义函数时有些费解,主要是不能透彻的理解自定义函数中的可变参数和关键字参数,它们的区别和应用场景是什么?那在此公众号跟大家聊聊Python中自定义函数的那点常识。

一、自定义函数的语法

自定义函数,顾名思义就是根据用户自己的需求做一个DIY,通过这个DIY就可以解决特定场景下的问题了。同时,这个被各种表达式封装的DIY还可以重复利用,从而可以避免代码的大量重复,我举个例子也许就能明白了。首先,我们来看一下构造自定义函数的语法:

# 自定义函数语法def func_name(parameters):

expression return(res)

def为创建自定义函数的关键字,即告诉Python,我要准备构造函数了;

func_name是用户为自己的函数起的一个名称,最好能够做到见名如见意;

parameters为该函数需要使用到的形参,当然你也可以不使用参数;

expression就是你的函数实体了,即需要这个实体做什么;

return也是个关键字,目的是将最终的结果进行输出;

例子:

小明今天刚上完等差数列相关的知识点,晚上老师布置了关于求解等差数列an = 3 + 5n的前5项、前10项、前50项和前100项的和。换着是现在,你完全可以通过Python写一段循环完成累加,具体如下:

s = 0i = 1while(i<=N):

s += 3 + 5*i

i += 1print(s)

基于上面的这个循环,只需要将N换成5、10、50和100跑4次就可以得到结果。但你会发现,每次运行的时候都是这7行代码一起运行,会显得不是那么简介而高大上。如果,你把这个7行代码封装到一个函数体内,那将是一劳永逸。具体看下方的代码:

# 等差数列的前N项和def sn(N): s = 0 i = 1 while(i <= N):

s += 3 + 5*i

i += 1 return(s)# 求和sn(5)

sn(10)

sn(50)

sn(100)

求等差数列的任意前N项和的话,我只需要调用这个自定义函数sn,然后将参数N换着不同的值即可。

从上面的例子我们也确实感受到了函数的威力,既可以完成特定的需求,又可以将这个封装的函数随时进行重复调用,避免了多行代码的重复编写与运行。

自定义函数的参数

自定义函数有个parameters参数,如上面讲的sn函数,其中的N就叫参数,每次运行函数的时候,只需要将一个实参传递给这个形参N即可。在Python中,有关自定义函数的参数一共有4种定义,他们分别是:

必选参数

默认参数

可变参数

关键字参数

接下来我们对这四种参数进行举例说明。

1、必选参数

必选参数,顾名思义就是当你在调用一个自定义函数时,必选给函数中的一些参数赋值,否则程序将会报错,并提醒用户“缺少一些必选的位置参数”。就拿上面的sn函数,如果不给该函数的参数N提供一个值,结果就是这样的:

def sn(N):

s = 0

i = 1

while(i <= N):

s += 3 + 5*i

i += 1

return(s)# 求和sn()

2、默认参数

我们还是以老师布置给小明的等差数列为例,小明就在想,这次老师布置的是an=3+5n的前N项和,那么下次的作业很可能就不是这个通项公式了,但有一条不变的规则就是通项公式中的3和5会变。那在自定义函数的时候,只需要再增加两个参数分别代表3和5。

def sn(a, d, N = 10):

s = 0

i = 1

while(i <= N):

s += a + d*i

i += 1

return(s)

上面这个自定义函数一共有3个参数,其中a和d就是必须参数,因为在函数定义时并没有给他一个初始值,而N参数就是一个默认参数,并假定初始值为10,即默认求解通项公式的前10项和。如果你需要改变前10项和的话,只需要给参数N重新赋值即可,举例如下:

# 求解通项公式为an=8+5n的前100项和sn(a = 8, d = 5, N = 100)

3、可变参数

上面讲解的必选参数和默认参数,都是在已知这个自定义函数需要多少个形参的情况下构建的。那如果我不确定该给这个函数传入多少个参数的时候,该怎样自定义函数呢?这么说可能有点抽象,我们举个对比的例子来说明。小明的弟弟小亮刚读一年级,老师布置了一些关于两个数的求和运算,针对这个问题,我们可以构建如下的自定义函数:

def add(a,b):

s = sum([a,b]) return(s)# 求和add(10,13)

这个问题很简单的利用自定义函数就可以解决了。但要求比较严格的爸爸对小亮的智商提出了挑战,即不单单是两个数之和,还可能是三个数、四个数、五个数的和...那这个时候,是不确定老爸会要求计算几个数的和,这个add函数似乎就不能使用了。好在Python给自定义函数提供了可变参数,目的就是解决这类问题的。举例如下:

def adds(*args):

s = sum(args) return(s)# 求和adds(10,13,7,8,2)

看见了吧,这个可变参数就可以接受任意多个数值,需要注意的是,用一颗星“*”放在参数的前面,就代表了该参数为可变参数。一个可变参数之所以可以接受多个数值,起背后的原理是将这些输入的数值进行了一次捆绑,即组装到元组中。看下面这个打印的例子就能明白了:

def adds(*args):

print(args)# 打印参数值adds(10,13,7,8,2)

4、关键字参数

虽然可变参数可以接受多个实参,但其背后运行的原理是将这些实参存到到一个元组中,然后将捆绑的元素传递给表达式,这是一个捆绑打包的概念,但无法实现某个实参指定给某个形参。那你会问,我用必选参数就好啦,问题是当你又不确定该给自定义函数设置多少个形参,那必选参数是不是就不能使用了。所以就诞生了关键字参数,我们仍然举例说明这个关键字参数的使用:

如果用户注册某个平台,手机号及出生日期为必填,其他信息可以选填。那可以根据用户填写的内容来判断其年龄、性别等,这里的选填项就可以使用关键字参数了,因为你不知道用户回填多少项信息:

def info(tel, birthday, **args):

import re

user = {}

user['tel'] = str(tel) if args.get('id') == None:

user['birthday']=''.join(re.findall('\d+',str(birthday))) else:

user['birthday']=str(args.get('id'))[6:14]

user['name'] = args.setdefault('name',None)

user['gender'] = args.setdefault('gender',0)

user['income'] = args.setdefault('income',5000)

user['edu'] = args.setdefault('edu','大专')

print(user)

这段代码的含义是,用户注册时必需填写手机号和出生日期,如果除此还填写了身份证号,则以身份证号里面的出生日期为准;如果用户没有填写姓名,则为空(None表示),否则以填写的内容为准;如果用户没有填写性别,则默认为女性(0表示),否则以填写的为准;如果用户没有填写收入状况,则默认为5000,否则以填写的为准;如果用户没有填写学历,则默认为大专,否则以填写内容为准....以此类推,可以填写其他更多的信息,而且还可以将实参与形参一一配对。

需要注意的是,用两颗星“*”放在参数的前面,就表示该参数为关键字参数。之所以能够将形参与实参对应,是因为传递给函数的实参最终以字典的形式捆绑起来,而字典就是用键值对组成的。同样,我们通过打印的方式来看看字典式的捆绑:

def info(**args):

print(args)# 打印参数值info(name = 'Sim', age = 28, gender = '男')

OK,到此,关于Pyhton自定义函数的四种参数就介绍这些,希望对各位看官有帮助。最后需要说明一点的是,如果你的自定义函数写的非常复杂而庞大,可能会同时使用到这四种参数,则四种参数就必须按照这样的顺序排列:必须参数、默认参数、可变参数和关键字参数。

关于本文的文章内容和脚本可以从下面的,便于您的操作和保存:

链接: https://pan.baidu.com/s/1gfvjfJ9 密码: g7y6

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:python数据分析之pandas学习笔记
下一篇:Python的编码解码问题

2021年Python全套免费视频教程在哪里?

Python编程学习路线

Python最高有几级?

人工智能与语音遥控的区别?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省