从零开始学习用Python构建神经网络

人工智能和机器人研究院 2018-05-30 08:54 次阅读

这是一份用于理解深度学习内部运作方式的初学者指南。作者根据自己从零开始学习用 Python 构建神经网络的经验,编写了一份攻略。内容涵盖神经网络定义、损失函数、前向传播、反向传播、梯度下降算法,对于想要了解深度学习运作原理的各位来说,内容精彩不可错过。

动机:为了深入了解深度学习,我决定从零开始构建神经网络,并且不使用类似 Tensorflow 的深度学习库。我相信,对于任何有理想的数据科学家而言,理解神经网络内部的运作方式都非常重要。

本文涵盖了我学到的所有东西,希望你也能从中获益!

什么是神经网络?

许多有关神经网络的介绍资料会将神经网络与大脑进行类比。但我发现,将神经网络简单地描述为一个从输入映射到输出的数学函数理解起来更容易。

神经网络由以下部分组成:

一个输入层,x

任意数量的隐藏层

一个输出层,ŷ

每两层之间都有一组权重和偏置,W 和 b

每个隐藏层都要选择一个激活函数 σ。在本文中,我们选用 Sigmoid 激活函数。

下图展示了 2 层神经网络的结构(请注意,在计算神经网络层数的时候,通常不计入输入层)。

二层神经网络的结构

利用 Python 建立神经网络非常容易。

class NeuralNetwork:    def __init__(self, x, y):        self.input      = x        self.weights1   = np.random.rand(self.input.shape[1],4)        self.weights2   = np.random.rand(4,1)                        self.y          = y        self.output     = np.zeros(y.shape)

训练神经网络

一个简单 2 层神经网络的输出 ŷ 可以表示为:

你可能注意到,在上面的等式当中,权重 W 和偏置 b 是影响输出 ŷ 的唯一变量。

自然,权重和偏差的正确值决定了预测的强度。根据输入数据微调权重和偏置的过程称为神经网络训练。

训练过程的每一次迭代包含以下步骤:

计算预测的输出 ŷ,称为前向传播

更新权重和偏置,称为反向传播

以下流程图说明了这个过程:

前向传播

正如我们在上图中所看到的,前向传播只是一个简单的计算。对于一个基本的 2 层神经网络,神经网络的输出计算如下:

我们可以在 Python 代码中添加一个前向传播函数来做到这一点。简单起见,我们假设偏置为 0。

class NeuralNetwork:    def __init__(self, x, y):        self.input      = x        self.weights1   = np.random.rand(self.input.shape[1],4)        self.weights2   = np.random.rand(4,1)                        self.y          = y        self.output     = np.zeros(self.y.shape)    def feedforward(self):        self.layer1 = sigmoid(np.dot(self.input, self.weights1))        self.output = sigmoid(np.dot(self.layer1, self.weights2))

然而,我们仍然需要一种方法来评估我们的预测的「优秀程度」(即,我们的预测与真实值相差多少?)这就需要用到损失函数了。

损失函数

损失函数有很多种,而我们问题的性质会决定我们使用哪种损失函数。在本文中,我们将采用简单的误差平方和。

误差平方和,即每个预测值和真实值之间差值的平均值。这个差值是取了平方项的,所以我们测量的是差值的绝对值。

在训练过程中,我们的目标是找到一组最佳的权重和偏置,使损失函数最小化。

反向传播

现在,我们已经找到了预测误差的方法(损失函数),那么我们需要一种方法将错误「传播」回去,从而更新权重和偏置。

为了确定权重和偏置调整的适当值,我们需要知道损失函数对权重和偏置的偏导数。

从微积分的角度来看,函数的偏导数也就是函数的斜率。

梯度下降算法

如果我们知道了偏导数,我们可以通过简单增加或减少偏导数(如上图所示)的方式来更新权重和偏置。这就是所谓的梯度下降。

然而,由于损失函数的方程不包含权重和偏置,所以我们不能直接计算损失函数对权重和偏置的偏导数。因此,我们需要链式法则来帮助计算。

以上是用于计算损失函数对权重偏导数的链式法则。简单起见,我们只展示了一层神经网络的偏导数。

