Python 入门基础9 --函数基础2 实参与形参
今日内容:
一、函数参数
1.形参与实参定义
2.实参分类
3.形参分类
4.可变参数的整体使用
一、形参与实参定义
def fn(参数们):
pass
1.1 形参
定义函数,在括号内声明的变量名,用来接外面传来的值
1.2 实参
调用函数,在括号内传入的实际值,值可以为常量,变量,表达式或三者的组合
注:
1.形参随着函数的调用而产生,随函数调用结束而销毁(有特例)
2.在函数的外部不能直接使用函数的形参,原因:函数调用结束后,形参会被销毁
3.外部产生了的变量,内部可以使用
4.在函数调用()中出现的参数(外界实际存在的值):实参
5.调用函数时,实参可以有常量,变量,表达式或三种的组合
二、实参分类
2.1 位置参数
不用明确形参名的传参方式,一定按照位置给形参(必须按照顺序)
def fn1(a, b, c):
print(a, b, c)
# 位置实参:必须按照顺序
fn1(10, 20, 30)
fn1(30, 20, 10)
2.2 关键字参数
必须明确形参的名字和为形参传值,可以不按照位置(可以不按顺序传递,形参按名字取值)
def fn1(a, b, c):
print(a, b, c)
# 关键字传参:可以不按照顺序传递,形参按名字取值
fn1(a=10,b=20,c=30)
fn1(c=30,b=20,a=10)
2.3 二者混用
1.关键字实参必须出现在位置实参之后
2.多个位置实参按位置传参
3.关键字形参从关键字实参处拿值,可以不用按照指定顺序
# 两者混用:关键字实参必须出现在位置实参之后
def fn2(a, b, c, d, e, f):
print(a, b, c, d, e, f)
fn2(10, 20, 30, e=100, f=500, d=200)
ps: 实参的作用:为形参传递值
三、形参分类
3.1 位置形参:
可以由位置实参或关键字实参来传值
# 位置形参
def fn3(a,b,c):
print(a,b,c)
fn3(1,2,3)
3.2 默认形参:
具有默认值,用 '=' 进行赋值,可以是 位置实参与关键字实参,还可以不传值(采用默认值)
# 默认形参具有默认值,用 = 进行赋值
def fn4(a=10,b=20):
print(a,b)
# 默认形参可以由 位置实参 与 关键字实参 来传值,还可以不用传值
fn4(20,30)
fn4(a=200,b=300)
fn4(100)
fn4(b = 100)
3.3 可变长位置形参:
只能由位置实参来传值
# 可变长形参只能由 位置实参 来传值
def fn6(a,b,*args):
print(a,b)
print(args)
fn6(1,20,30,40,50)
3.4 无初值关键字形参:
必须由关键字实参来传值,出现在 * 后的都是关键字形参
def fn7(a,b,*,c,d):
print(a,b)
print(c,d)
fn7(1,20,c=30,d=40)
3.5 有初值关键字形参:
可以由关键字实参来传值,也可以不传值
def fn8(a,b,*,c=10,d=20):
print(a,b)
print(c,d)
fn8(1,20) # 有初值关键字形参,不传参数,则输出默认值
3.6 可变长关键字形参:
与无初值关键字形参类似,同样需要传值
def fn(*, a, b=20, c, **kwargs):
print(a, b)
print(kwargs)
fn(d=40, e=50, a=10, c=30) # 以关键字形式传入实参,输出 字典类型
注:
1.各种形参出现的先后 :
位置形参 - 默认形参 - 可变长位置形参 - 无 | 有初值关键字形参 - 可变长关键字参数
2.可变长形参会以元组形式接收位置形参与默认形参未接收完的所有传入的位置实参
3.可变长关键字形参:
用来接收被没有被关键字形参接收玩的关键字形参,也只能由关键字实参来传值,用字典来存放数据
ps:可变长形参只能接收位置实参的值,位置实参还必须在关键字实参前,导致默认形参只能由位置实参来传值
重点:可变长位置形参整体赋值
四、可变参数的整体使用
# 可变长位置形参整体赋值
def fn7(*args):
print(args)
fn7(1,2,3,4,5,6)
# 单列集合(保护字符串)将该变量进行 打散 传值
# 打散
def fn8(*args):
print(args)
ls = [1,2,3,4,5]
fn8(ls) # ([1, 2, 3, 4, 5],)
fn8(*ls)
# 将ls 打散为1,2,3,4,5 再传值 => (1,2,3,4,5,)
# 可以理解为,将数组的所有值全部赋值给形参
# ---关键字形参------------
# 整体赋值
dic = {'name': 'Owen', 'age': 18}
def fn1(**kwargs):
print(kwargs)
fn1(**dic)
dd = {
'k1': [1, 2, 3, 4, 5],
'k2': {"name":"Bob"}
}
fn1(**dd)
def fn2(*args):
print(args)
ll = [1, [1, 2], {"name":"Bob"}]
fn2(*ll) # (1, [1, 2], {"name":"Bob"})
Python 入门基础9 --函数基础2 实参与形参的更多相关文章
- Python入门篇-生成器函数
Python入门篇-生成器函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.生成器概述 1>.生成器generator 生成器指的是生成器对象,可以由生成器表达式得到, ...
- Python入门篇-匿名函数
Python入门篇-匿名函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.匿名函数概述 1>.什么是匿名函数 匿名,即没有名字 匿名函数,即没有名字的函数 2>. ...
- python之旅:函数基础
一.引子 1.函数是什么 用函数与不用函数 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一 ...
- Python入门-内置函数一
什么是内置函数?就是python给你提供的拿来直接用的函数,比如print,input等等,截止到python版本3.6.2 python一共提供了68个内置函数,他们就是python直接提供给我们的 ...
- python中函数定义之实参、形参
一般在函数的定义中,会有一类变量---形参,它是函数完成其工作的一项信息.实参往往是调用函数时传递给函数的信息.我们在调用函数时,将要让函数使用的信息放在括号内.例如定义一个函数def greet_u ...
- python3基础(七)函数基础
Function 函数是一段组织好的能够实现特定功能或者逻辑的代码块,函数代码在文件执行时读入内存并不执行,在调用函数时执行,简单来说是把一段代码封装给一个函数名(可以用变量的概念去理解,即把一段代码 ...
- Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器
今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...
- Python 入门基础11 --函数基础4 迭代器、生成器、枚举类型
今日目录: 1.迭代器 2.可迭代对象 3.迭代器对象 4.for循环迭代器 5.生成器 6.枚举对象 一.迭代器: 循环反馈的容器(集合类型) 每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的 ...
- Python 入门基础12 --函数基础5 匿名函数、内置函数
今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...
随机推荐
- Java并发编程(详解wait(), notify(),sleep())
http://blog.csdn.net/luckyzhoustar/article/details/48179161
- 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS
郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统Me ...
- 第三周:构造一个简单的LINUX系统MENUOS
吕松鸿 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- C++中清空缓冲区
C++中标准输入cin有多种输入方式.. 这篇文章罗列的还是简要易懂的.C++输入cin详解...如果只是简单的使用cin>>的话,会单个token的读入.但是会忽略换行符,空格,制表符等 ...
- 第十周PSP&进度条
PSP 一.表格: D日期 C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 11月17号 站立会议 分配任务 13:00 13:30 0 3 ...
- CentOS下 NFS的简单使用以及windows 关在linux的NFS存储方法
1. 全部安装的情况下NFS已经安装到服务器上面了,如果没有安装的话 需要使用如下命令进行安装 yum -y install nfs-utils rpcbind 2. 创建需要使用的NFS目录 mkd ...
- delphi clientdataset判断某一行值是否存在
ClientDataSet的数据查找.我所介绍的心得和技巧都是用ClientDataSet来做范例,也可以应用于其他的一些DataSet.废话就不多说了.我们还是先看代码,让后再总结.1.Scanni ...
- 免费SSL证书申请 2018年至简教程
Let’s Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla.思科.Akamai.IdenTrust和EFF等组织发起,目的就是向网站自动签发和 ...
- obj.getClass() == Person.class 用于判断类型
obj.getClass() == Person.class 用于判断类型
- python--inspect模块
inspect模块主要提供了四种用处: 1.对是否是模块.框架.函数进行类型检查 2.获取源码 3.获取类或者函数的参数信息 4.解析堆栈 一.type and members 1. inspect. ...