学习日记10

Python学习日记(10)函数的返回值详解和高阶函数

函数

函数返回值详解

多个return语句

​ 函数中可以包含多个return,但是在执行过程中,只要一个return被执行到,那么这个函数就执行完毕。

​ 当函数被设计成具有判断选择功能,函数会根据不同的return返回不同的值,但还是只有一个return被执行。

  def create_nums(num):
      print("---1---")
      if num == 100:
          print("---2---")
          return num+1  # 函数中下面的代码不会被执行,因为return除了能够将数据返回之外,还有一个隐藏的功能:结束函数
      else:
          print("---3---")
          return num+2
      print("---4---")

  result1 = create_nums(100)
  print(result1)  # 打印101
  result2 = create_nums(200)
  print(result2)  # 打印202

一个return返回多个值

​ 那么,当一个函数需要向调用者传递多个运行结果,就需要一种设置多个变量去接收返回值。

def divid(a, b):
    shang = a//b
    yushu = a%b 
    return shang, yushu  #默认是元组

result = divid(5, 2)
print(result)  # 输出(2, 1)

return的返回值类型可以是元组、列表、字典等,只要是能存储多个数据的类型,就可以一次性返回多个值。

​ 如果return后面有多个数据,那么默认以元组类型进行存储。

对返回值进行拆包
def get_my_info():
    high = 178
    weight = 100
    age = 18
    return high, weight, age  # 函数返回三个数据,会自动打包为元组

# result = get_my_info()  # result 接收到一个元组
# print(result)

my_high, my_weight, my_age = get_my_info()  # 直接把元组拆分为三个变量来使用,更加方便
print(my_high)
print(my_weight)
print(my_age)

  • 对具有多个值的return进行拆包时,需注意变量的数量和要拆的数据的个数相同,否则程序会报异常;

函数参数详解

缺省参数

​ 缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会替代默认参数。

def printinfo(name, age=35):	# age就是一个缺省参数
   # 打印任何传入的字符串
   print("name: %s" % name)
   print("age %d" % age)

# 调用printinfo函数
printinfo(name="miki")  # 在函数执行过程中 age取默认值35
printinfo(age=9 ,name="miki")

不定长参数

​ 有时可能需要一个函数的参数能处理比当初声明时更多的参数,这种类型的参数就是不定长参数,声明时不会命名。

基本语法:

def functionname([formal_args,] *args, **kwargs):
   """函数_文档字符串"""
   function_suite
   return [expression]

注意: 在函数声明中,加了*号的变量args会存放所有未命名的变量参数,args为元组。而加了**的变量kwargs会存放命名参数,形如key=value这类的参数,kwarges为字典。

参数的排序

​ 缺省参数一定位于正常参数后面,如果具有多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有*kwargs的话,*kwargs必须是最后的

递归函数

​ 函数的内部可以调用函数,当函数内部调用自身时,这个函数就是递归函数。

递归函数处理阶乘:在这里插入图片描述

经典递归问题:实现费波纳希数列:

def sum_rubbit(m):
    if m == 1 or m == 2:
        return 1
    else:
        return sum_rubbit(m - 1) + sum_rubbit(m - 2)


print(sum_rubbit(12))

输出结果:
144

匿名函数

​ 使用lambda关键字能创建小型匿名函数,这种函数省略了用def声明函数的标准步骤。

​ 匿名函数**(lambda) **一般应用于函数式编程中,举个简单例子也许比较好理解,对于一个列表,要求大于3的元素。

过程式编程:
>>> L1 = [1,2,3,4,5]
>>> L2 = []
>>> for i in L1:
if i>3:
L2.append(i)

>>> L2
[4, 5]

函数式编程
>>> def func(x): return x>3 	# 在函数中完成
>>> filter(func,[1,2,3,4,5])
[4, 5]

lambda可以让程序更加简洁,函数一次性使用,所以不需定义函数名,可节省内存中的变量定义空间。

匿名函数的规则:

  • 一般就是一行表达式,所以必须要有返回值;
  • 不能使用return;
  • 可以没有数,也可以有多个参数。

高阶函数

​ 在python中,函数也是一种数据类型function,可把它看为一个复杂的数据类型。

​ 高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。

def test():
     print('hello python')
print(type(test))

输出结果:
<class 'function'>
定义变量指向函数

​ 既然函数是一个数据类型,那么可以使用变量对其进行接收,相当于为这个函数起了一个别名。

def test():
    return 'hello wrold'
fun = test   # 定义了一个变量fun,让它指向了 test 这个函数
print(fun())   # 使用fun()可以直接调用test这个函数

print(id(fun))  # 1819677672040
print(id(test))  # 1819677672040

输出结果:
hello wrold
2475923025568
2475923025568

需要注意,在定义一个变量表示函数时,函数后面不可以加()

函数做为另一个函数的参数
def test(age,action):
    if age < 18:
        print('您还没满十八岁,请退出')
    action()   # 把参数action直接当做一个函数来调用

def smoke():
    print('我已经年满十八岁了,我想抽烟')

my_action = smoke  # 定义一个变量my_action,让它指向smoke函数
test(21, my_action)  # 将my_action传给 test 函数作为它的参数

test(21,smoke)  # 还可以不再定义一个新的变量,直接传入函数名

输出结果:
我已经年满十八岁了,我想上网
我已经年满十八岁了,我想上网
函数作为另一个函数的返回值
def test():
    print('我是test函数里输入的内容')

def demo():
    print('我是demo里输入的内容')
    return test  # test 函数作为demo函数的返回值

result = demo()  # 我是demo里输入的内容  调用 demo 函数,把demo函数的返回值赋值给 result
print(type(result)) # <class 'function'>  result 的类型是一个函数

result() # 我是demo里输入的内容    我是test函数里输入的内容   既然result是一个函数,那么就可以直接使用() 调用这个函数

demo()()  # 我是demo里输入的内容    我是test函数里输入的内容

result = demo() # 我是demo里输入的内容 调用 demo 函数,把demo函数的返回值赋值给 result
print(type(result)) # <class ‘function’> result 的类型是一个函数

result() # 我是demo里输入的内容 我是test函数里输入的内容 既然result是一个函数,那么就可以直接使用() 调用这个函数

demo()() # 我是demo里输入的内容 我是test函数里输入的内容


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值