python——函数进阶

117 阅读3分钟

多函数程序执⾏流程

共用全局变量

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


test1()
test2() # 100

返回值作为参数传达

# 例:
def func1():
    return 100


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


result = func1()
func2(result)

函数返回多个值

def func3():
    return 100, 12


print(func3())  
# >>>(100, 12) 函数返回多个值时,以元组类型返回
a, b = func3()
print(a) 
# >>>100
print(b)
# >>>12

递归

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

递归三原则:

  • 递归必须有停止条件
  • 递归必须改变其状态并向停止条件靠近
  • 递归必须递归地调用自己
#例 ①:
def func4():
    print("I Love You")
    func4()


#例 ②:
def func5():
    print("I Love You")
    return func5()

#不加return 函数调用时前面的函数继续执行
#加return后,函数在调用时前面的函数将会结束
# 用递归实现:
# 输入整数n,实现n内所有整数的累加

def sum_numbers(n):
    if n == 1:
        return 1
    else:
        result1 = n + sum_numbers(n - 1)
        return result1

递归.png

lambda 表达式

lambda表达式,又名匿名函数

使用场景:

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

语法:

lambda 参数列表 : 表达式

  • 注意

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

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

labmda表达式的使用:

# 例:
def func7():
    return 100


# lambda 表达式


f3 = (lambda: 100)
print(f3())  # 调用lambda时,加括号

f1 = (lambda: 100)()  # 最后一个括号表示调用
print(f1)

# 含有参数

f2 = (lambda num1, num2: num1 + num2)(1, 2)  # 最后一个括号传参
print(f2)

# 传参
f3 = (lambda num1, num2: num1 + num2)
print(f3(1, 2))

# 一个参数
f4 = (lambda num1: num1)("hello")
print(f4)

# 默认参数
f5 = (lambda num1, num2, num3=100: num1 + num2 + num3)(10, 20)
print(f5)

# 不定长参数
f6 = (lambda *args: args)(1, 2, 3, 4, 5, 5, 6)
print(f6)  # 返回字典

f7 = (lambda **kwargs: kwargs)(name="张三", age=18)
print(f7)  # 返回字典

# 表达式为三目运算

f8 = (lambda num1, num2: num1 if num1 > num2 else num2)(100, 200)
print(f8)

# 列表数据按字典key的值排序
students = [
    {'name': '张三', 'age': 20},
    {'name': '李四', 'age': 19},
    {'name': '王五', 'age': 22}
]

students.sort(key=lambda num1: num1["age"], reverse=True)  # 升序排列
print(students)

内置函数

①abs():绝对值运算

def func8(num1, num2):
    return abs(num1) + abs(num2)


result = func8(-2, 4)
print(result)

②map(function,iterable):

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

# 例:
list1 = [1, 2, 3, 4, 5]


def fnc9(x):
    return x ** 2


result = map(fnc9, list1)
print(result)
# >>><map object at 0x000001A7D3C1FD00>
print(list(result))
# >>>[1, 4, 9, 16, 25]

③filter():

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

# 例
list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]


def func10(x):
    return x % 2 == 0


result = filter(func10, list2)
print(result)
# >>> <filter object at 0x00000218336C3C40>
print(list(result))
# >>>[2, 4, 6, 8]