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. Day19-apache

    HTTPD(俗称apache) 简介:目前来说,Linuxweb服务器主要用apache与nginx. 1.web服务器的输入/输出结构: 单线程I/O结构 多线程I/O结构 复用的I/O结构,单个线 ...

  2. 听说你还搞不定java中的==和equals?

    相信很多读者关于==和equals懂了又懵,懵了又懂,如此循环,事实上可能是因为看到的博客文章之类的太多了,长篇大论,加上一段时间的洗礼之后就迷路了.本篇文章再一次理清楚.当然如果觉得本文太啰嗦的话, ...

  3. [apue] apue_db:一个可以充当"注册表"的 key-value 数据库

    apue 最后两章都是通过一个完整的实例来解释一些 linux 功能,第20章就是通过一个数据库实例来解释文件锁的使用, 说实话,当时没兴趣,因为满页都是源码和解析,有点看不下去.但是再拾起来硬着头皮 ...

  4. RMI 使用笔记

    Java 远程方法调用,即 Java RMI( Java Remote Method Invocation ) .顾名思义,可以使客户机上运行的程序能够调用远程服务器上的对象(方法). 下面主要介绍一 ...

  5. Linux基础:Day02

    Linux文件管理 创建 touch vim/vi echo重定向 touch 管理:atime mtime ctime touch 文件名  //如果文件不存在就创建文件 touch -a -t [ ...

  6. Hadoop(十):本地IDEA链接远程Hadoop

    本文使用的Hadoop为2.7.7,版本如果不同要下载相应版本的文件 配置本地的Hadoop库(不需完整安装,但是要有环境支持) 下载文件 https://github.com/speedAngel/ ...

  7. 页面DIV弹出层 JS原生脚本

    <script type="text/javascript"> /*         * 弹出DIV层         */ function showDiv() { ...

  8. OS-DOS/CMD/Windows/各类软件快捷键等使用总结

    一.快捷键 很多软件的快捷键使用相通,在不确定的情况下,先试试其他软件的快捷键的使用方法 Windows电脑快捷键 HP惠普笔记本 win+E 打开文件管器 win+D 显示桌面 win+L 锁计算机 ...

  9. TP字段加一操作

    经常有需要对某个数据表的计数字段进行加减操作,我们来看下在ThinkPHP中的具体使用办法.最简单的,使用下面方法对score自动加1: M('User')->where('id=5')-> ...

  10. mysql--> find your databases' local position

    1. find file:  "my.ini" 2.Using ctrl+F  find string "datadir" then you can see y ...