唷!这看起来不大好看,但这能让我们获得所需——损失函数对权重的偏导数(斜率),以便相应调整权重。

既然我们已经有了链式法则公式,接下来我们把反向传播函数添加到 Python 代码中。

class NeuralNetwork:    def __init__(self, x, y):        self.input      = x        self.weights1   = np.random.rand(self.input.shape[1],4)        self.weights2   = np.random.rand(4,1)                        self.y          = y        self.output     = np.zeros(self.y.shape)    def feedforward(self):        self.layer1 = sigmoid(np.dot(self.input, self.weights1))        self.output = sigmoid(np.dot(self.layer1, self.weights2))    def backprop(self):        # application of the chain rule to find derivative of the loss function with respect to weights2 and weights1        d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))        d_weights1 = np.dot(self.input.T,  (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))        # update the weights with the derivative (slope) of the loss function        self.weights1 += d_weights1        self.weights2 += d_weights2

整合

既然我们已经有了做前向传播和反向传播的完整 Python 代码,我们可以将神经网络应用到一个示例中,看看它的效果。

我们的神经网络应该能够习得理想的权重集合以表示这个函数。请注意,对于我们来说,仅通过检查来计算权重并非一件小事。

如果我们将神经网络进行 1500 次迭代,看看会发生什么。下图展示了每次迭代的损失函数值,我们可以清晰地发现损失函数单调下降到最小值。这与我们前面讨论的梯度下降算法是一致的。

让我们看看神经网络在进行 1500 次迭代后的最终预测(输出):

进行 1500 次迭代后的预测值

我们成功了!我们的前向传播和反向传播算法成功训练了神经网络,且预测值收敛到了真实值。

请注意,预测值和真实值之间还是有一些轻微差异的。这是可取的,因为它防止了过度拟合,并且使得神经网络具有更强的泛化能力。

下一步

幸运的是,我们的探索还没有结束。关于神经网络和深度学习还有很多需要学习的地方。例如:

除了 Sigmoid 函数之外,我们还可以使用哪些激活函数?

在训练神经网络时使用学习率

使用卷积进行图像分类任务

最后一点想法

在撰写此文的过程中,我已经学到了很多,希望本文也能对你有所帮助。

在没有完全了解神经网络内部工作原理的情况下,虽然使用诸如 TensorFlow 和 Keras 之类的深度学习库可以让我们很容易地建立深度网络,但我认为对于有抱负的数据科学家而言,深入理解神经网络还是大有裨益的。

原文标题:无需深度学习框架,如何从零开始用Python构建神经网络

文章出处:【微信号:gh_ecbcc3b6eabf,微信公众号:人工智能和机器人研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

一种基于深度学习的算法,以识别用户在注视设备时的表情

这一项算法除了识别表情,还可以和用户体重、性别、年龄以及曾经的购物记录等结合。在三星展示的示意图里面....

的头像 科技美学 发表于 08-21 17:04 90次 阅读
一种基于深度学习的算法,以识别用户在注视设备时的表情

机器人十大新兴应用领域

仓储和物流:仓储机器人可应用人工智能算法和大数据来执行各种任务。在山区等人类很难到达和需要花很长时间....

的头像 天津机器人 发表于 08-21 11:38 152次 阅读
机器人十大新兴应用领域

基于乘法的运算来体现体征交叉的DNN网络结构

接下来,我们分别来具体介绍这两种形式的PNN模型,由于涉及到复杂度的分析,所以我们这里先定义Embe....

的头像 人工智能爱好者社区 发表于 08-20 16:41 121次 阅读
基于乘法的运算来体现体征交叉的DNN网络结构

如何搞定做机器学习研究需要的数学?

有人说,概率论线性代数要预先精通;有人说,微积分要懂一点;也有人说,没必要特地去补;甚至有人专门写了....

的头像 中国人工智能学会 发表于 08-20 14:24 200次 阅读
如何搞定做机器学习研究需要的数学?

【连载】深度学习笔记5:正则化与dropout

      在笔记 4 中,详细阐述了机器学习中利用正则化防止过拟合的基本方法,对 L1 和 L2 ....

