一文掌握python函数式编程及应用实例(超详细及超多应用实例)(一)
函数式编程(Functional Programming)是一种强大的编程范式,它强调程序执行的计算逻辑通过“函数”进行描述,而非基于指令或者对状态变化的改变。这种编程风格提倡将计算视为数学函数的应用,并且充分利用了高阶函数、闭包、匿名函数(Lambda表达式)、纯函数等概念,使得代码更为简洁、易于理解和测试。
一.基本定义
-
1)无参数、无返回值的函数:
def my_function():
# 执行一些操作
pass
-
2)带参数、无返回值的函数:
def greet(name): print(f"Hello, {name}!") name = greet('JACK') # print打印出Hello, JACK! print(name) # 函数本身没有return, 打印出None
-
3)带参数、有返回值的函数:
def add_numbers(a, b):
result = a + b
return result
num = add_numbers(1, 2)
print(num) # 3
二.默认参数值:
-
可以给函数参数设置默认值,使得调用时可以省略这些参数:
def power(base, exponent=2):
return base ** exponent
print(power(2)) # 4
print(power(2, 3)) # 8
三.可变数量参数:
-
1)使用星号
*
收集位置参数为元组:例1: def func(*args): for i in args: print(i) func(1, 2, 3) # 输出:1 2 3 例2: func(1, (2, 3)) # 输出:1 (2, 3) 例3: def sum_all(*args): total = 0 for arg in args: total += arg return total print(sum_all(1, 2, 3)) # 输出:6 例4: # 带有关键字参数 def func(a=1, *args): print(f'a: {a}') for i in args: print(i) func(1, 2, 3) # 输出: a: 1, 2, 3 例5: # 使用解包传参 def func(*args): for i in args: print(i) func(*(1, 2, 3)) # *这里代表解包, # 输出:1 2 3 例6: 星号(*)运算符用于收集剩余元素 def func(a, b, *args): print(a, b, args) func(1, 2, 3, 4, 5) # 输出:1 2 (3, 4, 5)
-
2)使用双星号
**
收集关键字参数为字典:
例1:
def func(**kwargs):
print(kwargs)
# 调用函数并传入多个关键字参数
func(name='Alice', age=30, job='Engineer')
# 输出:
# {'name': 'Alice', 'age': 30, 'job': 'Engineer'}
例2:
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
# 参数是位置参数, key必须和参数一致
def func(name, age, job):
print(f"Name: {name}, Age: {age}, Job: {job}")
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(**data)
# 输出:
# Name: Bob, Age: 40, Job: Manager
例3:
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
# 参数是关键字参数, key必须和参数一致
def func(name=1, age=2, job=3):
print(f"Name: {name}, Age: {age}, Job: {job}")
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(**data)
# 输出:
# Name: Bob, Age: 40, Job: Manager
例4:
同时有位置参数和关键字可变参数
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
def func(a, **kwargs):
print(a)
print(kwargs)
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(1, **data)
# 输出:
# 1
# {'name': 'Bob', 'age': 40, 'job': 'Manager'}
例5:
同时有关键字参数和关键字可变参数
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
def func(a=1, **kwargs):
print(a)
print(kwargs)
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(1, **data)
# 输出:
# 1
# {'name': 'Bob', 'age': 40, 'job': 'Manager'}
例6:
同时有关键字参数,可变参数,可变关键字参数
args = [3, 4, 5]
data = {'name': 'Bob', 'age': 40, 'job': 'Manager'}
def func(a=1, *args, **kwargs):
print(a)
print(args)
print(kwargs)
# 使用双星号解包将字典作为关键字参数传递给另一个函数
func(1, *args, **data)
# 输出:
1
(3, 4, 5)
{'name': 'Bob', 'age': 40, 'job': 'Manager'}
四.组合使用:
同时使用位置参数、默认参数、可变数量参数以及关键字参数:
在指定关键字-only参数时,需要遵循特定的顺序规则: