当前位置:首页>python>Python 函数完整详细教程# def 定义 • 调用 • 参数(位置/关键字/默认)• 可变参数 *args **kwargs • return 返回值

Python 函数完整详细教程# def 定义 • 调用 • 参数(位置/关键字/默认)• 可变参数 *args **kwargs • return 返回值

  • 2026-09-09 15:32:35
Python 函数完整详细教程# def 定义 • 调用 • 参数(位置/关键字/默认)• 可变参数 *args **kwargs • return 返回值

一、函数是什么?

函数是把一段可重复使用的代码打包起来,起一个名字,需要时直接调用。
好处:

  • • 代码复用,不用重复写
  • • 结构清晰,便于维护
  • • 便于分工协作

二、函数的定义与调用

1. 定义函数(def 关键字)

def函数名(参数1, 参数2, ...):
    函数体代码
return 返回值

要点:

  • • def 是定义函数的关键字
  • • 函数名命名规则同变量:小写+下划线,见名知意
  • • 括号 () 必须写,哪怕没有参数
  • • 括号后必须加 冒号 :
  • • 函数体必须缩进
  • • return 用来返回结果,可写可不写

2. 最简单函数(无参无返回值)

defsay_hello():
print("Hello Python")

3. 调用函数

函数定义后不会自动运行,必须调用才执行。

say_hello()

4. 完整示例

# 定义
defadd(a, b):
    c = a + b
print(c)

# 调用
add(3, 5)   # 输出 8

三、函数参数传递(核心重点)

1. 位置参数

调用时按顺序传递,一一对应。

definfo(name, age):
print("姓名:", name, "年龄:", age)

info("小明", 18)
  • • 第一个实参 → name
  • • 第二个实参 → age

顺序不能乱,乱了结果就错。


2. 关键字参数

调用时指定参数名,顺序可以任意。

info(name="小红", age=20)
info(age=22, name="小刚")

好处:不怕传错顺序。


3. 默认参数(缺省参数)

定义函数时给参数设置默认值,调用时不传该参数就用默认值。

definfo(name, age, city="北京"):
print(name, age, city)

调用:

info("小明", 18)            # city 默认北京
info("小红", 20, "上海")    # 覆盖默认值

注意规则:

  • • 默认参数必须放在普通参数后面
  • • 默认参数只在函数定义时赋值一次

四、可变参数(*args 和 **kwargs)

1. *args 可变位置参数

接收任意多个位置参数,自动打包成元组 tuple。

deffunc(*args):
print(args)

func(1, 2, 3)
func("a", "b")
func()

输出:

(1, 2, 3)
('a', 'b')
()

示例:求和函数

defsum_all(*args):
    total = 0
for n in args:
        total += n
return total

print(sum_all(1,2,3,4,5))  # 15

2. **kwargs 可变关键字参数

接收任意多个关键字参数,自动打包成字典 dict。

deffunc(**kwargs):
print(kwargs)

func(name="小明", age=18)

输出:

{'name': '小明', 'age': 18}

3. 混合使用顺序(必须记住)

def函数名(位置参数, 默认参数, *args, **kwargs):

完整示例:

deftest(a, b=10, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)

五、返回值 return

1. return 作用

  • • 把函数内部结果传给外部
  • • 遇到 return 立即结束函数

2. 无 return

函数默认返回 None

deff():
print(123)

print(f())   # None

3. 有 return

defadd(a, b):
return a + b

res = add(3,4)
print(res)   # 7

4. 返回多个值

返回多个值会自动打包成元组。

defget_user():
return"小明", 18, "北京"

name, age, city = get_user()

5. return 后代码不执行

deftest():
print(1)
return
print(2)   # 不会执行

六、参数传递的重要知识点

1. 不可变类型:数字、字符串、元组

函数内部修改不会影响外部变量。

deffunc(x):
    x = 100

a = 10
func(a)
print(a)   # 10 不变

2. 可变类型:列表、字典

函数内部修改会影响外部。

deffunc(lst):
    lst.append(4)

my_list = [1,2,3]
func(my_list)
print(my_list)   # [1,2,3,4]

七、作用域(简单说明)

  • • 函数内部定义的变量叫局部变量,外部不能访问
  • • 外部定义的叫全局变量,函数内可读但不能直接修改
  • • 想在函数内改全局变量要用 global

📚 综合练习题(带详细讲解)

练习1

定义函数求两个数的最大值,用 return 返回。

defmax_num(a, b):
return a if a > b else b

print(max_num(10, 20))

答案:20

练习2

定义函数,接收任意多个数字,返回它们的平均值。

defavg(*args):
returnsum(args) / len(args)

print(avg(1,2,3,4))   # 2.5

练习3

函数带默认参数、关键字参数调用。

defstudent(name, age, cls="一年级"):
print(name, age, cls)

student(age=9, name="小王")

答案:小王 9 一年级

练习4

return 多个值并解包。

defcal(a, b):
return a+b, a-b, a*b

add, sub, mul = cal(10, 2)
print(add, sub, mul)

答案:12 8 20


📝 本章超级总结

  1. 1. def 函数名(): 定义函数,调用用 函数名()
  2. 2. 位置参数:按顺序传参
  3. 3. 关键字参数:按名字传参,顺序可换
  4. 4. 默认参数:定义时赋值,可传可不传
  5. 5. *args:接收任意多个位置参数 → 元组
  6. 6. **kwargs:接收任意多个关键字参数 → 字典
  7. 7. return:返回结果并结束函数,可返回多个值
  8. 8. 可变对象传参会被修改,不可变对象不会

最新文章

随机文章