的头像 人工智能实训营 发表于 08-20 12:47 227次 阅读
【连载】深度学习笔记5:正则化与dropout

【连载】深度学习笔记7:Tensorflow入门

从前面的学习笔记中,和大家一起使用了 numpy 一步一步从感知机开始到两层网络以及最后实现了深度神....

的头像 人工智能实训营 发表于 08-20 12:47 194次 阅读
【连载】深度学习笔记7:Tensorflow入门

基于深度学习的智能机器人导航和感知

很多制造流程用的都是自动化技术,但如果能够实现自动化生产,效率就会非常高了,但灵活度会比较低。被中国....

的头像 智车科技 发表于 08-20 09:46 336次 阅读
基于深度学习的智能机器人导航和感知

基于Featuretools Python库来实现特征工程自动化的实例

特征构造是一个非常耗时的过程,因为每个新特征都需要经过几个步骤去构造,特别是那些需要用到多张表信息的....

的头像 电子发烧友网工程师 发表于 08-20 09:16 494次 阅读
基于Featuretools Python库来实现特征工程自动化的实例

人气飙升的Julia,是否值得你拥有?

首先,如果处理速度对你来说并不重要,Julia可能不如你正在使用的任何产品(至少现在如此)。有些R用....

的头像 新智元 发表于 08-20 09:04 258次 阅读
人气飙升的Julia,是否值得你拥有?

中国AI发展还有哪些问题?

如果是属于这些性质的问题,机器都可以做,而且最终是会完全代替人的,这种问题也叫“照章办事”。而对于动....

的头像 新智元 发表于 08-20 09:00 362次 阅读
中国AI发展还有哪些问题?

一张“迷你地图”,教你如何进击机器学习!

由图可见,想要进击机器学习,成为机器学习方面的专家,那么你需要从入门、深度学习、数据科学、R语言、P....

的头像 新智元 发表于 08-19 08:34 379次 阅读
一张“迷你地图”,教你如何进击机器学习!

用python实现图像处理

[table] [tr][td] 最近在看数字图像处理方面的东东,书看多了,就想实验一下,本想用C之类的来实现的,可是感觉太麻烦,于是就...

发表于 08-19 08:18 7次 阅读
用python实现图像处理

Python爬虫8个常用的爬虫技巧分析总结

用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过....

的头像 马哥Linux运维 发表于 08-18 11:45 263次 阅读
Python爬虫8个常用的爬虫技巧分析总结

Python判断文件/目录存在的方法

使用os模块判断文件

的头像 马哥Linux运维 发表于 08-18 11:18 188次 阅读
Python判断文件/目录存在的方法

探讨深度学习在自动驾驶中的应用

深度强化学习的理论、自动驾驶技术的现状以及问题、深度强化学习在自动驾驶技术当中的应用及基于深度强化学....

的头像 智车科技 发表于 08-18 10:19 264次 阅读
探讨深度学习在自动驾驶中的应用

科技王凡:如何保证自主泊车的安全

纵目科技王凡提出了“自动驾驶安全的马斯洛三角形”,让人耳目一新。

的头像 佐思汽车研究 发表于 08-18 10:12 600次 阅读
科技王凡:如何保证自主泊车的安全

英特尔宣布收购深度学习创业公司Vertex.AI

英特尔公司想要把更多人工智能(AI)技术整合到各项业务中,该公司在周四宣布收购深度学习创业公司Ver....

的头像 ICChina 发表于 08-18 09:32 441次 阅读
英特尔宣布收购深度学习创业公司Vertex.AI

micropython的详细中文教程资料免费下载

MicroPython在2014成功的在kickstarter上众筹,获得很高的评价,现在越来越多的....

发表于 08-17 18:01 55次 阅读
micropython的详细中文教程资料免费下载

在当前深度学习比较火热的情景下需要避免的三个坑

深度学习在过去几年一直是人工智能领域最热门的话题。事实上,正是它激发了科学家、政府、大公司以及其他所....

的头像 人工智能学家 发表于 08-17 17:16 300次 阅读
在当前深度学习比较火热的情景下需要避免的三个坑

世界机器人大会开幕,机器人产业界前沿技术悉数亮相

