课程名称:Python3 入门教程(新版)
课程章节: Python的函数
主讲老师:咚咚呛
课程内容
- 函数的定义
- 函数的返回值
- 递归函数
- 函数的参数
- 默认参数
- 可变函数
- 可变关键字函数
课程收获
定义函数
定义一个函数要使用 def
语句,依次写出函数名
、括号()
、括号中的参数
和冒号:
,然后,在缩进块中编写函数体
,函数的返回值用 return
语句返回。
def square_of_sum(l):
s = 0
for i in l:
s = s + i*i
return s
l = [1,2,3]
print(square_of_sum(l))
函数的返回值
我们在函数里面使用return返回了计算的结果,在外部调用这个函数的时候,就可以接收到结果。有时候函数是没有返回结果的,这个时候从函数获取到的是一个空值None
。
除了返回None、一个值以外,函数也可以返回多个值
,在函数中,如果需要返回多个值,多个值之间使用逗号分隔即可,但是需要注意顺序。
def data_of_square(side):
C = 4 * side
S = side * side
return C, S
C, S = data_of_square(16)
print('周长 = {}'.format(C)) # ==> 周长 = 64
print('面积 = {}'.format(S)) # ==> 面积 = 256
也可以使用一个值存储函数返回的多值结果,其实它是tuple类型,使用对应位置的下标就可以获得对应的结果。
result = data_of_square(16)
C = result[0]
S = result[1]
print('周长 = {}'.format(C)) # ==> 周长 = 64
print('面积 = {}'.format(S)) # ==> 面积 = 256
递归函数
在函数内部调用其他函数,是非常常见的,通过合理拆分逻辑,可以降低程序的复杂度。如果在一个函数内部调用其自身,这个函数就是递归函数。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
# 计算 1~100 的和
l = range(1,101)
sum = 0
for i in l:
sum = sum +i
print(sum)
def recursive_sum(num):
if num == 1:
return num
else:
return num + recursive_sum(num - 1)
print(recursive_sum(100));
函数参数
函数参数可以是任意的数据类型,只要函数内部逻辑可以处理即可。
为了保证函数的正常运行,有时候需要对函数入参进行类型的校验,Python提供isinstance()函数,可以判断参数类型,它接收两个参数,第一个是需要判断的参数,第二个是类型。
def sum(x):
s=0
y=1
if isinstance(x,list):
if len(x)!=0:
for i in x:
if isinstance(i, int) or isinstance(i, float):
s+=i
return s
if isinstance(x,tuple):
if len(x)!=0:
for i in x:
if isinstance(i, int) or isinstance(i, float):
y=i*y
return y
默认参数
定义函数的时候,还可以有默认参数,默认参数的意思是当这个参数没有传递的时候,参数就使用定义时的默认值。
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面,否则将会出现错误。
def greet(base='world'):
print('hello,'+base+'.')
greet()
greet('sanbei')
可变参数
除了默认参数,Python函数还接收一种参数叫做可变参数,可变参数即任意个参数的意思,可变参数通常使用*args
来表示。
在使用上,Python会把可变参数定义为一个tuple,所以在函数内部,把可变参数当作tuple来使用就可以了,比如可以通过位置下标取出对应的元素等。
def average(*args):
l = len(args)
sum = 0
if l:
sum = 0
for item in args:
sum += item
avg = sum / l
return avg
return sum
可变关键字参数
对于可变关键字参数,一般使用**kwargs
来表示。
def info(**kwargs):
print('name: {}, gender: {}, age: {}'.format(kwargs.get('name'), kwargs.get('gender'), kwargs.get('age')))
info(name = 'Alice', gender = 'girl', age = 16)
对于一个拥有必需参数,默认参数,可变参数,可变关键字参数的函数,定义顺序是这样的:
def func(param1, param2, param3 = None, *args, **kwargs):
print(param1)
print(param2)
print(param3)
print(args)
print(kwargs)
学习截图
共同学习,写下你的评论
评论加载中...
作者其他优质文章