【Python入门与进阶】 函数,形参,实参,与返回值 (学这篇就够了)


【原文】 【Python入门与进阶】 函数,形参,实参,与返回值

0 :导语

》》a:代码重用性从函数开始
》》b:函数重点在于参数与返回值
》》c:函数学得好,面向对象就容易了

1:函数

1.1:概述

定义:函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用

( 比如有如下三行代码,这三行代码是一个完整的功能)

print(‘Hello’)
print(‘Word’)
print(‘Python’)

(用函数的角度来想,就是把这三行代码封装起来,然后用名字调用)

file

如图:

三行代码被保存(封装)在名字叫fn的函数里

当你调用 fn时,先找到封闭在fn里面的代码,然后再执行里面的代码。

1.2:如何定义函数

》》1:创建函数:


def 函数名([形参1,形参2,...形参n]) :
	代码块

说明:
1)函数名必须要符号标识符的规范(可以包含字母、数字、下划线、但是不能以数字开头)
2)函数中保存的代码不会立即执行,需要调用函数代码才会执行

》》2:调用函数:

函数对象()

(这个要记住,调用函数 肯定有小括号 ,其实本质你还是要编写 一段代码,然后执行这段代码,函数,只不过让你这段代码,才能时候要用,调一下就可以执行)

》》3:函数是功能

定义函数一般都是要实现某种功能的

(所以,现在可以让为以后开发,就是将代码写进函数里面,一个函数代表一个功能)

》》4:练习

file

如图:

将三行代码保存在sum函数里,
调用sum时,先找到sum,再执行里面的代码。

1.3:函数参数

(显然,上面的函数,只能计算固定值,这显然没什么实际意义,应该是你传什么值,函数拿着这个值去计算才对)

file

如图:

file

说明
1)调用时,程序将100,200分别传给括号里面的a= 100,b=200
2)函数内部将已被赋值的a,b 用于打印,当然也可以用于别的计算

(所以本质上还在是执行一段代码,只不过先写函数,再调函数,然后将函数内代码需要的数据传过去而已)

2:函数参数

2.3:函数参数

(参数,就是函数名后面的()里面的变量)

file

如图:

说明:

1)在定义函数时,可以在函数名后的()中定义数量不等的形参,
2)多个形参之间使用,隔开

2.4 形参与实参

(你肯定知道,变量没有赋值是不能使用的对吧,那形参明显没有值,函数内怎么能使用没有赋值的变量呢)

file

说明:
1)形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
2)实参(实际参数)定义函数时,形参是没有值的变量,但是你调用函数时,实参就赋值给了形参
3)如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参

2.5: 小练习

file

2.6:参数默认值

(定义函数时形参没有值,调用函数时,将实参传给形参。这个你知道

也可以在定义函数时,直接给形参值。 如果调用时,你给实参,就用时参,你不给就用默认值)

file

file

file
说明:

1)你给 a = 1, b=2,c=3 ,程序就使用你给的值进行运算
2)你不给a,b,c值,那作为变量a,b,c 不能没有值,就使用默认值
3)你给 a = 100,b = 200,那么c 还是没有值,c就使用默认值

(可以说到这里python参数已经是相当灵活了,但是还有更灵活的)

2.7: 关键字参数

可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数

file

说明:
4)你只想给一个值,如果直接写值 比如 fn(100),那是将100给了a, 但是我想给c,就得写成fn(c=100) ,表示将值给形参c

2.8:实参是列表

file

说明:

1)如果 a 是 一个列表,尝试修改列表中的元素,会影响所有指向该对象的变量
2)如果 只需要使用列表数据去计算,而不影响原来的列表,使用copy()

2.9:不定长的参数

2.9.1 一个带星号形参

(如果定义一个求和函数,当需要两个数求和,那么参数为两个,依次类推,需要定义很多个不同参数个数的函数)

file

file

说明:

1) 在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参

file

2) 它将会将所有的实参保存到一个元组中(装包)

2.9.2 只能有一个带星的形参

》》带星形参在最后

file

说明

1)带星号的形参只能有一个
2) 第一个参数给a,第二个参数给b,剩下的都保存到c的元组中


》》带星形参不在最后

file

说明:
1)可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
2)简单说 带星的,就是将余下的参数封装到元组中, 4给b,5给c ,那么余下的都是a的

》》第一个形参只有星号

file

说明:

1) 如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递

》》形参带星,不能接收关键字参数

file

说明:
1)*形参只能接收位置参数,而不能接收关键字参数

2.9.3: 如果形参带两个星

》》形参带两个星

file

说明:

1) **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中, 字典的key就是参数的名字,字典的value就是参数的值


》》带两星的形参必须在最后

file

说明:
1)**形参只能有一个,并且必须写在所有参数的最后

2.10 参数的解包(拆包)

定义:将元组或者字典中的元素,取出作为值依次赋给函数形参

2.10.1 实参带一个星

file

说明:
1) 调用函数时,实参为元组,加一个*表示取出元素

2.10.2 实参带两个星

file

说明:
1)通过 **来对一个字典进行解包操作
2) 这里要求序列中元素的个数必须和形参的个数的一致

3: 返回值

(这个概念很好理解的)

定义:返回值就是函数执行以后,使用return 返回的结果

3.1:return 结果 的 含义

file

说明

1) return 后边跟什么值,函数就会返回什么值,图中返回的是 a+b的和

2)可以直接 使用函数的返回值,也可以通过一个变量来接收函数的返回值

file

3.2 return 含义

3) 如果仅仅写一个return 或者 不写return,则相当于return None

file

4) 在函数中,return后的代码都不会执行,return 一旦执行函数自动结束

file

3.3 return 进阶

5) return 后边可以跟任意的对象,返回值甚至可以是一个函数

file

6)fn1 和 fn1()的区别

》》print(fn1)

fn1是函数对象,打印fn1实际是在打印函数对象 <function fn1 at 0x05771BB8>

》》print(fn1(10,20))

fn5()是在调用函数,打印fn1()实际上是在打印fn1()函数的返回值30

发布了69 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u013621398/article/details/104716634