ITPub博客

首页 > 数据库 > 数据库开发技术 > 不掌握这10个Python概念,请不要自称高级开发人员(一)~~

不掌握这10个Python概念,请不要自称高级开发人员(一)~~

原创 数据库开发技术 作者:jackzhang 时间:2024-11-27 06:30:00 0 删除 编辑

—— 路漫漫其修远兮,吾将上下而求索。

前路漫漫,我用Python探索世界。大家好,学习是枯燥的,坚持是困难的,总会在不经已经被打断。最近你学习了吗?笔者将用2篇文章与大家分享成为高级开发人员必须要知道的10个Python概念。考虑到大家阅读长篇幅的文章容易打瞌睡,今天我们只讲前5个。

众所周知,Python是目前世界上最流行的语言之一。今年来,在TIOBE编程语言排行榜中,经常高居榜首,在最新的排行榜中,继续蝉联榜首。

凭借其多功能特性、易于理解的语法和强大的社区支持,Python已成为大多数初学编程者的不二之选。

与其他适合初学者的编程语言不同,Python真正强大的事你可以用它做任何事。从自动化、脚本开发,到后端开发,再到数据分析和可视化以及近两年兴起的AI和机器学习,它几乎无所不能。Python可以用于:

  • Web 开发(后端)
  • 数据分析和可视化
  • AI 和机器学习
  • 科学计算
  • 数值模拟
  • 自动化和脚本
  • 游戏开发

但是,仅仅学习Python和掌握Python完全是两码事。就像很多Python高手说的,学习Python简单而又不简单。简单说的是它的语法简单,初学者容易入门;不简单说的是真正掌握它则并不容易。

接下来,我们将与大家分享掌握Python,成为高级开发人员必须要知道的10个概念。我将按照学习这些概念的难易程度的顺序(由易到难)添加主题,每个主题都有其“先决条件”部分,让你了解学习此内容之前应该了解哪些概念。每个部分还包含一个“相关概念”部分,它表示你可以进一步深入研究的主题。

So,事不宜迟,我们直接开始吧!

1. 面向对象编程(Object-Oriented Programming)

—— 先决条件:基本Python语法、函数

—— 相关概念:类、继承、多态和封装

显而易见,面向对象编程(Object-Oriented Programming, OOP)可能是你在编程中需要学习的最重要的概念之一。尽管Python不是像Java那样是一种严格基于类的语言,但你确实需要了解 良好的 OOP 概念和最佳实践,以便将来能够在实际项目中应用它们作出贡献。

面向对象编程不仅仅是创建类和对象,它还涉及用一种在现实世界中有意义的方式构建你的代码。

—— 学习资源推荐:

  • https://realpython.com/python3-object-oriented-programming/
  • https://www.datacamp.com/tutorial/python-oop-tutorial

2. 一等函数和高阶函数(First Class Functions & Higher-order Functions)

—— 先决条件:对Python中的函数有基本了解

—— 相关概念:lambda 函数(也称匿名函数)

在Python中,函数被视为一等公民。这意味着,与其他任何对象(例如:整数、字符串或浮点数)一样,函数也可以在其他函数参数中传递,可以通过另一个函数返回。

一个高阶函数可以:

  • 将一个或多个函数作为参数
  • 返回函数作为结果

如果使用得当,高阶函数还可以:

  • 提高代码可重用性:高阶函数允许开发人员创建可操作其他函数的泛型函数,从而促进代码重用。这可以让开发人员写出更简洁、更易于维护的代码。
  • 函数式编程技术:理解高阶函数对于利用Python的函数式编程(例如使用 map()、filter()、reduce())至关重要。这些内置函数允许我们简洁且富有表现力的数据操作。
  • 灵活性和抽象性:通过使用高阶函数,开发人员可以抽象出复杂的操作,提升代码的灵活性和适配性。例如,讲不通的函数作为参数传递可以在不修改核心逻辑的情况下更改行为。

一起来看个示例:

from typing import Callable

