前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python的函数参数

Python的函数参数

作者头像
py3study
发布于 2020-01-07 13:24:04
发布于 2020-01-07 13:24:04
1.2K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

前言

python中 函数的参数可以分为两大类形参和实参~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(x, y):     # x, y 就是形参
    print(x, y)

func(2, 3)           # 2, 3 就是实参

- 形参

形参(如上面的x, y)仅在定义的函数中有效,函数调用结束后,不能再使用该形参变量。在调用函数时,该函数中的形参才会被分配内存,并赋值;函数调用结束,分配的内存空间也随即释放~

- 实参

即在调用函数时,向该函数的形参传递确定的值(必须是确定的值)。传递的值可以是常量、变量、表达式、函数等形式~

在形参和实参中又可以细化为多种参数,例如形参中有 位置形参,默认形参,可变长参数...;实参中有位置实参,关键字实参等,下面一一介绍~

位置参数

位置参数顾名思义,按照从左到右的顺序依次定义的参数。位置参数有两种:位置形参和位置实参。上面示例中,func函数中的x,y就是位置形参,每一个位置形参都必须被传值。调用func时传递的2,3就是位置实参,位置实参与位置形参一一对应,不能多也不能少~

关键字参数

关键字参数针对实参,即实参在定义时,按照 key=value 形式定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(x, y, z):
    print(x, y, z)

func(1, z = 2, y = 3)

关键字参数可以不用像位置参数一样与形参一一对应,例如这里可以是 z 在前面,y 在后面。

使用注意点: 1)在调用函数时,位置实参 必须在 关键字实参的前面~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(x, y, z):
    print(x, y, z)

# 位置参数和关键字参数混合使用的时候
func(1, z = 2, y = 3)      # 正确

func(x = 1, z = 2, 3)      # 错误

2)一个形参不能重复传值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(x, y, z):
    print(x, y, z)

func(1, x = 2, y = 3, z = 4)     # 错误,形参 x 重复传值

默认参数

默认参数即在函数定义阶段,就已经为形参赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def function(x, y=10):   # y 即为默认参数
    pass

# 函数调用阶段,必须为 x 传值(位置形参),可以为 y 传值,也可以不传,不传值就使用默认值 10

function(1)    # x = 1,y = 10
function(1,2)    # x = 1,y = 2

默认参数使用的注意点: 1)定义函数时,默认形参必须放在位置形参后面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(y = 10, x):     # 错误
    pass

def func(x, y = 10):    # 正确
    pass

2)默认参数通常要定义成不可变类型,例如:数字,字符串,元组等;虽然语法上支持定义成可变类型,但一般不建议这么做

3)默认参数只在定义阶段被赋值一次,如下示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x=10
def func(name, age = x):
    pass

x=20
func('hello')

Tip:func函数在定义时,age 只被赋值一次,即 age=10,下面重新指定了 x=20,不会再作用于函数中的 age 参数

可变长参数

在定义函数时,若不确定调用时需要传入多少个参数,这时就可以使用可变长参数,即实参的个数不固定

可变长参数 可以分为两类: 1)按位置定义的可变长度的实参(*) 2)按关键字定义的可变长度的实参(**)

- 按位置定义的可变长度的实参

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(x, y, *args):   # *args 会把传入的 多余的 参数以一个元组的形式存放,元组的变量名就是args
    print(x, y)
    print(args)

func(1, 2, 3, 4, 5, 6)   # x=1, y=2, args=(3,4,5)

# 输出结果:
1 2
(3, 4, 5, 6)

Tip:'args = (3, 4, 5, 6)',所以 '*args = *(3, 4, 5, 6) ',在调用函数时,也可以使用如下方式传值( * 是用来处理位置参数的,表示把后面的元组拆开)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func(1, 2, *(3, 4, 5, 6))          # 等同于 func(1, 2, 3, 4, 5, 6) 
# 输出结果:                       # 结果一致
1 2
(3, 4, 5, 6)

