Python基础---初阶函数篇

认识函数

函数:就是已经封装好的,可以被重复利用的代码。每个函数都有独一无二的名字,知道函数名字以及函数调用所需要传递的参数后,我们就可以调用该函数。

自定义函数:我们还可以自定义函数,将某种功能封装在函数里面达到一次封装,多次重复调用的目的,极大的提高了我们的开发效率。

—其实我们之前接触的print(),input()就是函数,我们只要把数据给print()函数,它就能帮我们输出结果;同样的,input()能获取我们从键盘输入的值。
—这些都是我们Python内置的函数,我们直接调用即可,实际业务中更多是我们利用内置函数和我们自定义的函数来写出高性能的程序。

—接下来,我们一起来系统认识下函数到底是怎么一回事吧…

定义函数

Python中自定义函数的语法格式:

#定义函数
def 函数名():
函数体(即该函数的具体功能的代码/代码块)
#调用函数
函数名()

—比如,我们现在来定义一个函数它的功能是打印 “hello, world” 字符串。这样以后我们想打印 “hello, world” 就可以不用每次都print(“hello, world”),而是直接调用该函数就行

—下面是代码演示:

#定义一个叫做hello的函数,它的作用是打印"hello, world"字符串
def hello():
	print("hello, world")
	
#调用该函数
hello()

—让我们来看一下运行结果

在这里插入图片描述
—我们看到,输出面板给我们打印了"hello, world"字符串,这跟我们直接手动print(“hello, world”)效果是一样的。但是相当于是一劳永逸的效果,以后我们想print(“hello, world”)直接调用hello()函数即可。

—所以,我们再总结:函数就是用来封装某种功能代码的容器,我们想用该功能直接调用函数就行。

—我们回到该代码,注意到,我们刚才定义的这个函数名叫做 hello ,这个名字就是我们函数的名字。

关于我们函数名字的命名规则其实跟我们变量的命名规则是一样的

注意点:
1.函数必须是先定义,再调用,也就是我们要先定义好该函数后面才能使用,不然会报未定义错误
2.函数体的缩进必须一样
3.函数的基本使用: 函数名() #fun()
4.定义空函数:函数的内容不能为空,如果要定义空函数,加pass
def 函数名():
pass

函数参数

— 我们注意到我们注意到,我们刚定义的函数名字后面有一个括号,那么这个括号是用来干嘛的呢?
—这个其实就是我们写函数参数的位置

— 我们首先来思考一个问题,假如我们现在要写一个函数,它的功能是:实现加减乘除四则运算。
— 那么,既然要实现加减乘除的功能,它是不是首先得接受到我们的数据吧,比如我想计算 2 + 3 等于多少,我是不是的把 2 和 3这两个数给这个函数,这样它才能计算,最后把结果 5 给我。

—所以,怎么给呢?这就是通过函数参数来给。

#---格式---
def 函数名(形式参数/形参):
函数体(即该函数的具体功能的代码/代码块)

#调用函数
函数名(实际参数/实参)
  • 这里出现了两种参数类型,一种是形式参数,另一种实际参数,接下来我们一一来了解

形式参数—形参

—形式参数:打个比方,形式参数就是个"空壳子", 只是做个"形式"的数据,形式参数没有初始值只有当用户通过实际参数传递了数据,形式参数才会有数值。
—形式参数:通俗来说就是一个空容器,用来干嘛的?接收我们传递的数据,比如我想传给函数 2 和 3 这两个数字,那么,函数就得准备两个形式参数的容器,分别用来接收 2 和 3 这两个数据。

—说完了形参,接下来我们来聊聊实际参数。

实际参数—实参

— 实际参数:根据字面意思,就是实实在在的,有数据的参数
— 实际参数:就是我们调用时,要给函数传递的值,必须有实实在在的数据,而不是像形式参数那种空壳子。
—比如,我现在想向函数传递 2 和 3 这两个数据,那么我就在调用时,在括号里面直接填 2 和 3,用逗号隔开就行。函数就会用两个形式参数的容器来接这两个数据。

代码演示

—多说无益,我们直接上代码演示;
—比如,我们我们现在想写一个函数,它的功能是:实现两个数的相加

—首先:这个函数需要我们传递给函数两个数,那么我们就得设置两个实参跟形参

#定义一个函数,实现两个数的相加
def add(a, b):
	res = a + b
	print(res)

#调用该函数
add(2, 3)

—运行后,确实,输出窗口输出了5,证明这个简单的函数我们就完成啦

形参也有不同的类型,形参的类型决定了,我们该怎么写实际参数的格式
—下面我们来介绍几种实际参数的类型

必须参数—位置参数

  • 必须参数须要以正确的顺序传入函数,在传递的时候每一个实参与形参一定要一一对应.
  • 调用时的数量必须跟声明时一样,否则会报错(一个萝卜一个坑)
#定义一个函数,打印我的姓名,年龄,身高
def msg(name, age, height):
	print("我的名字是:", name, "我的年龄是:", age, "我的身高是:", height)

#调用该函数
msg('小白', 18, 180.0)

—像我们上面的代码一样,name, age, height这几个参数就是必须参数,它们是什么顺序,那么我们传数值时也应该按这个顺序,传数值时不能纂改顺序
—也就是按照name, age, height的顺序,我只能先写名字,再写年龄,最后写身高,不能更改。

默认参数

  • 在函数定义的时候,就已经写好了参数值,在后期调用函数的时候,就可以不进行传参,如果在调用函数的时候也将该参数进行传递,那么原本的参数值就会被覆盖.

