2018.09.25python学习第十天part4

# 4.函数的参数

# 形式参数(形参):在定义函数阶段,括号内定义的参数(变量名)
#
# 实际参数(实参):在调用函数阶段,括号内传入的值(变量值)

# ****
# 在调用函数阶段hi将实参的值绑定给形参,这种绑定关系只在调用时生效,
# 在函数执行完毕后就会解除绑定。

# def func(x,y):# x,y 就是形参
# # x=1
# # y=2
# print(x,y)
#
# func(1,2)


# 细分:
#
# 1.位置参数
# 1.1 位置形参:在定义阶段,按照从左到右的顺序依次定义的形参
#
# ***
# 凡是按照位置定义的形参,必须被传值,一个不能多,一个不能少

# def func(x,y,z):
# print(x,y,z)
# func(1,3)###报错,少一了值
# func(1,2,3)####正确
# func(1,2,3,4)####报错,多了一个值

# 1.2位置实参:在调用阶段,按照从左到右的顺序依次传入的值叫位置实参

# ****
# 与形参一一对应

# def func(x,y,z):
# print(x,y,z)
# func(2,1,4)


# # 2.关键字实参
# 在调用阶段,按照key=value的形式定义的实参称之为关键字实参
#
# ****
# 可以完全打乱顺序,(指名道姓的给形参传值)

# def func(x,y,z):
# print(x,y,z)
# func(x=1,z=3,y=4) #不需要像位置实参那样一一对应

# ******
# 关键字实参和位置实参可以混用,但是必须遵循以下原则
#
# 1.位置实参必须在关键字实参前面
# 2.不能对同一形参进行重复传值
#
# def func(x,y,z):
# print(x,y,z)
# func(1,y=2,z=4)###正确
# func(1,y=2,x=5,z=3)###错误
# func(x=2,3,z=8)###错误

# 3.默认形参
#
# 在定义阶段,就已经为形参赋值了,
#
# *****
# 1.在定义阶段就已经赋值了,意味着调用阶段可以不用传值,但是也可以传
# 2.位置形参必须放到默认形参前面
# 3.默认的形参值在函数定义阶段就已经固定死了,定义阶段以后不能改默认值
# 4.默认形参的值通常时不可变类型

# def func(x,y,z=100):
# print(x,y,z)
# func(10,20)####后面的z默认就是100了
#
# 应用:如一个班的女生很少,只有个位数
#
# def register(name,age,sex='male'):
# print(name,age,sex)
# register('egon',18)
# register('tony',18)
# register('sb',28,'female')

# 4.可变长函数:
#
# 可变长实参:指再调用阶段,实参值个数时不固定
# 实参无非就是两种形式(位置实参,关键字实参),对应着的形参也必须有两种方法来解决
# *------>溢出的位置实参
# **----->溢出的关键字实参

#溢出的位置实参的应用
# def sum2(*x):
# res=0
# for i in x:
# res+=i
# return res
# print(sum2(1,2,3,4,5))

# 4.1. *的用法
#
#再形参前面加*,*会将溢出的位置实参以tuple的形式赋值给*后面的形参:
# def func(x,y,*z):
# print(x,y,z)
# func(1,2,3,4,5)

#在实参前面加*,但凡碰到实参前面加*的,先将实参打散成位置实参,再与形参对应
# def func(x,y,z):
# print(x,y,z)
# func(*[1,2,3])# 正确 func(1,2,3)
# func(*[1,2,3,4,5])#报错, func(1,2,3,4,5) 违反了位置形参的原则

# 4.2. **的用法

# 在形参前面加**,会将溢出的关键字实参以dict的形式赋值给**后面的变量名
# def func(x,y,**z):
# print(x,y,z)
# func(1,2,a=3,b=4,c=5)

#在实参前面加**,先将实参打散成关键字实参,再与形参做对应

# def func(x,y,z):
# print(x,y,z)
# func(**{'x':1,'y':2,'z':3})
原文地址:https://www.cnblogs.com/hello-yuanjing/p/9700330.html