- 按关键字定义的可变长度的实参

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(x, y, **kwargs):         # **kwargs 会把多传入的参数以 dict 形式存放
    print(x, y)
    print(kwargs)

func(1, 2, a = 3, b = 4, c = 5)  # x=1, y=2, kwargs={'a': 3, 'b': 4, 'c': 5}

# 输出结果:
1 2
{'a': 3, 'b': 4, 'c': 5}

Tip:'kwargs = {'a': 3, 'b': 4, 'c': 5}',所以 ' **kwargs = **{'a': 3, 'b': 4, 'c': 5}',在调用函数时,也可以使用如下方式传值(** 表示关键字形式的实参,** 会将字典拆开,以关键字的形式传入)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func(1, 2, **{'a': 3, 'b': 4, 'c': 5} )  # 等同于 func(1, 2, a = 3, b = 4, c = 5)
# 输出结果:                                # 输出结果一致
1 2
{'a': 3, 'b': 4, 'c': 5}

接收任意长度、任意形式参数的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(*args,**kwargs):
    pass

调用方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func(1, 2, 3)            # 参数被 * 接受,转成元组,保存在 args 中
func(1, x=1, y=2)    # 1 与上述一致,x=1, y=2** 接受,转成字典的形式,保存在kwargs中

# 前面已经提过,位置实参和关键字实参混合使用时,要注意关键字实参必须放在位置实参的后面~

命名关键字参数

定义函数时,* 号后面的形参就是 命名关键字参数,在调用时,命名关键字参数 必须要传值,而且必须要以关键字的形式传值,还有命名关键字并不常用~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(*, name, age):         # name 和 age 就是 命名关键字参数
    print(name)
    print(age)

func(name = 'abc', age = 2)  # name 和 age 必须以关键字的形式传值

命名关键字参数的使用示例。前面提过 默认形参必须放在位置形参后面,如下示例的函数定义中,name 和 age 都是命名关键字参数(不是默认形参,也不是位置形参),name 是命名关键字参数的默认值,所以如下示例中的函数定义方式并没有问题~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(*, name='kitty', age):
    print(name)
    print(age)

func(age=2)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python入门之函数的形式参数与实参/参数的具体使用方法
 本篇目录:     一、 函数参数之形式参数与实参     二、 函数参数的具体使用 #1、位置参数:按照从左到右的顺序定义的参数 位置形参:必选参数 位置实参:按照位置给形参传值 #2、关键字参数:按照key=value的形式定义的实参 无需按照位置为形参传值 注意的问题: 1. 关键字实参必须在位置实参右面 2. 对同一个形参不能重复传值 #3、默认参数:形参在定义时就已
Jetpropelledsnake21
2018/05/02
1.5K0
Python基础07-函数
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
2740
软件测试|什么是Python函数及名称空间?
在下面这个函数中, name和age 都是必选参数,在调用指定参数时,如果不使用关键字参数方式传参,需要注意顺序
霍格沃兹测试开发Muller老师
2023/02/07
9200
python函数基础-参数-返回值-注释-01
函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分
suwanbin
2019/09/26
1.8K0
python函数基础-参数-返回值-注释-01
函数的基本使用(二)
注意!可变长形参定义格式* 和 * * 后面的变量名其实可以随便定义,但是在python中推荐使用 * args和 ** kwargs!!
HammerZe
2022/03/24
3670
函数的基本使用(二)
可变长参数,函数的嵌套,名称空间,关键字
形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数。需要注意的是:*后的参数名约定俗成为args。
小小咸鱼YwY
2019/07/24
1.2K0
Python的参数
在定义函数时,可以为形参提供默认值。对于有默认值的形参,调用函数时如果为该参数传值,则使用传入的值,否则使用默认值。
神秘的寇先森
2020/02/19
6650
Python函数参数之全面讲解
Python函数参数 Python函数参数 本文主要介绍Python的函数参数,各种形式的参数。建议动手试试,可以加深理解。 函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂的逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以
1846122963
2018/03/09
1.4K0
你所不知道的Python | 函数参数的演进之路
函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的代码,也能处理复杂的调用。
simpleapples
2018/10/18
4710
关于python函数,你该了解这些
形参全名形式参数,又称虚拟变量。实参和形参可以重名。形参只是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。必须注意实参的个数,类型应与形参一一对应。
天寒雨落
2022/11/22
2970
关于python函数,你该了解这些
Python基础(五) | 函数及面向过程编程详解
由上可见,列表的地址并没有发生变化。每次操作就是在原地址列表上进行操作,内容发生了变化,因此就好像有了记忆功能一样。因为默认参数被设置为列表这种可变类型。
timerring
2022/09/27
8390
Python基础(五) | 函数及面向过程编程详解
Python之函数系列(一)
 对于位置参数而言,形参及实参需要一一对应,若有时不确定需要哪些参数或为了日后能很好的扩展,Python中提供了可变长参数
