Python函数定义与四种传参方式详解

江岸
江岸
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍Python中函数的定义方法及其核心价值,包括代码重用、一致性与可扩展性。重点解析四种函数传参机制:位置参数的一一对应、默认参数的灵活补充、关键字参数的指定调用,以及通过*和**实现的非固定参数打包。结合具体代码示例,帮助开发者掌握Python函数调用的最佳实践。

Python函数初识与定义

一、函数初识

在编程中,函数是将一组相关语句封装在一个特定名称(即函数名)下的机制。执行这些语句时,只需通过函数名进行调用即可,无需重复编写代码。

使用函数的主要优势包括:提高代码的重用率,确保逻辑的一致性,以及增强系统的可扩展性。

以下是一个简单的函数定义示例:


# -*-coding:utf-8-*-
def sayHello():
  print('Hello world!')
sayHello()

Python函数传参方式详解

二、函数传参方式

上述示例展示了最基础的无参函数调用。为了更深入地理解函数交互,我们需要明确“函数参数”的概念及其分类。

1、函数参数的基本概念:

形参(形式参数):仅在函数被调用时分配内存单元,函数执行完毕后立即释放。因此,形参的作用域仅限于函数内部。

一旦函数调用结束并返回主调函数,外部的形参变量将不再可用。

实参(实际参数):可以是常量、变量、表达式或函数调用结果。无论实参类型如何,在调用函数时必须具有确定的值,以便传递给形参。因此,在调用前需通过赋值或输入等方式确保参数值已确定。

2、函数传参的分类:

位置参数

<1> 位置参数

位置参数是指调用函数时,传入的实参与函数定义中的形参在位置上严格一一对应。

具体实例如下:


#位置参数
print('\n以下是位置参数传值\n')
def stu_info(name,age,major,country):
  print('--------学生信息-------')
  print('姓名:',name)
  print('年龄:',age)
  print('专业:',major)
  print('国籍:',country)

stu1 = stu_info('Jack',21,'Chinese','CN') # 实参依次与函数中的name,age,major,country对应
stu2 = stu_info('Frank',20,'JP','UN')
stu3 = stu_info('Rose',19,'Art','UK')

默认参数

<2> 默认参数

默认参数允许在函数定义时为形参指定一个初始值。当调用函数时,如果未提供对应的实参,系统将自动使用默认值。这种机制提供了极大的便利性。

需要注意的是,默认参数必须定义在位置参数之后,否则会导致语法错误。

实例演示如下:


#默认参数
print('\n以下是默认参数传值\n')
def stu_info(name,age,major,country = 'CN'):# country设为了默认参数,必须放在位置参数之后,否则会出错
  print('--------学生信息-------')
  print('姓名:',name)
  print('年龄:',age)
  print('专业:',major)
  print('国籍:',country)

stu1 = stu_info('Jack',21,'Chinese') # 此处未传对应的值,但形参中已经定义了,所以不用担心找不家了!
stu2 = stu_info('Frank',20,'JP')  # 你也是的
stu3 = stu_info('Rose',19,'Art','UK')  # 既然你已经传参了,就随你了。

关键字参数

<3> 关键参数(关键字参数)

通常情况下,传参需遵循顺序。若希望打破顺序限制,可以使用关键参数。只需指定参数名即可赋值,但关键参数必须放置在所有位置参数之后。

相关实例如下:


#关键参数,不能重复赋值,且指定的参数应在位置参数之后

print('\n以下是关键参数传值\n')
def stu_info(name,age,major,country = 'CN'): #
  print('--------学生信息-------')
  print('姓名:',name)
  print('年龄:',age)
  print('专业:',major)
  print('国籍:',country)

stu1 = stu_info('Jack',21,'Chinese')
stu2 = stu_info('Frank',20,major='JP') # major即为关键参数,单独指定,但必须放在位置参数之后
stu3 = stu_info('Rose',19,'Art',country='UK')

非固定传参

<4> 非固定传参

非固定传参提供了更灵活的参数处理方式,主要分为两种形式。

可以细分为两类:

非固定传参方式一:

此方式允许传入多个用户参数,所有额外参数会被打包成一个元组。示例如下:


#-*-coding:utf-8-*-

#方式一
def send_alert(msg,*users): # '*users‘ 表示非固定传参,可同时指定多个用户,传过来的所有参数打包元祖
  for u in users:
    print('报警!请及时查看...',u,msg)
send_alert('你的系统已濒临崩溃!','cc','hyt','yuq','dy')

#方式二
def send_alert(msg,*users): # '*users‘ 表示非固定传参,可同时指定多个用户,传过来的所有参数打包元祖
  for u in users:
    print('报警!请及时查看...',u,msg)
send_alert('你的系统已濒临崩溃!',*['cc','hyt','yuq','dy'])

'''
  如果列表前不加 * 号,整个列表就会被当作元组里的一个元素,
加 * 号后就相当于列表里每个元素都是元祖的一个元素了。就会向元组里的每个成员都发出讯息了。
'''

def send_alert(msg,*users,age):
  for u in users:
    print('报警!请及时查看...',u,msg)
send_alert('你的系统已濒临崩溃!','sc','qh',age=22)

'''
'*users‘此时会默认获取前一个位置参数之后所有的元素,若传参时最后不指定关键参数就会报错,age无法获取传值
'''

非固定传参方式二:

此方式允许传入多个参数,可根据定义打包成元组或字典。示例如下:


#-*-coding:utf-8-*-

def func(name,*args,**kwargs): # 形参依次是位置参数,元组,字典
  print(name,args,kwargs)

func('Hope',22,'CN','tomorrow') #输出:Hope (22, 'CN', 'tomorrow') {}
func('Try',21,'will',addr='HG',num=666) #输出:Try (21, 'will') {'addr': 'HG', 'num': 666}

dit = {'major':'Math','interest':'reading'}
func('want',*['day','up'],**dit) #输出:want ('day', 'up') {'major': 'Math', 'interest': 'reading'}

至此,Python中常用的函数传参方式已全部介绍完毕。希望这些内容能帮助您提升编程技能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。