Python 入门手札:从 0 到会--第五天Python的基础--函数的调用操作

目录

一、函数调用的基础

1. 函数调用(Function Call)

2.  函数调用过程

二、函数参数类型

1. 位置参数(Positional Arguments)

2. 关键词参数(Keyword Arguments)

3. 默认参数(Default Parameters)

4. 可变位置参数 *args

5. 可变关键词参数 **kwargs

6. 可变位置参数和可变关键词参数两者一起使用

三、参数的解包调用

1.什么是“参数解包”?

2. 解包位置参数 *args

 2.1 基础示例

2.2 另一个示例:传入任意长度的参数

3. 解包关键词参数 **kwargs

3.1 基础示例

3.2 另一个例子:动态传参 + 默认参数

4. 练习题 

4.1 基础练习题

4.2 进阶练习题:结合 *args 和 kwargs 使用

四、参数传递的顺序规则

五、函数调用返回值

六、常见错误与注意事项 


一、函数调用的基础

1. 函数调用(Function Call)

函数定义之后,需要使用“函数名 + 括号”来调用它。可以传入实参,也可以省略(如果函数无参数)。

调用方式:

def say_hello():
    print("Hello!")
say_hello()  # 调用函数

2.  函数调用过程

  • Python 查找函数名

  • 检查参数个数是否匹配

  • 执行函数体,返回结果

二、函数参数类型

1. 位置参数(Positional Arguments)

def describe_pet(animal, name):
    print(f"这是一只{animal},名字叫{name}")

describe_pet("狗", "旺财")  # 位置参数:第1个给animal,第2个给name

2. 关键词参数(Keyword Arguments)

def describe_pet(animal, name):
    print(f"这是一只{animal},名字叫{name}")
​
describe_pet(animal="猫", name="咪咪")# 使用关键词参数调用

3. 默认参数(Default Parameters)

def greet(name="朋友"):
    print(f"你好,{name}!")
​
greet()         # 没有传参,使用默认值:朋友
greet("小李")   # 输出:你好,小李!

4. 可变位置参数 *args

 在函数参数中使用 *args,表示可以接受 任意数量的位置参数,这些参数会被打包成一个 元组。

 示例:

def add_all(*args):
    print(args)
    return sum(args)

add_all(1, 2, 3)        # 输出: (1, 2, 3),返回: 6
add_all(5, 10, 15, 20)  # 输出: (5, 10, 15, 20),返回: 50
  • *args 是一个打包器,把传进来的多个值组合成一个元组。

  • 名字不一定必须叫 args,你也可以叫 *numbers*values,但惯例用 args

5. 可变关键词参数 **kwargs

使用 **kwargs,表示可以接收 任意数量的关键词参数(形如 key=value),它们会被打包成一个 字典

 示例:

def show_info(**kwargs):
    print(kwargs)

