Python的函数高级引用,引用传递、递归、默认值参数、命名参数、匿名函数

  • 函数:

1、引用传递
2、可变参数、命名参数、万能参数
3、匿名参数(lambda)
4、闭包
5、递归
6、偏函数
7、函数作为参数传递
8、函数调用全局变量
9、全局变量和局部变量

  • 在引用传递中:

引用传递,实质是在传递内存地址

def yi():
	return 6
if __name__ == '__main__':
#用引用传递来赋值
x=yi
#调用函数
y=yi()
print(x)
print(y)

z=x()
print(z)

x因为引用传递来被被赋值了6,用y来调用,z又调用了x
输出结果为

<function yi at 0x00000224147A3E18>
6
6
  • 在递归传递中:

递归就是相当与自身调用自身的一个函数
递归的两个必要条件:
1.函数自身调用自己
2.要有终止条件(死循环)
3.用一个递归函数来运算1-100的加法

例如:

def digui(n):
	if n == 0:
		return 0
	else:
		return n + digui(n - 1)
	sun=digui(100)
	print(sum)
	用递归函数来完成一个循环:

可以看除用了if语句来完成一个自身的循环,从100一直在递减,直到递减到1,
用sum来完成一个自加,知道循环到0,来结束循环
结果为:

	5050
  • 匿名函数:

匿名函数是一种lambda表达式
lambda则是一种语言
格式为:

def a()::
print("hello world") 
lambda:print("hello world")
def add(x,y):
	return x + y
lambda x,y: x + y

优点:简化代码书写
缺点:降低了代码的可读性,增加代码的维护成本

用匿名函数做一个加法的程序:

def zhong(a,b):
	return a + b
zhong = lambda x,y:x+y
print(zhong(5,6))
#命名一个a,b,给a,b赋一个值即可

结果为:

11
  • .函数的默认值

#在Python中,可以为函数的参数给予默认值
#一旦某个存在默认值,那么如果在调用的时候,
#不传递这个参数,则按照默认值
#减少调用时的繁杂操作
注意:在定义函数时,如果存在有默认值的参数,一定要写在没有默认值的参数后面,
否则在调用是,无法确定参数到底传给哪个参数。

用一个函数的默认值来计算圆的面积:

结果为:

也可以在函数中用3.14这个默认值来定义一个3.14159,并在接下来的调用函数中,在计算面积时
直接调用3.14159这个默认值来代入到计算圆的面积中

所以计算的结果也是浮点型,并有跟3.14159一样的小数位

参数问题又分为四种参数
参数问题
默认值参数
可变参数
命名参数
万能参数

  • 可变参数:

     def  xing(name,age,sex,*args):
     	print("名字是",name)
     	print("年龄是",age)
     	print("性别是",sex)
     	print(args)
     xing("YY",19,"男",180,"ning",140)
    

结果是

	名字是 YY
	年龄是 19
	性别是 男
	(180,'ning',140)

可以看出在定义函数时加了一个*args这个可变参数,当输出一堆多出原有参数的无用参数时,
会将这些多出的无用的参数会以元组的形式封装到最后一行。

  • 命名参数:

     def  xing(name,age,sex,**kwargs):
     	print("名字是",name)
     	print("年龄是",age)
     	print("性别是",sex)
     	print(kwargs)
     xing("YY",19,"男",add="时代",wei="46")
    

可以看出在定义函数时加了一个**args这个命名参数,当输出原有中多出的变量参数时,
会以容器中字典里面的键值对的形式来封装出这些变量参数

	名字是 YY
	年龄是 19
	性别是 男
	{'add':'时代','wei':46}
  • 万能参数:

     def  xing(name,*args,**kwargs):
     	print(name)
     	print(args)
     	print(kwargs)
     xing("YY",19,"男",add="WDNIMDCP",wei="CKBL")
    

可以看出,普通参数会以第一行的形式列出,可变参数还是会以元组的形式列出 在第二行,
第三行则是命名参数以字典中键值对的形式列出赋有变量的参数
当这两者同时运用时便是万能参数,并一一列出并封装好这些不同参数类型。

	YY
	(19, '男')
	{'add': 'WDNIMDCP', 'wei': 'CKBL'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值