def perform_operation(operation: Callable[[int, int], int | float],
                      x: int, y: int)
 -> int | float:

    return operation(x, y)

def add(x: int, y: int) -> int:
    return x + y

def subtract(x: int, y: int) -> int:
    return x - y

def multiply(x: int, y: int) -> int:
    return x * y

def divide(x: int, y: int) -> float:
    return x / y

# Using the higher-order function to perform operations
result_add = perform_operation(add, 10, 5)              # Pasing add function as argument
result_subtract = perform_operation(subtract, 10, 5)    # Pasing subtract function as argument
result_multiply = perform_operation(multiply, 10, 5)    # Pasing multiply function as argument
result_divide = perform_operation(divide, 10, 5)        # Pasing divide function as argument

print(result_add)       # Output: 15
print(result_subtract)  # Output: 5
print(result_multiply)  # Output: 50
print(result_divide)    # Output: 2.0

这里,我们写了一个泛型函数 perform_operation,然后分别将实现加减乘除功能的函数作为参数传递给它,并将函数错位返回结果返回。极大提升了代码的泛化性和可重用性。

3. 闭包(Closures)

—— 先决条件:高阶函数,Python的作用域

—— 相关概念:词法作用域,非局部关键字(nonlocal keyword)

与其他编程语言(如JavaScript)类似,Python中的闭包允许函数“记住”并从其封闭作用于内访问变量,即使在外部函数完成执行后也是如此。

这是太过书面化的定义,有点不好理解。让我们一起来简化它。

我们在以下场景创建闭包:

  • 嵌套函数在外部定义。
  • 嵌套函数引用外部函数作用域内的变量。
  • 外部函数返回嵌套函数。

这允许嵌套函数“闭包”它所需要的变量,保留它们的状态。

一起来看个示例:

from typing import Callable

def outer_func(x: int) -> Callable[[int], int]:
    def inner_func(y: int) -> int:
        return x + y
    return inner_func

closure: Callable[[int], int] = outer_func(5)
result: int = closure(10)
print(result) # Output: 15

在这个示例中,当你调用 outer_func 时,它会返回 inner_func。请注意,内部函数会将 x 加到你传递给它的任何数字上。

我们在调用闭包(实际上就是调用 inner_func 对象)时,就得到最终返回值 15。

看起来有点绕对吧?但这确实是Python高级编程中一个非常重要的概念,在现实世界的许多地方都有其独到的用处。例如:

  • 创建事件处理程序
  • 通过数据封装维护状态
  • 实现装饰器(闭包是装饰器背后的底层机制)

—— 学习资源推荐:

  • https://www.freecodecamp.org/news/first-class-functions-and-closures-in-python/
  • https://www.linkedin.com/pulse/understanding-closures-python-guide-real-world-examples-h-s-karthik/
  • https://dev.to/blugreenspace/understanding-closures-in-python-bbl

4. 装饰器(Decorators)

—— 先决条件:高阶函数,闭包

—— 相关概念:函数装饰器、类装饰器、@wraps

如果你在任何实际项目中使用过Python,你可能就会知道Python中的装饰器有多么强大。在我看来,深入了解Python装饰器对于任何中高级Python开发人员来说都是至关重要的。

简单来说,装饰器就是一个函数,它将另一个函数作为参数,扩展自身的行为,并返回一个新的函数。这允许你在不修改原始函数本身的情况下动态添加其他功能。

Python中如何创建装饰器的一个基本示例:

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Before calling the function")
        result = func(*args, **kwargs)
        print("After calling the function")
        return result
    return wrapper

@my_decorator
def my_function(x, y):
    return x + y

print(my_function(2, 3)) # Output: 5

如果你想深入学习装饰器,请务必学习以下主题:

  • 如何创建装饰器?
  • 如何使用参数定义装饰器(必需参数和可选参数)?
  • 装饰器链接
  • 如何在使用装饰器时保留函数元数据?

这是一个非常大的主题,考虑到篇幅,我们不在本文中深入讨论。如果你感兴趣的话,可以关注我,我将在以后的文章中详细且深入讨论装饰器,并提供具体的示例帮助你理解它。