—也就是说,默认参数就是我们在定义时,我们提前给我们的形式参数容器装了数值。

—如果我们在调用时没有给该形式参数传递数值,那么函数就会默认使用提前给的默认值。

–如果我们在调用该函数时,也给该形式参数传递了数值,那么我们新传递数值就会覆盖掉原有给的默认值。

—我们还是用代码来实际感受下,默认值到底怎么用的吧

比如,我们现在要设计一个函数,它用来计算圆的面积
分析:
1.圆的面积计算公式是 Π×半径的平方,那么我们如果每次如果都要传Π的值,因为每次我们计算时,Π基本是一样的。这显然不太方便。
2.这时,我们就可以把Π设置为默认参数,这样每次我们只要传递半径就行如果Π取值不一样我们就再给Π传值就行。
3.这样无疑对我们来说,或者对使用这个函数的人来说,明显是更友好的。

#定义计算圆的面积的函数
def area(r, pai=3.14):
	res = pai * r * r
	print(res)

#调用该函数
area(3)

—这样,当我们要计算某个圆的面积时,Π取值是3.14时,我们只要传递半径的数值给函数就行

如果,我们某次要计算某个圆的面积,但是要求Π取值3.1415,那么我们就可以传3.1415在本次调用中覆盖掉原有的默认值。

#本次计算要求Π = 3.1415,那么这时我们就要把3.1415传给pai在本次运算中覆盖掉原有的默认值
#调用该函数
area(3, 3.1415)

—补充一个特别注意的地方:

定义默认参数的时候,一定要注意: 默认参数一定要在必须参数后面,否则会报错
这很好理解,如果你默认参数在位置参数前面,那么解释器就无法判断你传的参数到底要不要给默认参数,所以会报错

—接下来我们介绍如果我们形参用的是位置参数,那么我们实际参数怎样可以不用管顺序来传参呢?

关键字参数—特殊的位置参数

就是指使用形式参数的名字来确认输入的参数值,不再需要与形参位置完全一致,只要将参数名写正确
(就是我们在函数传递实参的时候,可以通过参数名指定)

在传递参数时
格式:
参数名 = 参数值

关键字与其它参数一起出现的时候,关键字参数必须在最后,传递的参数,必须是除了位置参数外的其它参数

—上代码!!!

#定义一个函数,打印我的姓名,年龄,身高
def msg(name, age, height):
	print("我的名字是:", name, "我的年龄是:", age, "我的身高是:", height)

#调用该函数
msg(age=18, name='小白', height=180.0)

—大概就是这个意思,接下来我们来看下个参数。

可变参数—不定长参数

可变参数:一个形参可以接受多个形式参数值(给的形式参数个数可变)

单星号可变参数

  • 在参数名前面加上一个*,该参数就是可变参数,它可以接收多个参数值,也可以没有.该参数接收到的参数值之后,会将值保存到元组当中。
#定义一个函数,打印我的姓名,年龄
def msg(name, *age):
	print("我的名字是:", name, "我的年龄是:", age)
	print(age)
#调用该函数
msg('小白', 13, 12, 14, 18)

— 运行结果

在这里插入图片描述

双星号可变参数

  • 在参数名前面加上一个**,该参数也是可变参数,它可以接收多个参数值,也可以没有.该参数接收到的参数值之后,会将值保存到字典
    当中.传递参数的时候一定要注意,要使用(参数名=参数值)进行传递.

— 保存到字典中的参数名就是字典中的键(key),参数值就是字典中的值(value)

—上代码瞅瞅~

#定义一个函数,打印我的姓名,年龄
def msg(name, **age):
	print("我的名字是:", name, "年龄是:", age)
	print(age)
#调用该函数
msg('小白', 小明=18, 小白=17)

—运行结果

在这里插入图片描述

函数返回值

我们来思考个问题,为什么我们函数要返回值,像我们之前计算加法的函数,我们直接输出结果不行么?

在这里插入图片描述

个人认为有下面原因:
1.我们输出的结果是直接输出到显示器,而且输出的数据是只能读,我们没办法拿来用
2.实际解决问题的过程,我们要拿到函数的输出结果,并做相关处理。
3.我们和函数应该是双向的,而不是单向的。我们给函数传参相当于我们与函数的信息交流,而函数的返回值则是函数给我们传递信息。

  • 大致过程如下:
    函数 = 做一件事
    函数代码 = 做事的过程
    函数返回值 = 做事的结果---->把你的结果返回出去,提交出去

在这里插入图片描述

函数的返回值我们可以用一个变量来接: 变量 = 函数名(实际参数)

—比如:我们现在再来写一个代码

编写一个函数,这个函数的功能是:实现两个数的相加,并且函数返回结果

#定义一个函数,实现两个数的相加,并且返回结果
def add(a, b):
	return a + b

#调用该函数,并且用一个变量来接受函数的返回值
res = add(2, 3)
print("res =", res)

—代码的运行结果如下:

在这里插入图片描述

注意:
1.在函数中没有定义return的时候,打印时函数时会输出None,表示没有返回值
2.函数的返回值可以有多个,值与值直接用逗号隔开
3.一个函数可以多个return,但是只会返回一个,返回之后函数停止
4.返回的类型可以是数值,列表,元素,集合,字典,函数
5.数量是不限的,可以返回多个值,中间用逗号隔开,得到的数据为元组类型

获取文档字符串

其实就是获取函数里面的注释内容
其实就是写在函数里面的注释,不过它是可以被输出的
一般是写:
1.函数介绍
2.函数的参数说明
3.函数的使用说明
4.函数的返回值说明

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白程序猿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值