-
return 结果 :
# 函数式编程(return 结果) def add_one(x): return x + 1 res = add_one(2) add_one(3) #这样无法表示出结果 print(add_one(2)) print(res)
add_one(2)相当于返回的值,但是不能只是add_one(2),这样没法显示出结果,需要赋给一个变量去显示它,或者直接
print(add_one(x))这个函数
add_one(2)() 这个写法是错误的,因为这个return返回的是一个结果,下面的是返回的一个函数名
函数名相当于这个函数的内存地址,所以想要调用返回的函数,需要再加上括号,跟return+函数名一样,lambda本身就相当
于这个函数的函数名或叫内存地址
2.return 函数名:
#函数式编程一(return 函数名) def test(): print("from test") def test1(): print("from test1") return test test1()() #test1()表示的是返回的return的这个函数的内存地址,再加一个()表示调用这个内存地址
3. return 函数:
函数式编程二(return 函数): def test1(): print("from test1") #没有return表示最后返回值为None def test2(): print("from test2") return test1() #先调用test1(),然后再把test1的返回值(None)给test2的return res = test2() print(res)
*args和**kwargs的用法
-
*args表示无命名参数,以元组的数据类型为参数传入函数
-
**kwargs表示有命名参数,以字典类型传入函数
-
什么叫无命名参数 ?有命名参数?
def funct(*args,**kwargs):
pass
func(1,2,4,3)------->函数中的1,2,4,3就是无命名参数
func(job = 'IT',age = '18')------->(job = 'IT',age = '18')表示命名参数
两者位置不可调换,优先级为*args,**kwargs,调用时的函数也必须是(1,2,3,job = 'IT',age = '18'),不能随意调换位置
且:def func(*args,**kwargs):
print(args)
print (kwargs)
func(1,2,3,job = 'IT',age = '18')
>>>(1,2,3)
>>>{job :'IT',age : '18'}
还有一种关键字参数:
def func(age = 'male',*args,**kwargs):
print(age)
print(args)
print (kwargs)
func(1,2,3,job = 'IT',age = '18')
>>>1
>>>(2,3)
>>>{job :'IT',age : '18'}
问题来了:为什么第一个变成(2,3)不是(1,2,3)了?
因为又在左边增加了一个关键字函数age='male',所以第一个参数1先传给了它,且它的优先级是最高的,所以在最左边
优先级:关键字参数--->*args--->**kwargs