ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python中函数的参数

2021-03-05 20:34:26  阅读:110  来源: 互联网

标签:函数 python age height 参数 实参 sum name


形参与实参介绍

"""
函数的参数分为形式参数和实际参数,简称形参和实参:

形参即在定义函数时,括号内声明的参数。形参本质就是一个变量名,用来接收外部传来的值。

实参即在调用函数时,括号内传入的值,值可以是常量、变量、表达式或三者的组合。
"""
"""
# 形参(在定义阶段使用的参数):
例如
def fun(x,y):		# x,y都是形参
	print(x,y)
	
# 实参(在调用阶段使用的参数)
例如:
func(1,2)		# 1,2都是实参

# 形参与实参的关系:
1,在调用阶段,实参(变量值)会绑定给形参(变量名)
2,这种绑定关系只能在函数体内使用
3,实参与形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系。

# 函数的类型
1,实参可以是常量:
func(1,2)

2,实参可以是变量:
a = 1
b = 2
func(a,b)

3,实参也可以是常量、变量、表达式的任意组合:
func()
"""

形参与实参的具体使用

"""
1,位置参数:

按照从左到右的顺序依次定义参数,在函数定义阶段,按照从左到右的顺序直接定义“变量名”。

特点:按照顺序与形参一一对应,而且必须被传值,多一个不行,少一个也不信不行。

例如:
def func(name,age,height):		# 定义位置形参:name,age,height,三者都必须被传值
    print('name:%s age:%s height:%s' %(name,age,height))
func('zyl','18','180')

2,关键字参数:在函数的调用阶段,按照key=value的形式传入的参数,称为关键字参数,凡是按照这种形式定义的实参,可以完全不按照从左到右的顺序定义,但仍能为指定的形参赋值。

特点:可以不按照顺序传,实参不再受形参的顺序限制。
例如:
def func(name,age,height):
    print('name:%s age:%s height:%s' %(name,age,height))
func(age="18",name='zyl',height='180')

注意:在调用函数时,实参也可以是按照位置或关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值

例如:
def func(name,age,height):
    print('name:%s age:%s height:%s' %(name,age,height))
func('zyl',height='180',age='18')

3,默认参数:
在函数的定义阶段,就已经被赋值了的参数,称之为默认参数。

特点:因为在定义阶段就已经被赋值了,所以在调用阶段可以不为其赋值。

例如:
def func(name,age,height='180'):
def func(name,age,height='180'):
    print(name,age,height)
func('zyl',18)
func('wyy',16)
func('佩奇',5,'150' )

运行结果:
zyl 18 180
wyy 16 180
佩奇 5 150

注意:默认参数必须在位置参数之后,默认参数的值仅在函数定义阶段被赋值一次,默认参数的值通常设为不可变类型。
"""

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

"""
1,基于元组的可变参数(*可变参数)
*可变参数在函数中被组装成一个元组。
用来接收溢出的位置实参,溢出的位置会被*保存为元组的形式,然后赋值给*后面的形参名,*后可以跟任意名字,但是约定成俗使用args。
例如:
def sum(*args):
    digital = 0
    for number in args:
        digital += number
    return digital
print(sum(10,20))
print(sum(10,20,30))

运行结果:
30
60

混合使用:
def sum(x,y,*z):
    print(x,y,z)
sum(1,2,3,4,5,6)

运行结果:
1 2 (3, 4, 5, 6)

# *的实参使用:

实参中带*的,先*后的值会被打散成位置实参。

例如:
def sum(x,y,z):
    print(x,y,z)
sum(*(11,22,33))
l = (11,22,33)
sum(*l)

运行结果:
11 22 33
11 22 33

*在实参和形参中混合使用

例如:
def sum(x,y,*args):
    print(x,y,args)
sum(1,2,3,4,5,6)
sum(*"hello")

运行结果:
1 2 (3, 4, 5, 6)
h e ('l', 'l', 'o')
"""
2,基于字典的可变参数(**可变参数)
**的形参名:用来接收溢出的关键字实参,**会将溢出的关键字保存成字典格式,然后赋值给紧跟其后的形参名,**后面的可以是任意名字,但是约定成俗应该是kwargs。
**用在实参中,(**后只能跟字典),实参中带**会被打散成关键字实参的形式。

# 例如:
def sum(x,**kwargs):
    print(x,kwargs)
sum(1,name='zyl',age='18')

运行结果:
1 {'name': 'zyl', 'age': '18'}

# 例如:
def sum(x,y,z):
    print(x,y,z)

sum(*{'x':1,'y':2,'z':3})
sum(**{'x':1,'y':2,'z':3})

运行结果

x y z
1 2 3

# **的混合使用(实参与形参)
例如:
def sum(x,y,**kwargs):
    print(x,y,kwargs)
sum(y=222,x=111,a=333,b=444)
sum(**{'y':222,'x':111,'a':333,'b':4444})

运行结果:
111 222 {'a': 333, 'b': 444}
111 222 {'a': 333, 'b': 4444}

# *与**的混合使用

*args必须在**kwargs之前

例如:def sum(*args,**kwargs):
    print(args,kwargs)
sum(1,2,3,4,5,6,x=1,y=2,z=3)

运行结果:
(1, 2, 3, 4, 5, 6) {'x': 1, 'y': 2, 'z': 3}

命名关键字参数

"""
在定义了**kwargs参数后,函数调用者就可以传入任意的关键字参数key=value,如果函数体代码的执行需要依赖某个key,必须在函数内进行判断。

例如:
def register(name,age,**kwargs):
	if 'sex' in kwargs:
		# 有sex参数
		pass
	if 'height' in kwargs:
		# 有height参数
		pass
		
# 想要限定函数的调用者必须以key=value的形式传值,需要在定义形参时,用作为一个分隔符号,符号之后的形参称为命名关键字参数。对于这类参数,在函数调用时,必须按照key=value的形式为其传值,且必须被传值。

例如:
def func(x,y,*,a,b): # 其中a,b称之为命名关键字参数
	print(x,y)
	print(a,b)
func(1,2,b=111,a=222)

# 组合使用
1,综上所述,所有参数可任意组合使用,但定义顺序必须是:位置参数、默认参数、*args、命名关键字参数、**kwargs。
2,*args,**kwargs通常一起使用。
"""

标签:函数,python,age,height,参数,实参,sum,name
来源: https://www.cnblogs.com/zylwy/p/14488335.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有