一、参数介绍

形参:在定义函数阶段定义的参数成为形式参数,简称形参,相当于变量名

实参:在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值

形参和实参的关系:

​ 在调用阶段,实参(变量值)会绑定给形参(变量名)

​ 这种绑定关系只能在函数体内调用

​ 实参和形参的绑定关系在函数体调用时生效,函数调用结束解除绑定关系

二、形参与实参的具体使用

2.1位置参数

定义:按照从左到右的顺序依次定义的参数称之为位置参数

位置形参:在函数定义阶段,按照从左到右的顺序直接定义的“变量名”

特点:必须被传值,不能多也不能少

位置实参:在函数调用阶段,按照从左到右依次传入值

特点:按照顺序和形参一一对应

2.2关键字参数

关键字实参:在调用阶段,按照key=value的形式传入的值

特点:指名道姓的传给某个形参值,可以完全不按照顺序

2.3关键字实参和位置实参混合使用时

强调1:位置实参必须放在关键字实参前

def foo(x,y):
print(x,y)
foo(x=1,2)#错误示范
foo(1,y=1)#正确示范

强调2:不能为同一个形参重复传值

2.4默认参数

默认形参:在定义阶段,就已经给形参赋值

特点:在定义阶段就已经给他赋值了,在调用阶段可以不给他传值(非要传也可以)

如果在一个函数内,某一个形参他的值在绝大部分都是不变的,就可以用到默认参数

def foo(name,age,sex="male"):
print(name,age,sex)
foo("hz",18)
foo("lxt",19)
foo("egon",1,sex="flame")

2.5位置形参和默认形参混用

强调1:位置形参必须在默认形参前

强调2:默认参数的值是在函数定义阶段被赋值的,准确的说被赋予的是内存地址的值此处区别可变与不可变类型,虽然用可变类型不会报错,但是默认不使用可变类型作为参数

#不可变类型
m=11
def foo(x,y=m):
print(x,y)
m=12
foo(1)
>>>1 11 #可变类型
n=[123,]
def fpp(x,y=n):
print(x,y)
n.append(456)
fpp(1)
>>>1 [123, 456]

强调3:函数的理想状态,函数的调用只跟函数有关,不受外界代码影响

def loo(a,b,c,l=None):
if l is None:
l=[]
l.append(a)
l.append(b)
l.append(c)
print(l)
n = [222]
loo(1,2,3,n)
>>>[222, 1, 2, 3]

2.6 可变长度的参数(*与**用法)

可变长度是指在调用函数时,传入的值(实参)的个数不固定

而实参是用来给形参定义的,所以需要有一个对应的参数去接受那些溢出的实参

2.6.1可变长度的位置参数

第一类:*参数名:用来接受溢出的位置实参,

溢出的位置实参都会被*保存成一个元组格式然后赋值给这个参数名,约定俗成这个参数名为args

def foo(*args):
print(args)
foo(1,2,3,4,5,6,4,7,)
>>>(1, 2, 3, 4, 5, 6, 4, 7)

第二类:*在实参中,会把这后面的值全部打散成位置实参,可以被for循环遍历的都可以放在这里

def foo(a,b,c):
print(a,b,c)
foo(*(1,2,3))
>>>1 2 3

2.6.2可变长度的关键字参数

第一类:**形参名:用来接受溢出的关键字实参,可以将溢出的关键字实参都保存成字典的格式,然后赋值给后面的参数名,约定俗成是kwargs

def foo(a,b,**kwargs):
print(a,b,kwargs)
foo(1,2,x=1,xx=2,xxx=3)
>>>1 2 {'x': 1, 'xx': 2, 'xxx': 3}

第二类:**实参(只能是字典格式),会把这个实参打散成关键字实参

def foo(a,b,):
print(a,b)
foo(**{"a":1,"b":2})
>>>1 2

混用实例

#注意:在混用时,*args必须在*kwargs之前
def func(x,*args,**kwargs):
print(args)
print(kwargs)
func(1,2,3,4,5,6,7,8,y=2,z=3)
>>>(2, 3, 4, 5, 6, 7, 8)
>>>{'y': 2, 'z': 3}

特殊混用实例

