python基础之函数-中

上一篇我们主要描述了函数的一些基本语法,查看上篇请点击这里本篇侧重于描述函数各种参数形式的使用,废话不多说,开始!

一、不定长参数

不定长参数就是函数传入的参数个数不固定,能够提升函数的稳定性,用*args来表示,以元组形式去接收。如:

def func(*args):
    print(args)
func(1,2,3,4,5,6,7,8,9,10)

输出结果为:(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
也可以搭配固定参数来使用,如:

def func(a,b,*args):
	print(a)
	print(b)
	print(a*b)
	print('*'*50)
	multi = a * b
	for i in args:
		multi *= i
	return multi

输出结果为:
1
2
(4, 5, 6)
**************************************************
240

二、关键字参数

不确定参数接收,必须是【关键字+值】, 形态是字典。如:

def func(**kwargs):
    print(**kwargs)
    for key in kwargs:
        print(key,kwargs[key])
func(x=1,y=2,z=3)

输出结果为:
{‘x’: 1, ‘y’: 2, ‘z’: 3}
x 1
y 2
z 3
由上可以确定**kwargs形态是字典。

注意
1、*和***同时使用时,*要排在**的前面。
2、实参为*args时,函数参数前面要加*
3、实参为**kwargs时,函数参数前面要加**
如:
1、

def func(*args,**kwargs):
    print(args,kwargs)

2、

def func(a,b,c,d):
	print(a,b,c,d)
l = [1,2,3,4]
func(*l)

输出为:1,2,3,4
3、

def func(**kwargs):
    print(kwargs)
dic = {'name':'xxx','age':'12'}	
func(**dic)

输出为:{‘name’: ‘xxx’, ‘age’: ‘12’}

三、可变参数和不可变参数

3.1 不可变参数

顾名思义,不可变参数就是参数类型不可变,主要有元组、字符串、整型。不可变参数不会影响参数本身,如:

def cInt(a):
    a = 10
b = 2
cInt(b)
print(b)

输出为:2

3.2 可变参数

可变参数就是参数类型可变,主要有列表、集合和字典。可变参数会影响到参数本身。如:

def change_list(l):
    l.append(888)
    print("函数内的列表:", l)
l = [1,2,3,4,5]
change_list(l)
print("函数外的列表:", l)

输出结果为:
[1,2,3,4,5,888]
[1,2,3,4,5,888]

四、匿名函数

关键字lambda
匿名函数比def定义的函数要简单的多,在大多情况下作为参数使用,如排序算法等。

4.1 普通定义

add = lambda a,b:a+b
print(add(1,2))

输出:3

4.2 直接使用

(lambda x,y:x+y)(1,2)

输出:3

4.3 带有默认参数

add = lambda a=20, b=30:a+b
print(add())

输出:50

4.4 无参数

a = 20
b = 30
c = lambda:a+b
print(c())

输出:50

五、递归函数

递归函数是在函数中自己调用自己,如计算阶乘可以这样定义一个递归函数

def fact(n):
    if n == 1:
        return 1
    return n*fact(n-1)

优缺点

优缺点描述
优点定义简单,逻辑清晰
缺点调用深度过深时会极大的占用计算机资源

注意
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值