函数基本使用原则+函数的定义的三种方式+函数调用的三种方式+函数的参数

一,函数的基本使用原则:先定义,后调用

# 先定义后使用
#
# 定义阶段:不会执行函数的代码,只检测语法
# def func():
# print('from func')
# 调用阶段:会触发函数体的代码的执行,直到碰到return结束
# func()

二,# 函数的定义与调用的三种形式
# 有参函数 :定义时有参,调用时也必须传参
# 无参函数
# 空函数
# def func():
# pass


调用函数的三种形式
# 语句形式
# def max2(x,y):
# if x>y:
# return x
# else:
# return y
# max2(22,33)

# 表达式形式
# def max2(x,y):
# if x>y:
# return x
# else:
# return y
# res = max2(22,33)*15
# print(res)

# 把函数的调用当做参数传给一个函数
def max2(max2,y):
if max2>y:
return max2
else:
return y

res = max2(66,99)
max2(res,88)
res = max2(max2(66,99),33)
print(res)


三,函数的返回值
函数处理的结果
作进一步的处理


return 值
注意点
1,函数的返回值没有类型限制
2,函数的返回值没有个数限制(用逗号分隔开),返回元祖的形式

返回多个值:多个返回值用逗号隔开,以元组形式
返回一个值:返回的就是值本身
返回0个值:None,不写也返回None

return 除了有返回的值的功能还有结束函数指定的功能
函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值返回

retur 是函数结束的标志


四,函数的参数:
函数分为两大类:
形式参数(形参):在定义函数阶段,括号内定义的参数或者变量名称之为形参。
实际参数(实参):在函数调用阶段,括号内定义的参数或者变量名称之为实参。

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

细分
位置参数:
位置形参:在定义阶段,按照从左到右的顺序依次定义的形参称之为位置形参
特点:但凡按照位置定义的形参,必须被传值,多一个不行少一个也不行
位置实参:在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参
特点:与形参一一对应


关键之实参:在函数调用阶段,按照key=value的形式定义的实参称之为关键字实参
特点:指名道姓的为指定的形参传值,可以完全打乱顺序,但仍能为指定的形参传值


实参的形式可以是位置实参与关键字实参混用,但必须遵循
1,位置实参必须放在关键字实参前面
2,不能对同一个形参重复传值


默认形参:在定义阶段就已经为形参赋值,该形参称之为默认参数
特点:
1,定义阶段就已经有值,意味着调用阶段可以不用传值
2,位置形参必须放到默认形参的前面
3,默认形参的值在函数定义阶段就已经固定死了,定义阶段之后的改动不会影响该值
4,默认形参的值通常应该是不可变类型



可变长参数

可变长实参:指的是在调用阶段,实参的值的个数是不固定的,实参无非是(位置实参,关键字实参),对应着形参也必须有两种解决方案

*----->溢出的位置实参
**----->溢出的关键字实参

def foo(x,y,*z):
print(x)
print(y)
print(z)

foo(1,2,3,4,5,67,)
# 形参中*会将溢出位置的实参全部接收,然后存成元祖的形式,然后把元祖赋值给*后的形参名或者变量名
应用:
def my_sum(*nums):
res = 0
for num in nums:
res+=num
return res
print(my_sum(2,3,4,5,6))

实参中带*的
# 实参中带*的,*会将该参数的值循环取出,打散成位置实参,再与形参做对应
# 注意:以后但凡碰到实参中带*的,他就是位置实参,应该立马打散成位置实参去看
# def foo(x,y,z):
# print(x,y,z)
# foo(1,*[2,3]) #foo(1,2,3)

实参形参都带*的
def foo(x,y,z,*m):
print(x)
print(y)
print(z)
print(m)
foo(1,2,3,4,5,6,7,*[8,9,10,11]) #foo(1,2,3,4,5,6,7,8,9,10,11)
# 约定俗成形参中的*变量名的写法都是:*args


# 形参中某个参数带**的
# 形参中**会将溢出位置的关键字实参全部接收,然后存成字典的形式,
# 然后把字典赋值给**后的形参名或者变量名

# def foo(x,y,**z): #x=1,y=2,z={'b':5,'a':3,'d':4}
# print(x)
# print(y)
# print(z)
#
# foo(1,2,a=3,b=5,d=4)


# 实参的参数也可以带**,该参数必须是字典
# 实参中**,**会将该参数的值循环取出,打散成关键字实参
# 然后把字典赋值给**后的形参名或者变量名
# 注意:但凡碰到实参中带**的,他就是关键字实参,应该立马打散成关键字实参去看

# def foo(x,y,z):
# print(x)
# print(y)
# print(z)
# # foo(1,2,**{'a':1,'b':2,'c':3,'z':4}) #x=1,y=2,b=2,c=3,z=4,a=1
# foo(**{'y':1,'z':2,'x':3})
























































































































































转载于:https://www.cnblogs.com/zhangrenguo/p/9702874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值