—— 路漫漫其修远兮,吾将上下而求索。
前路漫漫,我用Python探索世界。大家好,学习是枯燥的,坚持是困难的,总会在不经已经被打断。最近你学习了吗?笔者将用2篇文章与大家分享成为高级开发人员必须要知道的10个Python概念。考虑到大家阅读长篇幅的文章容易打瞌睡,今天我们只讲前5个。
众所周知,Python是目前世界上最流行的语言之一。今年来,在TIOBE编程语言排行榜中,经常高居榜首,在最新的排行榜中,继续蝉联榜首。
凭借其多功能特性、易于理解的语法和强大的社区支持,Python已成为大多数初学编程者的不二之选。
与其他适合初学者的编程语言不同,Python真正强大的事你可以用它做任何事。从自动化、脚本开发,到后端开发,再到数据分析和可视化以及近两年兴起的AI和机器学习,它几乎无所不能。Python可以用于:
但是,仅仅学习Python和掌握Python完全是两码事。就像很多Python高手说的,学习Python简单而又不简单。简单说的是它的语法简单,初学者容易入门;不简单说的是真正掌握它则并不容易。
接下来,我们将与大家分享掌握Python,成为高级开发人员必须要知道的10个概念。我将按照学习这些概念的难易程度的顺序(由易到难)添加主题,每个主题都有其“先决条件”部分,让你了解学习此内容之前应该了解哪些概念。每个部分还包含一个“相关概念”部分,它表示你可以进一步深入研究的主题。
So,事不宜迟,我们直接开始吧!
—— 先决条件:基本Python语法、函数
—— 相关概念:类、继承、多态和封装
显而易见,面向对象编程(Object-Oriented Programming, OOP)可能是你在编程中需要学习的最重要的概念之一。尽管Python不是像Java那样是一种严格基于类的语言,但你确实需要了解 良好的 OOP 概念和最佳实践,以便将来能够在实际项目中应用它们作出贡献。
面向对象编程不仅仅是创建类和对象,它还涉及用一种在现实世界中有意义的方式构建你的代码。
—— 学习资源推荐:
—— 先决条件:对Python中的函数有基本了解
—— 相关概念:lambda 函数(也称匿名函数)
在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,然后分别将实现加减乘除功能的函数作为参数传递给它,并将函数错位返回结果返回。极大提升了代码的泛化性和可重用性。
—— 先决条件:高阶函数,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高级编程中一个非常重要的概念,在现实世界的许多地方都有其独到的用处。例如:
—— 学习资源推荐:
—— 先决条件:高阶函数,闭包
—— 相关概念:函数装饰器、类装饰器、@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
如果你想深入学习装饰器,请务必学习以下主题:
这是一个非常大的主题,考虑到篇幅,我们不在本文中深入讨论。如果你感兴趣的话,可以关注我,我将在以后的文章中详细且深入讨论装饰器,并提供具体的示例帮助你理解它。
—— 学习资源推荐:
—— 先决条件:基本循环、函数
—— 相关概念: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)
生成器真的非常赞。它们让你可以灵活地将任何函数转化为迭代器(坦白说这是一个极简化的定义)。
实际上,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)
—— 学习资源推荐:
考虑到篇幅过长,影响大家的阅读学习效率,我们今天就分享这5个关键概念。剩余5个将在下一篇文章中继续分享。如果你感兴趣的话,可以关注我,以便第一时间收到文章推送通知。希望屏幕前爱学习的你有所收获,感谢你的阅读!
推荐阅读👇👇👇
Python必知必会:39个Python关键字详解,你的编程查阅小手册,收藏!
Python必知必会:每个程序员都必须知道的22个Python单行代码!
Python必知必会:15个令人相见恨晚的Python字符串格式化技巧!
- END -
🌟 如果你喜欢这篇文章并且愿意支持我的话,你可以:🌟
👍👍👍 点赞文章 ⤴️⤴️⤴️ 转发文章 ⚛️⚛️⚛️ 点击在看 🧑🤝🧑🧑🤝🧑🧑🤝🧑 让文章被推荐给更多人,找到更多志同道合的伙伴 👏👏👏 欢迎给我留言 关注我,第一时间接收更多关于Python、数据分析和机器学习的深入分析和最新趋势。我们一起探索数据的力量,解锁AI的潜能。你的每一次互动都是对我的极大鼓励,也是我们共同成长的动力!
👇👇👇 关注并开启星标提醒,让知识与技能的火花不断在你的职业道路上燃烧吧!
原文作者:数据派探险家;如有侵权,请联系管理员删除。