一、函数参数和返回值的作用

函数根据有没有参数以及有没有返回值,可以相互组合一共有4种组合方式:

1.无参数,无返回值

2.无参数,有返回值

3.有参数,无返回值

4.有参数,有返回值

如果函数内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部,如果希望一个函数执行完成后,向外界汇报执行结果,就可以增加函数的返回值。

代码示例如下:

# 无参数 无返回值
def test1():
    print('hello')


# 无参数 有返回值
def test2():
    return 'hello'


# 有参数 无返回值
def test3(num):
    print(num)


# 有参数,有返回值
def test4(num):
    num += 1
    return num


test1()
print(test2())
test3(2)
print(test4(2))

输出:

hello
hello
2
3

二、函数的参数

1.不可变和可变参数

无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用。

代码示例如下:

def test(num, list):
    num = 100
    list = [1, 2, 3]

    print(num)
    print(list)


num = 10
list = [4, 5, 6]

test(num, list)
# 打印全局变量
print(num)
print(list)

输出:

100
[1, 2, 3]
10
[4, 5, 6]

如果传递的参数可变类型,在函数内部使用方法修改了数据,同样会影响到外部的数据。

代码示例如下:

def test(num, list):
    num = 100
    # 修改数据会影响外部的数据
    list[0] = 1

    print(num)
    print(list)


num = 10
list = [4, 5, 6]

test(num, list)
# 打印全局变量
print(num)
print(list)

输出:

100
[1, 5, 6]
10
[1, 5, 6]

2.缺省参数

定义函数的时候,可以给某个参数指定一个默认值,具有默认值的参数就叫缺省参数。调用函数时如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值。

代码示例如下:

def test(name, status=1):
    print('我的姓名:%s,状态:%d' % (name, status))


# 调用函数 没有传入缺省参数 使用参数默认值
test('qx')

输出:

我的姓名:qx,状态:1

注意事项:

缺省参数必须在参数列表末尾。

3.不定长参数

有时候函数需要处理参数个数不确定的情况,这个时候我们可以使用多值参数。参数名前加一个可以接收元组,参数名前添加两个可以接收字典。

代码示例如下:

def test(*num):
    for i in num:
        print(i)


# 调用函数 没有传入缺省参数 使用参数默认值
test(1, 2, 3, 4)

输出:

1
2
3
4

三、函数的递归

函数的递归就是在函数内部调用自己,函数内部的代码是相同的只是针对参数不同处理的结果不同,当参数满足一个条件时,函数不再执行。

代码示例如下:

# 定义递归函数
def test(num):
    # 满足条件 退出递归
    if num == 1:
        return 1
    return num + test(num - 1)


print(test(4))

输出:

10