一文掌握python函数式编程及应用实例(超详细及超多应用实例)(一)

发布于:2024-03-21 ⋅ 阅读:(72) ⋅ 点赞:(0)

函数式编程(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参数时,需要遵循特定的顺序规则:


网站公告

今日签到

点亮在社区的每一天
去签到