show_info(name="Alice", age=30)
# 输出: {'name': 'Alice', 'age': 30}
  • **kwargs 是一个打包器,把多个 key=value 的参数封装成一个字典。

  • 名字不一定非得叫 kwargs,可以叫 **data**options,但惯例用 kwargs(keyword arguments

6. 可变位置参数和可变关键词参数两者一起使用

示例: 

def demo(a, *args, **kwargs):
    print("a:", a)
    print("args:", args)
    print("kwargs:", kwargs)

demo(1, 2, 3, 4, name="Alice", age=25)

输出结果:

a: 1 args: (2, 3, 4) kwargs: {'name': 'Alice', 'age': 25}

两者对比表

类型语法接收内容数据类型示例调用方式
可变位置参数*args多个位置参数元组 (tuple)func(1, 2, 3)args = (1, 2, 3)
可变关键词参数**kwargs多个 key=value 参数字典 (dict)func(a=1, b=2)kwargs = {'a': 1, 'b': 2}

综合示例之函数参数打印机

def func(*args, **kwargs):
    print("位置参数:")
    for i in args:
        print(f"  {i}")
    print("关键词参数:")
    for k, v in kwargs.items():
        print(f"  {k} = {v}")

func(1, 2, 3, name="Tom", age=20)

三、参数的解包调用

1.什么是“参数解包”?

在 Python 中,我们可以用:

  • * 解包 序列(如 list、tuple) 作为位置参数

  • ** 解包 字典(dict) 作为关键字参数

  • 这是函数调用时的一种简洁、灵活的写法。

2. 解包位置参数 *args

 2.1 基础示例

def greet(name, age):
    print(f"Hello, {name}. You are {age} years old.")

args = ["Alice", 30]
greet(*args)  # 相当于:greet("Alice", 30)
  • *args 把列表 ["Alice", 30] 中的两个值,按顺序传给了 greet 的两个参数 nameage


2.2 另一个示例:传入任意长度的参数

def add(a, b, c):
    print(a + b + c)

nums = (1, 2, 3)
add(*nums)  # 相当于 add(1, 2, 3)

你也可以直接在函数定义中使用 *args 来接收任意个位置参数:

def print_all(*args):
    for i in args:
        print(i)

print_all("apple", "banana", "cherry")

3. 解包关键词参数 **kwargs

3.1 基础示例

def greet(name, age):
    print(f"Hello, {name}. You are {age} years old.")

kwargs = {"name": "Alice", "age": 30}
greet(**kwargs)  # 相当于 greet(name="Alice", age=30)
  • **kwargs 会把字典中每个键值对,按关键词参数形式传入函数。


3.2 另一个例子:动态传参 + 默认参数

def introduce(name, age, country="Unknown"):
    print(f"{name} is {age} years old from {country}.")

info = {"name": "Bob", "age": 25}
introduce(**info)  # 没传 country,使用默认值

你也可以定义函数时用 **kwargs 来接收任意个关键词参数:

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

show_info(name="Alice", age=30, hobby="reading")

4. 练习题 

4.1 基础练习题

练习 1:解包位置参数

def multiply(a, b, c):
    return a * b * c

nums = [2, 3, 4]
# 请使用 * 解包 nums,调用 multiply 函数

目标:学会用 *list 解包并作为位置参数传入函数。

参考答案:

def multiply(a, b, c):
    return a * b * c

nums = [2, 3, 4]
result = multiply(*nums)
print(result)  # 输出: 24

练习 2:解包关键词参数

def student_info(name, age, grade):
    print(f"{name} is {age} years old and in grade {grade}.")

info = {"name": "Tom", "age": 15, "grade": 9}
# 请使用 ** 解包 info,调用 student_info 函数

目标:学会用 **dict 解包并作为关键词参数传入函数。

参考答案:

def student_info(name, age, grade):
    print(f"{name} is {age} years old and in grade {grade}.")

info = {"name": "Tom", "age": 15, "grade": 9}
student_info(**info)
# 输出: Tom is 15 years old and in grade 9.

练习 3:遍历 kwargs 的 .items()

def print_kwargs(**kwargs):
    # 请用 for 循环,遍历 kwargs,并输出 key 和 value
    pass

# 调用:
print_kwargs(city="Beijing", year=2025, month="July")

目标:掌握 kwargs.items() 的使用方式。

参考答案:

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

print_kwargs(city="Beijing", year=2025, month="July")
# 输出:
# city = Beijing
# year = 2025
# month = July

4.2 进阶练习题:结合 *args 和 kwargs 使用

练习 1:函数同时接收位置参数和关键词参数

def demo(a, b, c=0, d=0):
    print(a, b, c, d)

args = (1, 2)
kwargs = {"c": 3, "d": 4}

# 请将 args 和 kwargs 一起传入 demo 函数,打印输出

目标:掌握 *args + **kwargs 混合使用。

参考答案:

def demo(a, b, c=0, d=0):
    print(a, b, c, d)

args = (1, 2)
kwargs = {"c": 3, "d": 4}

demo(*args, **kwargs)
# 输出: 1 2 3 4

#*args 解包为位置参数 a=1, b=2
#**kwargs 解包为 c=3, d=4


练习 2:用 *args 构建一个求和函数

# 定义一个函数 sum_all,它可以接收任意数量的数字,并返回它们的总和
# 提示:使用 *args 来接收参数

# 例:
# sum_all(1, 2, 3) => 6
# sum_all(10, 20) => 30

目标:灵活使用 *args 接收不定数量的位置参数。

参考答案:

def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3))      # 输出: 6
print(sum_all(10, 20))       # 输出: 30

练习 3:统计关键词参数中的值类型

def analyze_kwargs(**kwargs):
    # 输出每个 key 和对应值的类型
    # 如:name => <class 'str'>,age => <class 'int'>
    pass

# 调用:
analyze_kwargs(name="Alice", age=30, score=99.5)

目标:灵活使用 **kwargs.items() 进行参数分析。

参考答案:

def analyze_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} => {type(value)}")

analyze_kwargs(name="Alice", age=30, score=99.5)
# 输出:
# name => <class 'str'>
# age => <class 'int'>
# score => <class 'float'>

总结表格 

符号位置***
函数定义中把多个位置参数打包成 tuple → *args把多个关键词参数打包成 dict → **kwargs
函数调用中把序列(如 list/tuple)解包成多个位置参数把字典解包成多个关键词参数

小编总结:放在形参前既定义函数,放在实参前既调用函数 

符号位置含义动作
* 在形参中打包位置参数收集 → 元组
* 在实参中解包序列为位置参数拆开 → 传参
** 在形参中打包关键词参数收集 → 字典
** 在实参中解包字典为关键词参数拆开 → 传参

四、参数传递的顺序规则

1. 定义函数时,参数顺序必须遵循:

def func(
    位置参数,
    默认参数,
    *args,
    命名关键词参数(*之后的参数),
    **kwargs
):

2. 调用函数时,顺序推荐:

func(位置参数, 关键词参数, *args, **kwargs)

五、函数调用返回值

1.单个返回值

def add(x, y):
    return x + y

2.多个返回值

def calc(x, y):
    return x + y, x - y

a, b = calc(5, 3)

注:不是所有函数都必须有返回值,但所有函数调用本质上都会返回一个值,即使你没写 return,Python 也会自动返回一个特殊的值:None。

情况返回值
return 表达式返回表达式的结果
return(但没有值)返回 None
没有写 return返回 None

六、常见错误与注意事项

  • 参数数量不匹配:TypeError: missing required positional argument

  • 多次传同一参数(位置+关键词):TypeError: got multiple values for argument

  • 字典解包时缺失必要参数

  • *args**kwargs 顺序不能乱(调用中也要注意)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值