py3study
2020/01/14
3440
Python传入参数的几种方法
Python唯一支持的参数传递方式是『共享传参』(call by sharing)
py3study
2020/01/07
4.1K0
函数基础之函数定义至函数的参数笔记
默认形参:1、如果不给它传值,它就会使用默认值,如果调用的时候给它传值它就会使用默认值。2、默认形参必须放在位置形参后面。
GH
2022/05/10
3910
Python Day3
#如果是windows平台一般还要加上一个小r,意思是取消路径中/的转义功能(不用写//了) #默认t,指的是文本文件,文本里面存放的是字符,因此涉及到字符编码,如果不指定使用什么字符编码打开就按默认操作系统默认编码打卡,windows默认GBK f=open(r'a.txt','r',encoding='utf-8') #读 #这一步说明发送了一个请求给操作系统,把某个文件已什么字符编码打开,同时还拿到了一个变量f
py3study
2020/01/03
5590
python基础—函数参数
注意:  最后一个参数的顺序是错误的,因为可变的位置参数,是不能放在关键字参数后面的,否则会出错。
dogfei
2020/07/31
3330
刚转行1年测开新手:学习编程几点经验分享
大家好,我叫黎潘,很高兴有机会给大家分享一些我的学习感受,作为一名零基础转行刚一年的测试新手来说,深知自己在技术经验方面落后太多,难免会有急于求成的心态,这也就导致自己在学习新知识时似懂非懂,刚开始学完那会还胸有成竹,一段时间之后却又忘的一干二净,导致我要不停回去复习,还始终不得要领,难以在实践中灵活运用。
测试开发技术
2021/03/25
4140
day11(函数参数,函数对象,打散机制
一,复习 # 什么是函数:具体特定功能的代码块 - 特定功能代码块作为一个整体,并给该整体命名,就是函数 # 函数的优点: # 1.减少代码的冗余 # 2.结构清晰,可读性强 # 3.具有复用性,开发效率高,维护成本低 # 如何定义一个函数:用def关键词来声明函数 ''' def fn(参数列表): 函数体 return 函数的返回值 ''' # -- 定义函数时,函数体不会被执行 | 函数必须先定义后使用 # 函数的四部分: # 函数名:存放着函数的地址,是调用函数
py3study
2020/01/17
5610
Python中的函数(一)
数学函数的定义:一般在一个变化过程中,如果有两个变量,X,Y,并且对于x的每一个确定值,y都有唯一与之对应的值,那么我们把x称为自变量,y为因变量,y为x的函数。x的取值范围就是函数的定义域。   如 : y = x + 5
py3study
2020/01/19
6860
可变长参数、函数的嵌套、名称空间和作用域学习笔记
nick说:人生疾苦唯有自救,这是你相信IT的最后一次机会。这个时候必须得逼自己一把,只有对自己够狠才能慢慢强大。昨天看一哥们在博客上说每天大喊一遍python第一java第二,python大法无所不能,给自己以一个乐观积极的态度好好学习天天向上。加油,希望我们每一个人都不负光阴。
GH
2022/05/10
4120
可变长参数、函数的嵌套、名称空间和作用域学习笔记
相关推荐
Python入门之函数的形式参数与实参/参数的具体使用方法
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验