—— 学习资源推荐:

  • https://realpython.com/primer-on-python-decorators/

5. 迭代器、可迭代对象和生成器(Iterators, Iterables & Generators)

—— 先决条件:基本循环、函数

—— 相关概念:yield 语句、iter() 和 next() 函数,itertools 模块

在Python,迭代器和可迭代对象是两个不同但有所关联的工具,它们共同帮助你迭代数据流或容器。迭代器支持并控制迭代过程,而可迭代对象则通常保存你想要一次迭代一个值的数据。

在Python中,迭代器和可迭代对象是基本概念,学习如何通过实现迭代器模式来创建迭代器对象对于任何Python开发人员来说都是必须要掌握的技能。

迭代器负责两个主要操作:

  • 从数据流或容器中返回数据,一次返回一项。
  • 跟踪记录当前和访问过的项。
迭代协议:

任何对象,要将其视为迭代器,都需要实现以下两种特殊方法:

  • __iter()__:用于初始化迭代器,它必须返回一个迭代器对象。
  • __next()__:用于从数据流中获取下一个迭代器对象。

一起看看实现迭代器的示例:

class MyIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.current > self.end:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

my_iterator = MyIterator(1, 5)
for i in my_iterator:
    print(i)
生成器函数(Generator Functions)

生成器真的非常赞。它们让你可以灵活地将任何函数转化为迭代器(坦白说这是一个极简化的定义)。

实际上,Python生成器是一种特殊类型的函数,它允许你以简单而有效的方式创建迭代器。

与返回单个值并终止的常规函数不同,生成器使用 yield 关键字随时间生成一系列值,并在每次生成后暂停执行(按需生成)。

这意味着,当你调用生成器函数时,它不会立即运行函数体;相反,它会返回一个生成器对象,该对象可以迭代地生成值(一次一个)。

这种方式在处理大型数据集或数据流时特别有用,因为它允许你动态生成值,而不用一次将数据全部加载进内存,可以避免消耗大量内存,从而显著提升程序性能。

一起看看下面这个解释生成器的基本示例:

def generator_function():
    for i in range(10):
        yield i*i

# Create a generator object
my_generator = generator_function()
# Iterate over the generator object
for i in my_generator:
    print(i)

—— 学习资源推荐:

  • https://realpython.com/python-iterators-iterables/#creating-generator-iterators

最后的话

考虑到篇幅过长,影响大家的阅读学习效率,我们今天就分享这5个关键概念。剩余5个将在下一篇文章中继续分享。如果你感兴趣的话,可以关注我,以便第一时间收到文章推送通知。希望屏幕前爱学习的你有所收获,感谢你的阅读!


推荐阅读👇👇👇

Python必知必会:39个Python关键字详解,你的编程查阅小手册,收藏!

Python必知必会:每个程序员都必须知道的22个Python单行代码!

Python必知必会:15个令人相见恨晚的Python字符串格式化技巧!

10个令人相见恨晚的Python高效编程技巧!

5个良好的Python编程习惯,助你成为Python高手!

- END -

🌟 如果你喜欢这篇文章并且愿意支持我的话,你可以:🌟

  • 👍👍👍 点赞文章
  • ⤴️⤴️⤴️ 转发文章
  • ⚛️⚛️⚛️ 点击在看
  • 🧑‍🤝‍🧑🧑‍🤝‍🧑🧑‍🤝‍🧑 让文章被推荐给更多人,找到更多志同道合的伙伴
  • 👏👏👏 欢迎给我留言

关注我,第一时间接收更多关于Python、数据分析和机器学习的深入分析和最新趋势。我们一起探索数据的力量,解锁AI的潜能。你的每一次互动都是对我的极大鼓励,也是我们共同成长的动力!

👇👇👇 关注并开启星标提醒,让知识与技能的火花不断在你的职业道路上燃烧吧!

原文作者:数据派探险家;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-12-19

  • 博文量
    119
  • 访问量
    55950