Python参数传递总结(再也不会云里雾里了)

一,参数设置默认值

  例1:

def add( a, b=10 ): #注意:默认值参数只会运算一次
    return a+b

  默认值参数只会运算一次是什么意思?

def func( a, b=[] ): #b的默认值指向一个空的列表,每次不带默认值都会指向这块内存
        b.append(a)
        return b

print(func(1))#向默认的空列表里加入元素1 ,默认列表里已经是[1]
print(func(2))#向默认的列表里加入元素2,默认列表里已经是[1,2]

print(func(3,[]))#向b指向的新空列表里加入元素3 ,默认列表里还是[1,2]
print(func(4))#向默认的列表里加入元素4,默认列表里已经是[1,2,4]
'''
结果:
[1]
[1, 2]
[3]
[1, 2, 4]
'''

二,参数传递
  例2.1:

def func(a, b):
    print('a=%d, b=%d' % (a,b) )

  在调用函数时使用如下方式,结果都是相同的。

func(10,20) #不使用参数名,需要按参数顺序传递
func(a=10,b=20) #使用参数名可以不按顺序传递
func(b=20,a=10)
#结果:
a=10, b=20
a=10, b=20
a=10, b=20

  例2.2,如果函数定义形式如下:

def func(*args): #这种定义会把传递的参数包成元组
        print(args,type(args))

func(10,20)
#结果:
#(10, 20) <class 'tuple'>

  例2.3,和上述过程相反的例子:

def func(a,b):
        print('a=%d, b=%d' % (a,b) )

a = (10, 20)
func(*a) #在调用函数使用`*`则会把元组解包成单个变量按顺序传入函数
#结果:a=10, b=20

  总结:*号在定义函数参数时,传入函数的参数会转换成元组,在调用时则会把元组解包成单个元素。

  例2.4,另一种函数定义形式:

def func(**kw):#使用**定义参数会把传入参数包装成字典dict
        print(kw, type(kw) )

func(a=10,b=20)#这种函数在使用时必须指定参数值,使用key=value这种形式
#结果:{'b': 20, 'a': 10} <class 'dict'>

  例2.5,和上述过程相反的例子:

def func(a,b):
        print('a=%d, b=%d' % (a,b) )

d = {'a':10, 'b':20 }
func(**d) #在调用时使用**会把字典解包成变量传入函数。
def func(*args, **kw):#这种形式的定义代表可以接受任意类型的参数
        print(args,kw )

  总结:**号在定义函数参数时,传入函数的参数会转换成字典,在调用时则会把字典解包成单个元素。

  例2.6,lambda表达式:
  lambda表达式就是一种简单的函数
  形如 f = lambda 参数1,参数2,参数3……参数n: 返回计算值

add = lambda x,y,z: x+y+z
print(add(1,2,3))
'''
结果:6
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值