• 函数的返回值作为参数传递给其他函数
def func():
    return 50

def func1(num):
    print(num + 100)

func1(func())
  • 函数返回多个值
def func():
   #返回值可以是列表或元组,但函数内不能出现两个return
  #函数执行到返回值时,返回数据并退出当前函数
  #也可以写成return 100,200
   return [100, 200]

#用一个变量接收多个返回值相当于*args  
num = func() 
#多变量接收等同于拆包,列表和元组都可以拆包,集合无序拆包无意义
num1, num2 = func()
#一个变量名接收多个变量,它的类型是元组
print(num)  #(100,200)
print(num1) # 100
print(num2) # 200

返回值输出为一个列表
def func():
    num_list = []
    for data in range(1, 10):
        num_list.append(data)
#return如果与num_list.append齐行,则只会遍历一个数据后就return
   #放在与for齐行,则会遍历完所有数据后返回列表
   return num_list
print(func())
函数被调用时才会执行函数内的代码,有return后函数才会有返回值,返回值可以被其他函数使用。
如函数没有return,调用时返回None
  • 全局变量可以直接使用,修改变量时需要global定义
num = 100

def func():
    global num
   #使用全局变量
    result = num + 100
    #修改全局变量
    num += 100
    return num

print(func())

递归

  • 函数内部⾃⼰调⽤⾃⼰
  • 必须有出⼝

1,2,3数字的累加和

def sum_numbers(num):
   if num == 1:
       return 1
   result = num + sum_numbers(num-1)
   return result


print(sum_numbers(3))

 

执行流程:

python中 返回给jss一个数组 python函数能返回一个数组吗_递归

逻辑解读:

'''
在运算过程中,算式里的函数也会执行调用!
第一次循环:
if条件不满足
执行到result = num + func(num-1)时,num == 3
则result = sum + func(num-1)为result = 3 +func(2)   
调用func(2)
没有返回值
进入第二次内循环

第二次内循环
调用func(2)后,sum == 2
if条件不满足
执行到result = num + func(num-1)时,num = 2
则result = sum + func(num-1)为result = 2+func(1)
调用func(1)
没有返回值
进入第三次内循环

第三次内循环
满足if条件
return 1
返回了1 

第一次返回
返回1给第二次调用的func(num-1)既 func(1),1就是第二次调用函数的返回值
此时 执行result = num+func(num-1)  为result = 2 + 1
执行return result  此时result = 3

第二次返回
返回3 返回给第一次调用的 func(num-1),既func(2),3就是第一次调用函数的返回值
此时 在次执行result = num + func(num-1) 为result = 3 + 3
执行return result  此时result = 6
'''

 

递归三原则:

  • 递归必须有停止条件
  • 递归必须改变其状态并向停止条件靠近
  • 递归必须递归地调用自己

 

lambda 表达式

lambda表达式,又名匿名函数

如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。

语法

lambda 参数列表 : 表达式
  • 注意

lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。

lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值

 

lambda的参数形式

  • 无参数
fn = (lambda: 100)()
print(fn)
  • 一个参数
fn = (lambda b: a)("hello python")
print(fn)
  • 默认参数
fn = (lambda a, b, c=100: a + b + c)(10, 20)
print(fn)
  • 不定长参数
fn1 = (lambda *args: args)(10, 20, 30)
print(fn1)

fn2 = (lambda **kwargs: kwargs)(name='python', age=20)
print(fn2)
  • 待判断的lambda
fn = (lambda a, b: a if a > b else b)(1000, 500)
print(fn)
  • 列表数据按字典key的值排序
students = [
    {'name': '张三', 'age': 20},
    {'name': '李四', 'age': 19},
    {'name': '王五', 'age': 22}
]
# 按age值升序排列
students.sort(key=lambda x: x['age'], reverse=True)
print(students)

用DEF函数来表示:
def fn7(x):
    return x["age"]


students.sort(key=fn7, reverse=False)

print(students)

内置函数

  • abs()

abs() 函数可以完成对数字求绝对值计算。

def add_num(a, b):
    return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
  • map(function, iterable),

将传⼊的函数变量function作⽤到iterable变量的每个元素中,并将结果组成新的列表

  • function -- 函数
  • iterable -- 序列

实例

list1 = [1, 2, 3, 4, 5]
def func(x):
   return x ** 2

result = map(func, list1)
print(result)
print(list(result))
  • filter()

filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 fifilter 对象,。如果要转换为列表

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
   return x % 2 == 0

result = filter(func, list1)
print(result)
print(list(result))

 练习题:

定义一个模拟ATM机存款的函数和取款的函数,并将每次操作后的余额打印出来

身上有100元,存了60元后,身上还剩40元,ATM存款里有60元

取款20元,ATM机里还有40元存款。