python中函数的参数

形参:定义函数时代表函数的形式参数

实参:调用函数时传入的实际参数

列如:

def f(x,y):  # x,y形参
print(x, y) f(1, 2) # 1, 2 实参

定义函数时,形参分为普通参数,默认参数,和动态参数

列如:

def f(x, y):  # 普通参数
pass def f(x, y=1): # y=1是默认参数
pass def(x,y=1,*args): # *args普通动态参数
pass def(x,y=1,**kwargs): # **kwargs关键字动态参数
pass

调用函数时,根据调用时的写法,可以分为位置参数和关键字参数

def f(x,y):
print('x=',x,'y'=,y) f(1,2) #我们这样调用的时候1,2叫位置参数,会根据传入的实参
#位置去对于形参的位置 输出结果为:
x= 1 y= 2 f(x=1, y=2)
f(y=2, x=1) #我们这样调用的时候,y=2,x=1叫做关键字参数
#可以不用按照位置写

那调用的时候同时写位置参数和关键字参数呢

还是以上面的f函数为例

f(x=1, 2)  # 当我们吧关键字参数放前面

执行结果如下:

  File "F:/python/tt.py", line 9
f(x=1, 2)
SyntaxError: non-keyword arg after keyword arg

得出结论:关键字参数不能放在位置参数前面,这个是语法规定

f(1, x=2)  

执行结果:
Traceback (most recent call last):
File "F:/python/tt.py", line 9, in <module>
f(1, x=2)
TypeError: f() got multiple values for keyword argument 'x'

得出结论:如果位置参数和关键字参数需要同时匹配

那么根据这两条,我们还可以总结出定义函数时的规范:

1.默认参数要写在普通参数的后面

2.关键字动态参数**kwargs要写在最后面

我们再来看看动态参数是怎么运行的:

普通动态参数:

def f(x, *args):

    print(args)

f(1, 2, '', [1, 2, 3])
f(3, 2, [1, 2, 3]) 运行结果:
(2, '', [1, 2, 3])
(2, [1, 2, 3])

普通动态参数会将传入的所有多余的位置参数组合成一个元祖

关键字动态参数:

def f(x, y=1, **kwargs):

    print(kwargs)

f(1, 2, z=2, a=3, d=4)
f(3, 2, xx=2, name='xinlan', age=18) 运行结果:
{'a': 3, 'z': 2, 'd': 4}
{'age': 18, 'xx': 2, 'name': 'xinlan'}

关键字动态参数会将传入的多余的关键字参数组合成一个字典

案例:

d = {
'name': 'xinlan',
'age': 18
} def f(**kwargs):
print(kwargs) f(**d)
f(name='xinlan', age=18) 运行结果:
{'name': 'xinlan', 'age': 18}
{'name': 'xinlan', 'age': 18}

结论:将一个字典前加上**传入一个函数,相当于将这个字典中的键值对以关键字参数的形式传入函数。

案例:

l = ['python', 'php', 'java']

def f(*args):
print(args) f(*l)
f('python', 'php', 'java')
运行结果:
('python', 'php', 'java')
('python', 'php', 'java')

结论:将一个列表前加上*传入一个函数,相当于将这个列表中的元素按顺序传入函数

默认参数

默认参数的作用就是,如果我们在调用函数的时候不传入相应的参数,那么函数就用默认值

在定义函数的时候我们容易出现一个错误,看下面的例子:

def f(y=[]):
y.append('ok')
print(y) f()
f()
执行结果:
['ok']
['ok', 'ok']

我们调用了两次f函数,发现输出的结果不一样。这是因为列表,字典等这样的数据类型在调用的时候是引用它们的地址。

解释器在执行y=[]的时候,y指向的一个列表的引用地址,这个列表发生变化后,y指向的地址是没有变的

所以我们在定义函数的时候,默认参数不要定义成列表,字典等数据类型。当然我们有解决办法:

def f(y=None):  # 这里None是一个占位符
if not y:
y = []
y.append('ok')
print(y) f()
f() 执行结果 ['ok']
['ok']

讲讲python中函数的参数的更多相关文章

  1. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

  2. Python中函数传递参数有四种形式

    Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...

  3. python 中函数的参数

    一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...

  4. python中函数的参数解析

    python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...

  5. python中函数的参数

    函数参数(一) 思考一个问题,如下: 现在需要定义一个函数,这个函数能够完成2个数的加法运算,并且把结果打印出来,该怎样设计?下面的代码可以吗?有什么缺陷吗? def add2num(): a = 1 ...

  6. Python中函数的参数-arguments

    归纳起来,Python中函数的定义形式和调用形式主要有如下几种形式: # 函数的定义形式 def func(name) # 匹配positional参数或者keyword参数 def func(nam ...

  7. python中函数的参数和返回值

    目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...

  8. Python中函数的参数带星号是什么意思?

    参数带星号表示支持可变不定数量的参数,这种方法叫参数收集. 星号又可以带1个或2个,带1个表示按位置来收集参数,带2个星号表示按关键字来收集参数. 1.带一个星号的参数收集模式: 这种模式是在函数定义 ...

  9. python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参

    1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...

随机推荐

  1. 性能优化之三:将Dottrace过程加入持续集成

    之前分享过一篇如何做接口性能分析的文章,但是整个分析过程有点繁琐,需要写一个控制台程序调用被测接口,再预热.启动dottrace追踪,最后才能得到我们想要的性能分析报告.如果有办法一键生成性能分析报告 ...

  2. 封装属于自己的Python包

    将自己的程序打包为whl/tar.gz文件 有时候自己写了一个开发基本类,我们把这个类打包为whl或者tar.gz文件,这样的话同事也可以使用自己开发的基本类了 安装setuptools pip in ...

  3. Educational Codeforces Round 83 (Rated for Div. 2)

    A. Two Regular Polygons 题意:给你一个 正n边形,问你能否以这个 n 的其中一些顶点组成一个 m边形, 思路 :如果 n % m == 0 ,就可 收获:边均分 B. Bogo ...

  4. Step by Step!教你如何在k3s集群上使用Traefik 2.x

    本文来自边缘计算k3s社区 作者简介 Cello Spring,瑞士人.从电子起步,拥有电子工程学位.尔后开始关注计算机领域,在软件开发领域拥有多年的工作经验. Traefik是一个十分可靠的云原生动 ...

  5. STM32F103ZET6独立看门狗

    1.IWDG简介 STM32F103ZET6的独立看门狗(IWDG)是由内部LSI(内部约40KHZ低速时钟)时钟驱动的.由于IWDG是由内部低速时钟驱动,所以就算主时钟发生故障,IWDG依然能够工作 ...

  6. CTF中常用的php伪协议利用

    1.file:// 作用: 用于访问文件(绝对路径.相对路径.网络路径) 示例: http://www.xx.com?file=file:///etc/passsword 2.php:// 作用:访问 ...

  7. 1006 Sign In and Sign Out (25 分)

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  8. python3(十九)Partial func

    # 偏函数(Partial function) # 如int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换 # 但int()函数还提供额外的base参数,默认值为10 ...

  9. Powershell追踪路由

    一般情况下,我们可以通过Cmdlet命令来实现路由追踪 我们是否能尝试通过Powershell完成此功能呢? 脚本具体如下,可以直接粘贴 function GetTraceRoute($hostnam ...

  10. 并查集---体会以及模板&&How Many Tables - HDU 1213

    定义&&概念: 啥是并查集,就是将所有有相关性的元素放在一个集合里面,整体形成一个树型结构,它支持合并操作,但却不支持删除操作 实现步骤:(1)初始化,将所有节点的父亲节点都设置为自己 ...