def index(x,y,z):
print('index=>>> ',x,y,z) def wrapper(*args,**kwargs): #args=(1,) kwargs={'z':3,'y':2}
index(*args,**kwargs)
# index(*(1,),**{'z':3,'y':2})
# index(1,z=3,y=2) wrapper(1,z=3,y=2) # 为wrapper传递的参数是给index用的

day14 参数的更多相关文章

  1. [Day14]Eclipse高级、类与接口作为参数返回值

    l  不同修饰符的使用   类,最常使用public修饰   成员变量,最常使用private修饰   成员方法,最常使用public修饰 l  自定义数据类型的使用   类作为方法参数时,说明要向方 ...

  2. day14 Python函数之可变长参数

    函数参数 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.因此,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量 2.实参可以是常量.变量.表 ...

  3. python_way day14 CSS

    python_way day14 CSS 层叠样式表 一.CSS作用域: 二.css标签选择器 三.css样式 一.css作用域: 基本用法:style="样式" <body ...

  4. Python之路,Day14 - It's time for Django

    Python之路,Day14 - It's time for Django   本节内容 Django流程介绍 Django url Django view Django models Django ...

  5. python学习 day14 (3月19日)----

    04 json # 1. 用于多种语言 交互 编程语言通用数据 # 内置的 不需要安装直接导入使用 import json # 导入 # # dumps loads dump load # dic = ...

  6. python的函数介绍 位置参数 关键字参数 默认参数 参数组 *args **kwargs

    1.数学意义的函数与python中的函数 数学意义的函数 y = 2*3+1 x =3 y =7 x是自变量,y是因变量 2.python中定义函数的方法 一个函数往往都是为了完成一个特定的功能而存在 ...

  7. day14(编码实战-用户登录注册)

    day14 案例:用户注册登录 要求:3层框架,使用验证码   功能分析 注册 登录   1.1 JSP页面 regist.jsp 注册表单:用户输入注册信息: 回显错误信息:当注册失败时,显示错误信 ...

  8. 学习日常笔记<day14>自定义标签

    1自定义标签 1.1第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 /** * 标签处理器类 * @author APPle * 1)继 ...

  9. python_way day14 CSS,莫泰对话框

    python_way day14 CSS 层叠样式表 一.CSS作用域: 二.css标签选择器 三.css样式 四.莫泰对话框: 一.css作用域: 基本用法:style="样式" ...

随机推荐

  1. 认识OSI七层模型

    概述: OSI全名(Open System Interconnect),是指定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架.层次:从低到高的层级:物理层.数据链路层.网络层.传 ...

  2. 【Spring Cloud 系列】 二、Spring Cloud Eureka 的第一印象

    Eureka : 翻译翻译,找到了!(惊讶语气) Spring CLoud 中的 Spring Cloud Eureka,用于 分布式项目中的服务治理.是对Netflix 套件中的Eureka 的二次 ...

  3. <Win10开发>一些小知识。

    这篇文章分享一下UWP开发的一些零散的小知识. 1.设置应用的最小尺寸 主要用在PC上,UWA在PC可以被鼠标随意摆弄,可大可小,界面的响应式设计是一大特点.不过有些时候还是要考虑,我们的App界面元 ...

  4. 最后一面挂在volatile关键字上,面试官:重新学学Java吧!

    最后一面挂在volatile关键字上,面试官:重新学学Java吧! 为什么会有volatile关键字? volatile: 易变的; 无定性的; 无常性的; 可能急剧波动的; 不稳定的; 易恶化的; ...

  5. conda 管理包

    查看当前环境已经安装的包 conda list 查看指定环境中的安装包 conda list -n python27 在Anaconda 库中搜索包 conda search numpy #模糊搜索 ...

  6. c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范

    c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范 #include <iostream> #include < ...

  7. linux环境下安装git(采用github下载git源码编译)

    [目的]:linux环境下 安装配置git成功 [准备条件]linux系统,git包 1.先行下载git包 -- 从github上https://github.com/git/git/releases ...

  8. 第一章、认识Shiro

    Shiro简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  9. JAVA相关基础知识

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  10. JavaWeb网上图书商城完整项目--day02-12.激活功能各层实现

    1.我们来看程序的代码 数据库层: 1.通过激活码查找到对应的用户 2.设置用户的激活状态 2.业务层 1.通过数据库接口通过验证码得到对应的用户 2.判断当用户是否为空,如果没有通过激活码查找到对应 ...