码迷,mamicode.com
首页 > 编程语言 > 详细

python基础6-函数的参数

时间:2017-11-30 23:44:21      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:展现   不能   int   关键字   打印   应该   括号   阶段   pytho   

形参与实参
形参:在函数定义阶段,括号内定义的参数的称为形参,就相当于变量名
实参:在函数调用阶段,括号内定义的参数的称为实参,就相当于变量值
也就是说形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
二者区别:
实参:是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
形参:虚拟的,不占用内存空间,形参变量只有被调用时才分配内存单元

具体应用:
#1、位置参数:按照从左到右的顺序定义的参数
位置形参:必选参数
位置实参:按照位置给形参传值
#2、关键字参数:按照key=value的形式定义的实参
无需按照位置为形参传值
注意的问题:
1. 关键字实参必须在位置实参右面
2. 对同一个形参不能重复传值
#3、默认参数:形参在定义时就已经为其赋值
可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
注意的问题:
1. 只在定义时赋值一次
2. 默认参数的定义应该在位置形参右面
3. 默认参数通常应该定义成不可变类型
#4、可变长参数:
可变长指的是实参值的个数不固定
而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,*args 没有key值,**kwargs有key值。

实例1:
def test(x,y): #括号里面的就是位置形参
print(‘this x:%s‘ %x)
print(‘this y:%s‘ %y)
test(1,2) #再调用时向函数的位置形参传递的位置实参

实例2:
def foo(x,y): #定义形参
print(x,y)
foo(1,y=2) #这里在调用时1赋值给x这个是位置形参,y=2是关键字参数,那么结果就是打印1和2,如果,如果foo(y=2,1)这样写那么是错误的,因为x是没有值的

实例3:
def foo(x=1,y=2): #在定义函数阶段,已经为形参赋值了,在定义阶段已经赋值,意味着在调用阶段
可以不传值
print(x,y)
foo(x=10) #如果在调用时使用关键字参数或者位置参数,那么实参将覆盖形参

实例4:
*args示例:
def func(x,y,z,*args):
print(x,y,z)
print(args)
func(1,2,3,4,5,6,) #按照位置将实参传递给函数形参,当实参传递的参数溢出,则将剩余的实参传递给*args参数
func(1,2,3,*[4,5,6]) #传递给*args的实参以元组的形式展现
func(*[1,2,3,4,5,6]) #这个传参方式与func(1,2,3,4,5,6,) 一致
func([1,2,3,4,5,6],1,2,3,4) #列表内的数值代表形参的第一位,以此类推

def func(x,y,z):
print(x,y,z)
l=[1,2,3]
func(*l)
#这里实参传递与上述func(*[1,2,3,4,5,6]) 方法一致

**kwargs示例:
def func(x,y,**kwargs):
print(x,y)
print(kwargs)
func(y=2,x=1,z=3,a=1,b=2) #根据关键字参数传递x,y,将形参中没有定义参数都传给**kwargs,并以字典的形式展现
func(1,2,3,z=3,a=1,b=2) #这个调用方式是错误的,这个调用时实参1和2根据位置参数传递给形参,但是实参3没有形参对应
func(y=1,x=2,**{‘a‘:1,‘b‘:2,‘c‘:3}) #这个方法与func(y=2,x=1,z=3,a=1,b=2)结果一致
func(**{‘x‘:1,‘a‘:1,‘b‘:2,‘c‘:3}) #这个调用方法是错误的,该调用方法只是把值传递给**kwargs,而x和y形参则没有值可以传递

def foo(x,y,z):
print(x,y,z)
dic={‘x‘:1,‘y‘:3,‘z‘:1}
foo(**dic)
#foo(x=1,y=3,a=1)

实例5:
def home(name,age,sex):
print(‘from home====>‘,name,age,sex)
def wrapper(*args,**kwargs): #args=(1,2,3,4,5,6,7),kwargs={‘c‘:3,‘b‘:2,‘a‘:1}
home(*args,**kwargs)
#home(*(1,2,3,4,5,6,7),**{‘c‘:3,‘b‘:2,‘a‘:1})
#home(1,2,3,4,5,7,a=1,b=2,c=3)
# wrapper(1,2,3,4,5,6,7,a=1,b=2,c=3)
wrapper(‘egon‘,sex=‘male‘,age=19)


命名关键字参数(了解):
# 形参中,在*后定义的参数称之为命名关键字参数,
# 它的特性是;传值时,必须按照关键字实参的形式传值
# def foo(x,y=20,*args,a=1,b):
# print(x,y,a,b)

# # foo(10,b=3)
# foo(10,22,33,44,a=2,b=3)

# 位置参数,默认参数,*args,命名关键字参数,**kwargs

python基础6-函数的参数

标签:展现   不能   int   关键字   打印   应该   括号   阶段   pytho   

原文地址:http://www.cnblogs.com/my-notebook/p/7932108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!