Python 教程(六):函数式编程

在前四篇教程中,我们学习了 Python 的基本语法和数据结构以及代码中条件语句和循环结构。本篇教程,我们将深入探讨 Python 中的函数式编程。通过本教程,我们学习了函数的定义、参数、返回值、类型、属性和方法、作用域以及闭包等概念

专栏列表


在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


前言

Python 中的函数是编程中非常基础且强大的概念。函数允许你封装一段代码,使其可以在程序中多次调用,从而提高代码的可重用性和清晰度。

函数就如同数学中的函数,一个函数是做一件事情的工具,它有封装性、重用性等特性,如同y=sin(x) 这个sin就是数学中定义的函数,我们学习后不用知道内部实现,直接拿来用就行

python中的注释,写备注,方便阅读,机器会直接忽略

  • #: 单行注释
  • ''': 多行注释

函数定义

在 Python 中,使用 def 关键字来定义函数, 依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

def function_name(parameters):
    """函数的文档字符串,描述函数的功能"""
    # 函数体
    return value

参数

  • 位置参数:必须按顺序传递的参数。
  • 默认参数:有默认值的参数,调用时可以省略。
  • 可变参数:允许传递任意数量的位置参数。
  • 关键字参数:允许传递任意数量的关键字参数。

返回值

函数可以通过 return 语句返回一个值,如果没有 return 语句,默认返回 None

示例

def greet(name, message="Hello"): # message 是有默认值的
    """打印问候语"""
    return f"{message}, {name}!"

print(greet("Alice"))  # 输出: Hello, Alice!
print(greet("Bob", "Good morning"))  # 输出: Good morning, Bob!

函数类型

普通函数

普通的函数定义如上所示。

空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop():
    pass

匿名函数(Lambda 函数)

使用 lambda 关键字定义的小型函数。

add = lambda x, y: x + y
print(add(5, 3))  # 输出: 8

嵌套函数

在一个函数内部定义的函数。

def outer_function(text):
    def inner_function():
        return text.upper()
    return inner_function

print(outer_function("hello")())  # 输出: HELLO

函数装饰器

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。借助 Python 的@语法,把 decorator置于函数的定义处

示例:

我们接下来要做一件事,调用 hello 函数的同时,记录日志,一般做法:我们定义 log 和 hello 函数,然后依次调用它们

常规用法:

def log():
    print('日记记录。。。')


def hello(world):
    print('hello' + world)


def exec():
    log()
    hello('world')

exec()

装饰器改造


def log(fn): # 接受装饰的函数
    def wrapper(world): # 接受参数,函数名自定义
        print('日记记录。。。')
        return fn(world) # 调用log装饰的fn函数
    return wrapper

@log   # == log(hello)
def hello(world):
    print('hello' + world)

hello('world!!')

在这里插入图片描述

高阶函数

可以接受其他函数作为参数或者返回一个函数的函数。

def make_twice(func):
    def wrapper(x):
        return func(func(x))
    return wrapper

@make_twice
def double(x):
    return x * 2

print(double(5))  # 输出: 20

函数参数

位置参数

必须按顺序传递。

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

print(add(3, 4))  # 输出: 7

默认参数

可以提供默认值。

def greet(name, message="Hello"):
    return f"{message}, {name}!"

print(greet("Alice"))  # 输出: Hello, Alice!
print(greet("Bob", "Good morning"))  # 输出: Good morning, Bob!

可变位置参数

使用 * 收集任意数量的位置参数。

def add(*args):
    return sum(args)

print(add(1, 2, 3, 4))  # 输出: 10

可变关键字参数

使用 ** 收集任意数量的关键字参数。

def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name="Alice", age=25)  # 输出: name: Alice, age: 25

函数属性和方法

__name__

函数的名称。

def my_function():
    pass

print(my_function.__name__)  # 输出: my_function

__doc__

函数的文档字符串。

def my_function():
    """这是一个示例函数"""
    pass

print(my_function.__doc__)  # 输出: 这是一个示例函数

func.__dict__

函数的属性字典。

def my_function():
    pass

my_function.attr = "value"
print(my_function.__dict__)  # 输出: {'attr': 'value'}

func.__defaults__

函数的默认参数值。

def my_function(a, b=10):
    pass

print(my_function.__defaults__)  # 输出: (10,)

func.__annotations__

函数的参数和返回值注解。

def my_function(a: int, b: str) -> bool:
    pass

print(my_function.__annotations__)  # 输出: {'a': <class 'int'>, 'b': <class 'str'>, 'return': <class 'bool'>}

函数的作用域

全局作用域

在函数外部定义的变量。

x = 10

def my_function():
    print(x)

my_function()  # 输出: 10

局部作用域

在函数内部定义的变量。

def my_function():
    y = 20
    print(y)

my_function()  # 输出: 20
print(y)  # NameError: name 'y' is not defined

闭包

闭包是指一个函数记住并访问其外部作用域中的变量。

def outer_function(x):
    def inner_function():
        return x * 2
    return inner_function

double = outer_function(10)
print(double())  # 输出: 20

总结

函数是 Python 编程中的核心概念之一。通过本教程,我们学习了函数的定义、参数、返回值、类型、属性和方法、作用域以及闭包等概念。掌握这些知识点将帮助你编写更清晰、更高效的代码。如果你有任何问题或需要进一步的帮助,请随时联系我们。

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziyu_jia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值