在回答“除了深度学习之外,还会有何种技术拉动机器人发展”这个问题时,Rolf Pfeifer称,整个....

的头像 机器人在线订阅号 发表于 08-17 14:45 472次 阅读
世界机器人大会开幕,机器人产业界前沿技术悉数亮相

英特尔收购深度学习创业公司Vertex.AI,实现边缘计算的灵活深度学习

据科技博客TechCrunch北京时间8月17日报道,英特尔公司想要把更多人工智能(AI)技术整合到....

的头像 罗欣 发表于 08-17 09:31 895次 阅读
英特尔收购深度学习创业公司Vertex.AI,实现边缘计算的灵活深度学习

Python是机器学习的主流语言,你真的掌握了Python吗?

给定一个包含多个元素的list,让你查找其中出现次数最多的元素,你会怎么做?在下图中,我们介绍了两种....

的头像 论智 发表于 08-17 09:21 131次 阅读
Python是机器学习的主流语言,你真的掌握了Python吗?

Python是机器学习的主流语言,你真的掌握了Python吗?

给定一个包含多个元素的list,让你查找其中出现次数最多的元素,你会怎么做?在下图中,我们介绍了两种....

的头像 论智 发表于 08-17 09:21 225次 阅读
Python是机器学习的主流语言,你真的掌握了Python吗?

如何用深度学习模型,模仿人类的教练过程?

1940年代,科学家们模仿神经元的解剖学构造,发明了一种数据结构——神经元 perceptron。科....

的头像 新智元 发表于 08-17 08:31 836次 阅读
如何用深度学习模型,模仿人类的教练过程?

一种简单的,循序的方式讲解神经网络

一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多....

的头像 人工智能学家 发表于 08-16 18:17 538次 阅读
一种简单的,循序的方式讲解神经网络

如何抢占人工智能战略制高点?深度学习是重点!

深度学习框架是新一轮人工智能跨越发展的核心引擎,也是全球科技创新和产业发展的前沿阵地。近年来,各国竞....

发表于 08-16 17:41 185次 阅读
如何抢占人工智能战略制高点?深度学习是重点!

浅析深度学习在半导体行业的应用

近年来摩尔定律增长的脚步放缓,关于摩尔定律的种种猜测甚嚣尘上。但半导体行业人,仍然对此持乐观态度:持....

的头像 宽禁带半导体技术创新联盟 发表于 08-16 14:09 354次 阅读
浅析深度学习在半导体行业的应用

探讨workshop和丰富详细的课程讲解

深度学习作为一种革命性的技术,可以发现数据中潜藏的模式并在很多复杂任务中取得成功。深度学习速成课希望....

的头像 将门创投 发表于 08-16 10:01 346次 阅读
探讨workshop和丰富详细的课程讲解

组建一个出色的数据团队都需要哪些角色?

有一点非常重要,作为一名数据分析师,所做出的任何结论都不能脱离数据。这是一种需要专业训练的技能,就如....

的头像 电子发烧友网工程师 发表于 08-16 09:57 264次 阅读
组建一个出色的数据团队都需要哪些角色?

全球规模最大的多类别、病灶级别标注的开放获取临床医疗图像数据集

要设计深度学习算法解决临床问题,“需要对技术和临床实践两方面都拥有深刻的理解,”吕乐博士说:“AI ....

的头像 新智元 发表于 08-16 09:41 286次 阅读
全球规模最大的多类别、病灶级别标注的开放获取临床医疗图像数据集

李开复:人工智能领域如何拯救人性

8月15日,李开复在北京进行了有关人工智能的主题演讲。在演讲中,李开复分析了人工智能对于整个人类的影....

的头像 章鹰 发表于 08-16 09:40 864次 阅读
李开复:人工智能领域如何拯救人性

如何建立起强大的视觉层次结构,并最终成为强大的图像特征提取器

如果你仔细看了上文中的gif,你会发现我们把5×5的特征矩阵转换成了3×3的特征矩阵,输入图像的边缘....

的头像 论智 发表于 08-16 09:15 990次 阅读
如何建立起强大的视觉层次结构,并最终成为强大的图像特征提取器

TIOBE 8月编程语言指数排行榜公布:Python超越C++不是梦

