乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
函数进阶

一、多函数程序执行流程

(一)共用全局变量

# 定义全局变量
num = 0
def test1():
    global num
    # 修改全局变量
    num = 100
def test2():
    # 调用test1函数中修改后的全局变量
    print(num)

test1()
test2()

----------------------------------
100

(二)返回值作为参数传递

  • 示例一
def test1():
    return 50
def test2(num):
    print(num)

# 1.保存函数test1的返回值
result = test1()
# 2.将函数返回值所在变量作为参数传递到test2函数
test2(result)

------------------------------------
50
  • 示例二
def demo1():
    li = []
    for i in range(1,10):
        li.append(i)
    return li
a = demo1()
def demo2():
    print(a)
demo2()

----------------------------
[1, 2, 3, 4, 5, 6, 7, 8, 9]

二、拆包和交换变量值

(一)拆包

  • 示例一
t1 = ("兰博基尼",300)
car_name,car_price = t1
print(car_name)
print(car_price)

----------------------
兰博基尼
300
  • 示例二
def demo():
    return 100,200

a = demo()
num1,num2 = a
print(num1)
print(num2)

-----------------------
100
200

(二)交换变量值

  • 示例一
a = 10
b = 20
a,b = b,a
print(a)
print(b)

-----------------
20
10
  • 示例二
c = 0
a = 10
b = 20
c = a
a = b
b = c
print(a)
print(b)

-------------
20
10

三、递归

  • 函数内部自己调自己
  • 必须有出口

(一)计算1,2,3数字的累加和

def num_numbers(num):
    if num == 1:
        return 1

    result = num + num_numbers(num-1)
    return result

print(num_numbers(3))

----------------------------------
6
  • 解析图

 

 

(二) 递归三原则:

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

四、lambda表达式

(一)概述

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

1、语法

lambda 参数列表:表达式

2、注意

  • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
  • lambda函数能接收任何数量的参数但只能返回一个表达式的值。

(二)实例

1、方式一

def demo1():
    return 200
print(demo1())

print((lambda :100)())  # print((lambda 参数:200)(传参))

--------------------------------
200
100

2、方式二

def demo2(a):
    return a
print(demo2("我是demo2"))
print((lambda a:a)("我是lambda2"))

--------------------------------
我是demo2
我是lambda2

3、方式三

def demo3(a,b):
    return a+b

print((lambda a,b:a+b)(10,20))

-------------------------
30

五、lambda的参数形式

(一)默认参数的lambda表达式

def demo4(b,c,a=10):
    return a+b+c
print((lambda b,c,a=10:a+b+c)(10,20))

-------------------------------------
40

(二)不定长参数的lambda表达式

def demo5(*args,**kwargs):
    return args,kwargs

print((lambda *args,**kwargs:(args,kwargs))(1,2,3,4,5,a=30,b=40))

# 1
print((lambda *args:args)(1,5,6,9,6))
# 2
print((lambda **kwargs:kwargs)(name="张三",age=60))

---------------------------------------------
((1, 2, 3, 4, 5), {'a': 30, 'b': 40})
(1, 5, 6, 9, 6)
{'name': '张三', 'age': 60}

(三)待判断的lambda

fn = (lambda a,b: a if a > b else b)(1000,5000)
print(fn)

-----------------------------------------
5000

(四)列表数据按字典key的值排序

students = [
    {'name':'张三','age':20},
    {'name':'李四','age':19},
    {'name':'王五','age':22}
]
# 按age值降序排列
students.sort(key=lambda x: x['age'],reverse=True)
print(students)

------------------------------------
[{'name': '王五', 'age': 22}, {'name': '张三', 'age': 20}, {'name': '李四', 'age': 19}]

六、高阶函数

(一)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))

-----------------------------
<map object at 0x000002766C2BBE80>
[1, 4, 9, 16, 25]

(三)filter()

  • filter(func,list)函数用于过滤掉不符合条件的元素,返回一个filter对象。
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))

--------------------------
<filter object at 0x000002766C2BBE20>
[2, 4, 6, 8, 10]

posted on 2022-10-02 14:18  乐之之  阅读(8)  评论(0编辑  收藏  举报