函数

参数类型

Python 函数的参数可以分为默认参数,位置参数,关键字参数,可变参数。

位置参数:要求实参顺序和形参顺序完全一致,由形参顺序决定实参顺序。

缺省参数:定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数。

关键字参数:调用函数的时候使用的是键值对的方式,key=values。混合传参时关键字参数必须在位置参数之后。

可变参数:传入的参数个数是可变的,可以是一个、两个到任意个,还可以是零个。

缺省参数不能放在位置参数前面。

程序示例:

# 报错:SyntaxError: parameter without a default follows parameter with a default
def infos(name, age=18, gender):
    print("Name:%s Age:%s Gender:%s" % (name, age, gender))

程序示例:

def infos(name, age=18, gender='M'):
    print("Name:%s Age:%s Gender:%s" % (name, age, gender))


infos("John")  # 后面两个默认参数全部保持默认
infos("John", 18)  # 最后一个参数保持默认
infos(name="John", age=18, gender='M')  # 等价于 infos("John", age=18, gender='M')
infos("John", gender='M')  # 跳过第二个参数,第二个参数保持默认
# 有跳过的参数时,后面的参数要指明是赋值给哪个形参
# infos(name="John", 'M')  # SyntaxError: positional argument follows keyword argument

可变参数是个数可变的。

用 * 表达的形参可以接受多个实参,多个实参会被封装成元组,此时传递参数时,如果传递的实参是一个列表,则列表前面也要放 *,表示拆包。

用 ** 表达的形参可以接受多个实参,多个实参会被封装成字典,此时传递参数时,如果只有一个实参,则实参前面也要放 **。

程序示例:

def add(*args):
    print(args)
    result = sum(args)
    return result


print(add(1, 2, 3, 4, 5, 6))
print(add(1))

结果:

(1, 2, 3, 4, 5, 6)
21
(1,)
1

程序示例:

def add(*args):
    print(args)
    result = sum(args)
    return result


# print(add([1, 2, 3, 4, 5, 6]))  # TypeError: unsupported operand type(s) for +: 'int' and 'list'
print(add(*[1, 2, 3, 4, 5, 6]))

结果:

(1, 2, 3, 4, 5, 6)
21

程序示例:

def f(**kwargs):
    for key, value in kwargs.items():
        print(f'{key}: {value}')


dict1 = {'a': 1, 'b': 2, 'c': 3}
f(**dict1)

结果:

a: 1
b: 2
c: 3

变量作用域

程序示例:

num1 = 10  # 全局变量


def domain():
    num1 = 20  # 局部变量
    print(num1)


print(num1)  # 10
domain()  # 20
print(num1)  # 10

程序示例:

num1 = 10  # 全局变量


def domain():
    global num1  # 全局变量
    num1 = 20
    print(num1)


print(num1)  # 10
domain()  # 20
print(num1)  # 20

程序示例:

num1 = 10  # 全局变量


def domain():
    # global num1 = 20  # 报错:SyntaxError: invalid syntax
    print(num1)


print(num1)  # 10
domain()  # 20
print(num1)  # 20

程序示例:

list1 = [1, 2, 3, 4, 5]


def domain():
    list1[0] = 100
    print(list1)


print(list1)  # [1, 2, 3, 4, 5]
domain()  # [100, 2, 3, 4, 5]
print(list1)  # [100, 2, 3, 4, 5]

匿名函数

lambda 函数是一种快速定义单行的最小函数。

递归函数

一个函数调用自身称为递归调用,一个会调用自身的函数称为递归函数。

a、写出临界条件
b、找这一次和上一次的关系
C、假设当前函数已经能用,调用自身计算上一次结果,再求出本次结果当参数满足一个条件时,函数不再执行。

程序示例:

# 10阶楼梯,每次上1个台阶或者上2个台阶,问一共有多少种走法
def fibonacci(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    return fibonacci(n - 1) + fibonacci(n - 2)


for i in range(1, 11):
    print(fibonacci(i))

结果:

1
2
3
5
8
13
21
34
55
89

改写成循环:

# 10阶楼梯,每次上1个台阶或者上2个台阶,问一共有多少种走法

a = [0, 1, 2]
for i in range(3, 11):
    a.append(a[i - 1] + a[i - 2])
    print(a[-1])
posted @ 2025-11-06 23:13  YouKong  阅读(7)  评论(0)    收藏  举报