手记

【学习打卡】第9天 Python的函数

课程名称: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)

学习截图

0人推荐
随时随地看视频
慕课网APP