day11 函数的位置形参,位置实参,可变长位置形参,关键字形参
今天内容
函数的参数详解
形参与实参
形参及形式参数,就是在定义函数是括号中指定的参数(本质就是一个名字)
实参及实际参数,指的是在调用函数是传入的参数)(本质就是一个值)
在调用函数是就会把形参和实参绑定在一起(变量名)
在函数调用结束之后绑定关系就解除了
def func1(a,b)#a,b就是形参a=1,b=2
print(a)
print(b)
func1(1,2)#1,2就是实参
位置参数(用的最多)
根据调用阶段 参数分为两类 形参和实参
所以对应的 位置参数也有两种
位置形参
位置实参
位置,表示的是顺序,指从左往右来定义的参数就是位置参数
需要注意的是:
只要是定义了的位置形参都必须被传值
位置形参的数量与位置实参的数量必须一致,不能多传也不能少传
实参会按照传入的位置一次赋值给形参
def func(a,b,c)a,b,c都是位置形参
func(1,2,3)1,2,3都是位置实参
def register(name,password,sex):
print('my name is %s pwd:%s sex :%s)
register('123','rose','woman')
关键字参数(默认函数)
关键字实参
在调用函数时指明到姓的为形参赋值就称为关键字参数
优点:
可以打破传入参数的顺序,可以不与形参顺序相同
注意:
1、不管以什么样的方式传值,每一个形参都必须被传值、
2、关键字参数必须放在位置参数的后面
3、不能为同一个参数传多次值
到底是位置参数还是关键字参数是由实参决定
使用关键字传参时,实参的名字必须与形参一致
def func(a,b,c):
print(a)
print(b)
print(c)
func(1,2,c=3)与位参数没区别
func(c=3,1,2)语法错误,关键字参数出现在了位置参数的前面
func(c=3,a=1,b=2) 打破位置参数的顺序限制
def register(name,pwd):
print('name is'name)
print('password is',pwd)
register(name='egon',pwd='123')
register(jack,pwd='123')
默认形参
在定义时,就已经为形参指定了一个值,那么这个形参就称为默认形参
特点:
在调用时可以不为默认形参传值,使用时就是默认值
场景:
当然也可以传值,这样的话内部使用的就是你传的值
当函数中的某一形参经常出现重复的值时,就将其指定为默认形参,可以简化调用代码
需要注意的是:
不应将默认形参的值设置成一个可变类型
会导致每次函数调用都共用同一个默认参数,我们应该将函数设计为独立的类型,每次调用互不干扰
只能是不可变类型
需要注意,
默认形参必须放在非默认形参后面
def reg(name age,sex='fenamle'):
print(name,age,sex)
reg=('rose',18,)
reg=('rose',18,)
reg=('egon',18,'male')
def reg(name ,sex,hobby,li=[]):
li.append(hobby)
print(name,sex)
print(li)
reg('bgon','man'['play','music','move'])
reg('cgon','man'['play','music','move'])
def reg(name ,sex,hobby):
li.append(hobby)
print(name,sex)
print(hobby)
reg('bgon','man'['play','music','move'])
reg('cgon','man'['play','music','move'])
#可以不用完全按照顺序来传值
open(‘xxx’,'r',encoding='utf-8')
可变参数(重难点)
可变长度参数指的是,可以传任意个数的实参
传入实参是为了给形参来使用,那就意味这,形参可以接收任意个数实参的能力
也就是* 和**
带*的形参表示可以接收任意个数的实参,接收到的参数会被打包成元组类型
形参的名字可以任意,但建议使用args,是参数的缩写
# iterable可迭代的,只要可以被for in 循环的
带*的实参会自动将*后对应的值打散'abc'打散a,b ,c
def func(a,b,c)
print(a,b,c,)
func(1,2*'abc')#打散a,b ,c
位置形参与可变长形参混合使用
当可变长形参出现在了位置形参的前面时,那么后面的位置形参必须以关键字形参来传入
当*可变长形参出现在位置形参后面,会按照顺序给前面位置形参,剩余的值就赋值给*args
当可变长形参存在关键字形参时不能接受,会报错。
**不能接收位置实参
把传入的关键字实参打包成字典
**使用
形参中如果带有**,会把关键字实参打包成字典类型传入
先为前面的形参赋值,后续的多余的关键字参数形参赋值给**
只能接收多出来的关键字实参
def func(a=1,b=2,**kwargs)
print(a,b,kwargs)
func=(a=-1,b=-2,s=10)
实参中带**,会把**后的字典(也必须是字典类型)打散成关键字实参(**{a:4})相当于(a=4)
def func(name):
print(name)
func(**{'name':'rose'})(name=rose)
写一个带有可变长位置形参的函数
def func(name,pwd,**args)
if name=='bgon'and pwd=='123';
if 'phone' in kwargs:
if kwargs['phone']=='110'
print('login successful')
else:
print('请传入手机号验证‘)
else:
print(error name or pwd)
func('bgon','123')
func(’bgon','123',phone='110')
*和** 可以为函数预留拓展性空间,后期可以根据需求而旧的函数调用方式也不会出现问题
简单的说就是提高函数的拓展性
该方式可以接收任意个数的位置实参和关键字实参
但要注意顺序,位置实参必须在关键字之前
在装饰器中
def inner(name,sex,age)
print(name,sex,age)
def func(*args,**kwargs)
print(args)
print(kwargs)
inner(*args,**kwargs)#inner(1,2,3,a=10,b=20)
outer(1,2,3,a=10,b=20)
#上述写法,可以将outer接收到的所有参数,原模原样的传递给inner函数。
def func(*args,a,b,)
print(a,b,args)
func(1,2,3,a=4,b=5)
def func(*args)
pass
func(1)
func(1,2)
func(1,2,3)
day11 函数的位置形参,位置实参,可变长位置形参,关键字形参的更多相关文章
- 洗礼灵魂,修炼python(21)--自定义函数(2)—函数文档,doctest模块,形参,实参,默认参数,关键字参数,收集参数,位置参数
函数文档 1.什么是函数文档: 就是放在函数体之前的一段说明,其本身是一段字符串,一个完整的函数需要带有函数文档,这样利于他人阅读,方便理解此函数的作用,能做什么运算 2.怎么查看函数文档: func ...
- python中非关键字可变长参数和关键字变量参数的区别
#非关键字可变长参数 def add(*arg): return type(arg) print add() #打印结果 <type 'tuple'> #关键字变量参数 def ab ...
- 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)
apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值 ...
- day11函数(形参实参)
形参与实参 def fn(形参们): pass # 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合 # 注: ...
- python之函数形参、实参、可变长参数整体使用和分类
形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...
- Day 10 函数的形参,实参
今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值''''''注:形参随着函数的调用 ...
- day-11函数的形参与实参
形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...
- (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args|kwargs)
什么是函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需调用其函数名即可 1.减少重复代码 2.使程序变的可扩展 3.使程序变得易维护 定义函数的语法 形参 主要的作 ...
- day_11函数的形参与实参
昨天讲了函数的定义和简单分类 1:什么是函数:具体特定功能的代码快 --特定功能代码作为一个整体,并给该整体命名,就是函数. 函数的优点: 1:减少代码的冗余 2:结构清晰,可读性强 3:具有复用性, ...
随机推荐
- Innobackupex(xtrabackup)物理备份
1. Percona XtraBackup介绍 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个完全开源的用于 MySQL 数据库物理热备的备份工具,在备份过程中不 ...
- Linux性能查询常用指令
类别 监控指令 描述 备注 内存 瓶颈 free 查看内存使用 cpu 瓶颈 top -Hp 查看cpu使用最高的进程 vmstat 3(间隔时间) 100(监控次数) 查看swap i ...
- jq的load
1.用于监听加载是否完成 当指定的元素(及子元素)已加载时,会发生 load() 事件. 该事件适用于任何带有 URL 的元素(比如图像.脚本.框架.内联框架). 根据不同的浏览器(Firefox 和 ...
- 使用recyclerView item布局match_parent属性失效的问题
https://blog.csdn.net/overseasandroid/article/details/51840819
- Git命令执行漏洞
Git命令造成的反弹shell 漏洞描述: Git LFS可以.lfsconfig使用LFS由存储库中的文件配置(部分),并且可以将Git LFS指向ssh://. [lfs] url = ssh:/ ...
- python问题:TypeError: a bytes-like object is required, not 'str'
源程序: import socket target_host = "www.baidu.com" # 127.0.0.1 target_port = 80 # 建立一个socket ...
- oracle 索引的创建与使用
什么是数据库索引 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快. 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索引是 ...
- linux下cmake安装mysql 源码
1.假设已经有mysql-5.6.21.tar.gz以及cmake-2.8.4.tar.gz两个源文件 (1)先安装cmake(mysql5.5以后是通过cmake来编译的) [root@ rhel5 ...
- About me & OI这一年
1 最近碰到一些 OIers 问我学 OI 的经历 回忆了一下,我做的第一道题是A+B Problem,时间:2018年2月15日 呀,正好一年了 2 我是来自 HB 的 OIer 一枚 现在高一,就 ...
- UniGUI 如何进行 UniDBGrid 的单元 Cell 的计算 ?
来源:http://forums.unigui.com/index.php?/topic/10508-update-dataset-events-in-unidbgrid/?hl=unidbgrid ...