正文共:3035 字 6 图
预计阅读时间:8 分钟
每日分享
When you see a person without a smile, give them one of yours.
当你看到一个没有笑容的人时,请给他们一个。
小闫语录:
传递温暖,既暖了他人,也暖了自己。
前言
昨天的文章『每天 3 分钟,小闫带你学 Python(二十)』讲解了函数的返回值:
1.函数返回值概念理解,以及有返回值的函数书写。
2.函数内多个返回值的情况。
3.函数返回多个数据情况。
学习目标
1.掌握函数的4种类型,了解其使用场景。
2.熟悉函数嵌套的执行顺序。
3.掌握拆包与交换变量的值。
1.函数的4种类型
根据是否有参数以及是否有返回值,可以将函数大体分为四种类型。大家根据实际使用场景进行自由组合,灵活设计使用即可。
1.1 有参数有返回值
描述:此类函数既可以接受参数,又具有返回值。
适用场景:设计一个通用流程,可以根据参数进行数据处理,并将数据处理结果返回给调用者。
示例:
# 计算1~num的累积和
def sumresult(num):
result = 0
i = 1
while i<=num:
result = result + i
i+=1
return result
result = sumresult(100)
print('1~100的累积和为:%d'%result)
1.2 有参数无返回值
描述:此类函数可以接受参数,但是没有返回值。
适用场景:适用于不需要返回结果,只需要调整内部变量执行简单输出的情况,如之前根据输入不同名字,输出欢迎语的功能。
示例:
def welcomename(name):
print("热烈欢迎 %s 的到来" % name)
1.3 无参数有返回值
描述:此类函数不可以传入参数,但是有返回值。
适用场景:采集指定的数据,或者执行特定的功能需要重复使用结果。
示例:
def gettime():
# 进行时间获取操作,此处省略
return time
time = gettime()
1.4 无参数无返回值
描述:此类函数既不能接受参数,又没有返回值。
适用场景:简单的的打印操作。如提示灯、特殊的图形等等。
示例:
def printfunc():
print('--------------------------')
print(' 小闫笔记 温馨提示')
print('')
print(' 1. 先看使用说明再进行公众号使用')
print(' 2. 历史文章搜索不在公众号聊天界面')
print(' 3. 感谢每一位关注的粉丝,你的支持是我坚持的动力')
print('--------------------------')
2.函数的嵌套使用
在学习了之前循环函数嵌套使用、条件判断语句嵌套使用的情况后,大家应该理解了嵌套的概念。函数的嵌套使用,顾名思义,函数内部有函数。鉴于大家初学函数,此处嵌套为函数内部调用其他函数,函数内部定义函数的情况称之为闭包,是高级内容,历史文章中有此部分介绍。根据示例,大家思考一下它的执行顺序:
def testB():
print('---- testB start----')
print('这里是testB函数执行的代码...(省略)...')
print('---- testB end----')
def testA():
print('---- testA start----')
testB()
print('---- testA end----')
testA()
看一下执行结果,是否同你预想的一样呢?
---- testA start----
---- testB start----
这里是testB函数执行的代码...(省略)...
---- testB end----
---- testA end----
在调用函数 A 的时候,从上到下按顺序执行函数 A 内部代码 ,在函数 A 内部遇到调用函数 B 时,会从上到下按顺序执行函数 B 内部代码,函数 B 代码执行结束后接着返回函数 A 中调用函数 B 位置之后的代码,直到函数 A 执行完毕。
3.拆包与交换变量的值
3.1 拆包
此处的拆包并非是 CF 中的 C4
炸弹,而是将多个元素的集合,拆分成一个个元素的情况。
上述所说集合并非是数据类型集合,而是生活中的概念,集合为很多元素的聚集。
可以拆包的数据类型:元组、列表、字典等多元素集合。
以元组为例,对其进行拆包操作,其他数据类型留给大家练习。
mytuple = (1, 2, 3, 4)
a,b,c,d = mytuple
print(a)
print(b)
print(c)
print(d)
执行结果为:
1
2
3
4
经过拆包操作,可以看到元组内部的元素已经分别赋值给了
a/b/c/d
。
3.1.1 注意
拆包时,外部接收变量的个数必须与元素集合内部元素个数一致,否则会报错。
3.1.2 应用
前面讲到,一个函数如果有多个返回值,但是在调用函数后,使用一个变量进行接收返回值,会发现变量是一个元组,如果想使用内部的元素,可以进行拆包操作:
def getinfo():
name = 'Ethanyan'
weight = 175
age = 18
return name, weight, age
my_name, my_weight, my_age = getinfo()
print(my_name)
print(my_weight)
print(my_age)
大家看到结果或许很熟悉,之前讲到函数返回值时提到过此种写法,但是未说明它是拆包操作,现在理解即可。
3.2 交换变量的值
假设有两个变量 a 和 b,如果想要交换两者的值,怎么办?
1.可以使用第三个变量:
a = 4
b = 6
c = a
a = b
b = c
print(a)
print(b)
查看输出结果:
6
4
可以看到变量 a 和 b 的值已经互换。
2.Python 骚操作
Python 提供了一种交换变量值的骚操作,如下:
a = 4
b = 6
a, b = b, a
print(a)
print(b)
查看结果:
6
4
达到了效果,而且简化了操作。是不是很厉害?
4.作业
1.写一个函数,此函数功能为打印一条横线。
2.将上个函数改写,可以打印自定义函数的横线。
涉及到了函数嵌套的使用
答案:
# 打印一条横线
def printOneLine():
print("-"*30)
# 打印多条横线
def printNumLine(num):
i=0
# 因为printOneLine函数已经完成了打印横线的功能,
# 只需要多次调用此函数即可
while i<num:
printOneLine()
i+=1
printNumLine(3)
3.写一个函数求三个数的和。
4.将上面的函数改写,改为可以求三个数的平均值。
答案:
# 求3个数的和
def sum3Number(a,b,c):
return a+b+c # return 的后面可以是数值,也可是一个表达式
# 完成对3个数求平均值
def average3Number(a,b,c):
# 因为sum3Number函数已经完成了3个数的就和,所以只需调用即可
# 即把接收到的3个数,当做实参传递
sumResult = sum3Number(a,b,c)
aveResult = sumResult/3.0
return aveResult
# 调用函数,完成对3个数求平均值
result = average3Number(11,2,55)
print("average is %d"%result)
优质文章推荐: