首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每天 3 分钟,小闫带你学 Python(二十一)

正文共: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 有参数有返回值

描述:此类函数既可以接受参数,又具有返回值。

适用场景:设计一个通用流程,可以根据参数进行数据处理,并将数据处理结果返回给调用者。

示例:

代码语言:javascript
复制
# 计算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 有参数无返回值

描述:此类函数可以接受参数,但是没有返回值。

适用场景:适用于不需要返回结果,只需要调整内部变量执行简单输出的情况,如之前根据输入不同名字,输出欢迎语的功能。

示例:

代码语言:javascript
复制
def welcomename(name):
    print("热烈欢迎 %s 的到来" % name)

1.3 无参数有返回值

描述:此类函数不可以传入参数,但是有返回值。

适用场景:采集指定的数据,或者执行特定的功能需要重复使用结果。

示例:

代码语言:javascript
复制
def gettime():
    # 进行时间获取操作,此处省略
    return time
time = gettime()

1.4 无参数无返回值

描述:此类函数既不能接受参数,又没有返回值。

适用场景:简单的的打印操作。如提示灯、特殊的图形等等。

示例:

代码语言:javascript
复制
def printfunc():
    print('--------------------------')
    print('      小闫笔记 温馨提示')
    print('')
    print('  1.  先看使用说明再进行公众号使用')
    print('  2.  历史文章搜索不在公众号聊天界面')
    print('  3.  感谢每一位关注的粉丝,你的支持是我坚持的动力')
    print('--------------------------')

2.函数的嵌套使用

在学习了之前循环函数嵌套使用、条件判断语句嵌套使用的情况后,大家应该理解了嵌套的概念。函数的嵌套使用,顾名思义,函数内部有函数。鉴于大家初学函数,此处嵌套为函数内部调用其他函数,函数内部定义函数的情况称之为闭包,是高级内容,历史文章中有此部分介绍。根据示例,大家思考一下它的执行顺序:

代码语言:javascript
复制
def testB():
    print('---- testB start----')
    print('这里是testB函数执行的代码...(省略)...')
    print('---- testB end----')

def testA():
    print('---- testA start----')
    testB()
    print('---- testA end----')

testA()

看一下执行结果,是否同你预想的一样呢?

代码语言:javascript
复制
---- testA start----
---- testB start----
这里是testB函数执行的代码...(省略)...
---- testB end----
---- testA end----

在调用函数 A 的时候,从上到下按顺序执行函数 A 内部代码 ,在函数 A 内部遇到调用函数 B 时,会从上到下按顺序执行函数 B 内部代码,函数 B 代码执行结束后接着返回函数 A 中调用函数 B 位置之后的代码,直到函数 A 执行完毕。

3.拆包与交换变量的值

3.1 拆包

此处的拆包并非是 CF 中的 C4 炸弹,而是将多个元素的集合,拆分成一个个元素的情况

上述所说集合并非是数据类型集合,而是生活中的概念,集合为很多元素的聚集。

可以拆包的数据类型:元组、列表、字典等多元素集合。

以元组为例,对其进行拆包操作,其他数据类型留给大家练习。

代码语言:javascript
复制
mytuple = (1, 2, 3, 4)
a,b,c,d = mytuple
print(a)
print(b)
print(c)
print(d)

执行结果为:

代码语言:javascript
复制
1
2
3
4

经过拆包操作,可以看到元组内部的元素已经分别赋值给了 a/b/c/d

3.1.1 注意

拆包时,外部接收变量的个数必须与元素集合内部元素个数一致,否则会报错。

3.1.2 应用

前面讲到,一个函数如果有多个返回值,但是在调用函数后,使用一个变量进行接收返回值,会发现变量是一个元组,如果想使用内部的元素,可以进行拆包操作:

代码语言:javascript
复制
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.可以使用第三个变量:

代码语言:javascript
复制
a = 4
b = 6
c = a
a = b
b = c
print(a)
print(b)

查看输出结果:

代码语言:javascript
复制
6
4

可以看到变量 a 和 b 的值已经互换。

2.Python 骚操作

Python 提供了一种交换变量值的骚操作,如下:

代码语言:javascript
复制
a = 4
b = 6
a, b = b, a
print(a)
print(b)

查看结果:

代码语言:javascript
复制
6
4

达到了效果,而且简化了操作。是不是很厉害?

4.作业

1.写一个函数,此函数功能为打印一条横线。

2.将上个函数改写,可以打印自定义函数的横线。

涉及到了函数嵌套的使用

答案:

代码语言:javascript
复制
# 打印一条横线
def printOneLine():
    print("-"*30)

# 打印多条横线
def printNumLine(num):
    i=0

    # 因为printOneLine函数已经完成了打印横线的功能,
    # 只需要多次调用此函数即可
    while i<num:
        printOneLine()
        i+=1

printNumLine(3)

3.写一个函数求三个数的和。

4.将上面的函数改写,改为可以求三个数的平均值。

答案:

代码语言:javascript
复制
# 求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)
下一篇
举报
领券