TIOBE 8 月编程语言指数排行榜已经公布了。TIOBE 刚刚发布了 8 月编程语言排行榜,排名前....

的头像 算法与数据结构 发表于 08-15 17:13 307次 阅读
TIOBE 8月编程语言指数排行榜公布:Python超越C++不是梦

2018年最热门的编程语言,Python在整体排名中位居榜首

Ganssle的想法也可能是错的。虽然IEEE的调查并未另外分出Windows app,但它区分出行....

的头像 面包板社区 发表于 08-15 17:04 590次 阅读
2018年最热门的编程语言,Python在整体排名中位居榜首

深度学习比较火热的情景下需要避免的三个坑

深度学习仍然是一项非常尖端的技术。您可以像许多人一样获得快速简便的解决方案,特别是使用广泛使用的AP....

的头像 中国人工智能学会 发表于 08-15 14:18 486次 阅读
深度学习比较火热的情景下需要避免的三个坑

STM32F407开发板移植MicroPython

MicroPython准备工作:1.     下载rt_thread源码:见附件链接2.     下载ENV工具...

发表于 08-15 14:02 245次 阅读
STM32F407开发板移植MicroPython

利用独创的深度学习模型,通过对大量音乐数据的学习及训练写出音乐作品

具体来说,他们的技术核心是层次化深度学习网络结构和生成式对抗学习方式,特点是可以让生成的乐曲赋有多样....

的头像 电子发烧友网工程师 发表于 08-15 09:09 311次 阅读
利用独创的深度学习模型,通过对大量音乐数据的学习及训练写出音乐作品

如何简单跨过程序员的“技术门槛”?

python的语法简洁清晰,语法接近英语,python简单的语法可以让初学者专注于思考要做的事情,而....

的头像 电子发烧友网工程师 发表于 08-15 08:54 347次 阅读
如何简单跨过程序员的“技术门槛”?

Dropout如何成为SDR的特殊情况

如之前所说,Dropout需要将每层的隐藏单元在Bernoulli过程中删除。如果我们在同样的网络中....

的头像 论智 发表于 08-15 08:32 475次 阅读
Dropout如何成为SDR的特殊情况

Python神奇方法系统的梳理

当你定义的类中一个实例调用了unicode(),用于给它定义行为。unicode()像是str(),....

的头像 新智元 发表于 08-15 08:18 582次 阅读
Python神奇方法系统的梳理

瑟瑟发抖:深度学习可以通过一段代码找出代码作者

最近又有两个人,Caliskan和Greenstadt(名字不重要,姑且就称大C和大G)突然站出来说....

的头像 人工智能头条 发表于 08-14 17:45 781次 阅读
瑟瑟发抖:深度学习可以通过一段代码找出代码作者

东方网力“天眼”结构化一体机实现实时视频流结构化分析

东方网力“天眼”结构化一体机可以实现实时视频流结构化分析,并基于结构化分析结果进行告警、检索和挖掘等....

的头像 安全自动化 发表于 08-14 17:34 700次 阅读
东方网力“天眼”结构化一体机实现实时视频流结构化分析

哪些行业正在或即将被人工智能改变?

人工智能发端于上世纪五十年代,经历了几次繁荣与低谷,到2016年谷歌所收购的DeepMind公司的人....

的头像 机器人博览 发表于 08-14 16:04 943次 阅读
哪些行业正在或即将被人工智能改变?

【连载】深度学习笔记4:深度神经网络的正则化

今天要写的是关于机器学习和深度学习中的一项关键技术:正则化。相信在机器学习领域摸爬滚打多年的你一定知....

的头像 人工智能实训营 发表于 08-14 11:58 412次 阅读
【连载】深度学习笔记4:深度神经网络的正则化

轻松开启生物医学图像深度学习的探索之旅

长期以来,计算机视觉方法一直用于自动分析生物医学影像。近年来,随着深度学习的出现,许多其他机器学习方....

的头像 TensorFlow 发表于 08-14 11:29 287次 阅读
轻松开启生物医学图像深度学习的探索之旅

一种自动生成反向传播方程的方法

为此,我们提出一种领域特定语言(domain specific language),以将这些数学公式....

的头像 新智元 发表于 08-14 09:55 352次 阅读
一种自动生成反向传播方程的方法

OpenCV3计算机视觉 Python语言实现(原书第2版)中文电子教材免费下载

计算机视觉是一门用计算机模拟生物视觉的学科,更具体地讲,就是让计算机代替人眼实现对目标的识别、分类、....

发表于 08-13 16:48 99次 阅读
OpenCV3计算机视觉 Python语言实现(原书第2版)中文电子教材免费下载

如何使用Python编写能够从原始文本提取信息的程序

自然语言处理(Natural Language Processing,NLP)是人工智能的子领域之一....

的头像 电子发烧友网工程师 发表于 08-13 10:02 628次 阅读
如何使用Python编写能够从原始文本提取信息的程序

NIPS 2018又出事了:审稿信息泄露,双盲评审失效!

当审稿人输入域名冲突的信息时,CMT系统会自动过滤掉有域名相冲突的论文;因此,审稿人通过输入或者不输....

的头像 新智元 发表于 08-13 09:57 585次 阅读
NIPS 2018又出事了:审稿信息泄露,双盲评审失效!

【详解】FPGA:深度学习的未来?

作者:Griffin Lacey Graham Taylor Shawaki Areibi 来源:arxiv 摘要 最近几年数据量和可访问性的迅速增长,使得人...

发表于 08-13 09:33 269次 阅读
【详解】FPGA:深度学习的未来?

如何解决数据稀疏而对深度学习的影响问题?详细方法概述

深度学习,有太多令人惊叹的能力!从12年的图像识别开始,深度学习的一个个突破,让人们一次又一次的刷新....

的头像 中国人工智能学会 发表于 08-12 11:49 477次 阅读
如何解决数据稀疏而对深度学习的影响问题?详细方法概述

用AI进行制药可减少一半的成本,“救命药”是否人人都能吃得起?

那个时候的中国市场,不仅对AI+制药领域认知布满了重重疑云,公众甚至对AI都没有太多的概念。直到半年....

发表于 08-12 11:08 621次 阅读
用AI进行制药可减少一半的成本,“救命药”是否人人都能吃得起?

数字经济的未来发展趋势如何?

数字经济带来了万物智联、网络化大规模协作、客制化价值创造等确定性,但也给企业带来原有尺度失效、技术复....

的头像 智能制造 发表于 08-11 11:34 820次 阅读
数字经济的未来发展趋势如何?

  华为云深度学习服务,让企业智能从此不求人

  近日,华为云发布了深度学习服务,要让企业智能从此不求人。那么企业云的深度学习服务有哪些能力,为什么能够做到让企业智...

发表于 08-02 20:44 228次 阅读
  华为云深度学习服务,让企业智能从此不求人

快速学习Python的技巧

用Python完成项目,编写的代码量更少,代码简短可读性强,团队协作开发时读别人的代码速度会非常快,使工作变得更加高效。优雅做...

发表于 07-27 14:58 784次 阅读
快速学习Python的技巧

记录下为自己的板子编译MicroPython的过程

1、搭建环境 下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。 下载gcc-arm-none-eabi,...

发表于 07-25 12:26 545次 阅读
记录下为自己的板子编译MicroPython的过程

零基础python学习之Django框架设计思想

谈到在web应用领域,除了Python的语法,Django是Python后台一个最重要的框架,那么,什么是软件框架呢?举个简单的例子,对于...

发表于 07-20 14:39 158次 阅读
零基础python学习之Django框架设计思想

前百度深度学习研究院科学家分享:机器视觉开发实战经验

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的...

发表于 07-20 11:06 795次 阅读
前百度深度学习研究院科学家分享:机器视觉开发实战经验

如何实现openmv和STM32之间的UART通讯?

我已经尝试过,用OPENMV直接发送一给串口助手,串口助手可以接受到,用STM32自己的TX给RX写信息,改变某一引脚的电...

发表于 07-19 19:36 435次 阅读
如何实现openmv和STM32之间的UART通讯?

快速掌握Python的递归函数与匿名函数调用

      函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常...

发表于 07-19 16:22 159次 阅读
快速掌握Python的递归函数与匿名函数调用