如何处理 Python 入门难以进步的现象学入门

如何处理 Python 入门难以进步的现象_百度知道
如何处理 Python 入门难以进步的现象
提问者采纳
其次就是多写。唯一的办法就是多写。多看成熟的代码,一点一点的积累,然后不停的回头去看自己写的代码,比如某些包的源码。其实不只是python,各种语言都是这样,去观摩,Python高级编程,现在网上太多开源的代码。同时也要多读推荐一本书,里面有很多关于Python思想,不停的去重构、技巧等内容,对于提升很有帮助
来自团队:
其他类似问题
为您推荐:
系统崩溃的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁点击底部&阅读原文&或登陆:一.问题描述传说搜狗公司请了个大牛,把这方面搞得风生水起。最近组内的LDA用得风风火火的,组内同事也是言必称LDA。不花点时间看看,都快跟人说不上话了。当然,学习东西慢就只好从简单的开始了,所以把简单的基础的东西在这里讲讲,希望能把基本问题讲清楚,高深的推导就跳过了。1.1文本建模相关统计文本建模的目的其实很简单:就是估算一组参数,这组参数使得整个语料库出现的概率最大。这是很简单的极大似然的思想了,就是认为观测到的样本的概率是最大的。建模的目标也是这样,下面就用数学来表示吧。一开始来说,先要注意假设了一些隐变量z,也就是topic。每个文档都符合一个topic的分布,另外是每个topic里面的词也是符合一个分布的,这个似然是以文档为单位的。极大似然式子全部写出来是下面的样子的其中的M表示文档个数。其中的α,就是每个文档符合的那个topic分布的参数,注意这个家伙是一个向量,后面会再描述;其中的β,就是每个topic里面的词符合的那个分布的参数,注意这个也是一个向量。本来到这里看起来挺简单的,就是一个普通的极大似然估计,估计好参数α和β,就大功告成了。如果是传统的极大似然估计,好办了,求个梯度,梯度为0的地方就是解了,这里这个东西偏偏多了个隐变量,就是每个词属于哪个topic的?还有每个文档属于哪个topic的?比如,每个文档的topic是怎么分布的(意思就是,每个文档是按概率属于各个topic的,当然,各个topic的词的分布情况是不一样的,比如有金融,电商两种topic,文档有可能是0.3的概率属于金融,0.7的概率属于电商),还有文档里面每个词有来自哪种类型的词的分布的(意思就是,每个词来自哪个topic的,每个topic里面的词分布不一致的,如金融topic里面“人民币”这个词的概率是0.7,“商品”这个词的概率是0.3;电商topic里面“人民币”这个词的概率是0.4,“商品”这个词的概率是0.6)。这个玩笑就开大了,直接求解就玩不动了,只好用其他算法了。候选的比较大众的求解有隐变量的算法有EM。下面先把似然函数用全概率表示出来再做讨论吧。假设一个文档w_m的topic分布(doc-topic分布)已知,用向量θ_m表示(这个向量的每一项的和为1,总体可以表示一个概率分布),每个词来自哪个topic已知,用z_(m,n)表示,每个topic的词分布用矩阵中的一行(topic-word分布)表示(这是一个K*V的矩阵,其中V表示语料库中的词的数量,第一行表示第一个topic里面的词分布)。在已知上面的这些条件的情况下,计算一个文档的整个联合complete-data的联合分布(意思就是所以变量都已知的情况下)的式子如下
(3)中括号里面的是生成词的过程,大括号里面是生成文档的过程,最右边的那个概率就是?的后验概率。注意z_m是一个向量,维度为Nm。这么一堆东西,还是很复杂的,中间有这么多的奇怪的变量,计算起来的复杂读可想而知了,为了跟似然函数联系起来,通过对θ_m(doc-topic分布)和Φ(topic-word分布)积分,以及对z_(m,n)求和,得到只有w_m的边缘分布(4)那个累加号被去掉的原因是:在参数θ_m和φ_(z_(m,n) )都已知的情况下,一个词t被产生的概率是(5)这下好了,每个文档的似然概率有了,可惜没啥用,实际上这个边缘分布是求不出来的,因为z_(m,n)是隐藏变量,每个词都跟θ_m和Φ都跟z_(m,n)有关,那个连乘又是非常难用积分得到的,这个就是耦合现象。要注意联合分布和边缘分布对z乘积与加和的区别。另外,有些文献上是没有Φ相关的项的,这个看起来各种费劲,以后想清楚后回来解释。1.1.1 概率公式相关讨论对于公式(3),要多讨论点,这个是LDA模型的重要的东西,这里说为啥公式是长这个样子的。先直接抄《LDA数学八卦》的例子,就是文档怎么生成的,直接截图如下再不懂装懂,搞个概率图模型来看看。最上面的那个公式代表的就是步骤2——先弄K个topic-word骰子,为了符合贝叶斯学派的口味,这个K个骰子是有先验分布的,先验分布就是一个Dirichlet分布,参数是β,具体在公式(3)中的表现为p(Φ|β)。步骤3中,“抽取一个doc-topic骰子”,就是图下面的那个第一个水平的箭头,具体在公式(3)中表现为p(θ_m |α)。“投掷这个doc-topic骰子,得到一个topic编号z”这句话说的就是图下方第二个水平的箭头,具体在公式(3)中表现为p(z_(m,n) |θ_m)。步骤3中的第二步“选择K个topic-word骰子中编号为z的那个,投掷这个骰子,得到一个词”这句话说的是图右上角那个垂直的箭头,在公式(3)中具体表现为p(w_(m,n) |φ_(z_(m,n) ))。就是这个过程,导致了公式(3)长成了现在这个样子,够复杂,而且够棘手,直接去搞公式(4)来计算似然基本没戏的。1.1.2 似然函数求解上面小节说过了,计算似然函数是没戏的。大众候选算法还有EM,其实也不能解这样的问题,因为EM算法依赖条件概率其中的矩阵Θ,就是doc-topic分布矩阵,是一个M*K的矩阵,只是这也是一个隐变量对应的参数,就是文档的topic的先验分布。如果非要用EM算法,这里就需要利用另一个分布去拟合这个条件概率,这个就是变分法。变分法的基本思想就是:因为条件概率不好求,但是联合概率是已知的,就可以使用一种类似EM的方法,使用另外的一个概率函数去拟合要求的这个条件概率。具体资料以后再整理。还好的是LDA没有把参数α和β作为求解的最终目标,目标另有其人。这个什么极大似然,什么语言模型是个幌子。就像word2vec里面,其实目标是那些词向量,也就是那些参数值。用LDA来解,就更离谱了,连参数α和β这两个参数值都不是目标,而是那些隐变量对应的参数比较重要。不管用什么方法求解,这个LDA的目的是要做推理。其实需要求的东西其实是下面的式子
(6)第一个等号后面的分母p(w_m│α,β)就是上面公式(4)的那个值,参数θ_m(doc-topic分布)和Φ(topic-word分布)不见了是因为这两个量已经用观察到的w_(m,n)和对应的z_(m,n)求积分得到了跟这两个量无关的值,(论文上这个方法叫collapsed Gibbs Sampling,即通过求积分去掉一些未知变量,使Gibbs Sampling的式子更加简单),其实意思就是,参数θ_m和Φ已经使用MCMC的方法估算到了相应的值,估算的时候使用的样本就是训练样本,这里是一个奇怪的地方,有精力回来解释得容易理解点。就算是这样,哪怕都搞走了这么多参数,分母也不见得好求,一篇文章光求和的项就有K^(N_m )个。到了这一步,其实大家应该明白了,为啥(6)要表示成那样给大家看看,因为真的只是看看而已,还可以写成其他表现形式,但都不重要了,最后都会给出一个结论的,这个分母没法求,只好用其他办法了。公式(6)这个条件概率就是要拟合出来的分布。当然,在拟合这个分布过程中,产生了副产品——所有文档的在各个topic上的分布。一旦α和β确定了,每个文档在各个topic上的分布可以直接得到,这个副产品才是求解的目的。现在问题明确了,贝叶斯推理需要公式(6)的分布,拟合这个分布中产生的副产品是LDA产出的结果,有这结果就能用来做推理。二.问题求解2.1 LDA模型求解目标上面说清楚了,求解LDA就是拟合公式(6)的那个分布,中间要把doc-topic分布矩阵和topic-word分布矩阵求出来。论文总提到的方法是Gibbs Sample方法,下面就开始介绍。2.1.1 LDA Gibbs Sample方法简介这里介绍论文中的Gibbs Sample方法怎么拟合的。这个Gibbs Sample方法也不多介绍,因为具体没弄得特别理解。只知道这个方法的具体步骤:假设观测到的变量是x,隐变量是z(这两个都是向量),通常需要整出来的都是条件概率p(z|x),只是这个条件概率比较难求,只知道了联合概率p(z,x)(必须知道),Gibbs Sample方法的处理方式就是构造下面的条件概率使用上面的条件抽取z的R个样本z_r,r∈[1,R],当样本数量足够多的时候,条件概率可以用下面的式子近似了其中的δ函数形式是也就是,如果u是个0向量,就是1,否则是0.解决的方案有了,还有个条件需要具备,就是联合概率。2.1.2求联合概率联合概率表示如下这个联合分布是公式(3)利用积分去掉了参数θ_m(doc-topic分布)和Φ(topic-word分布)得到的,可以看到右边的式子,第一个概率跟α,第二个概率跟β无关。这样这两个概率就可以单独处理了。先看第一个分布p(w|z,β),如果给定了一组topic-word分布Φ,这个概率可以从观测到的词中生成:其中zi表示语料库中的第i个词的topic,wi表示语料库中的第i个词,W表示语料库中的词数。意思是,语料库中的W个词是根据主题zi观察到的独立多项分布(我们把每个词看做独立的多项分布产生的结果,忽略顺序因素,所以没有多项分布的系数),就是一个多项式分布。注意φ_(z_i,w_i )是矩阵Φ中的第zi行第i列的元素,顺便提醒一下这个矩阵Φ其实就是LDA要学习的一个东西,是K*V的矩阵,K是topic数,V是词汇数;另一个LDA要学习的东西就是矩阵Θ,也就是doc-topic分布矩阵,是一个M*K的矩阵,矩阵的第一行表示第一个文档的topic分布。把这个概率拆分到矩阵Φ的每一行和每一列去,得到下面的式子其中n_(z,t)表示词t在topic z中出现的次数。那么要求的第一个分布p(w|z,β),就可以通过对Φ的积分来求得其中是一个V维向量,表示在topic z中,各个词出现的次数。从这里看来,整个语料库就可以认为文档是K个独立的多项式分布生成的。同样的,第二个分布p(z|α)也可以这么计算,给定了如果给定了一组doc-topic分布Θ,这个概率可以从语料库中的每个词的topic来得到其中di表示第i个词来自哪个文档,n_(m,z)表示文档m中topic z出现的次数。把这个概率根据矩阵Θ进行积分,就得到第二个分布表示了其中是一个K维向量,表示在第m个文档中,各个topic出现的次数。联合分布就变成了
(7)2.1.3求完全条件分布根据上面的公式(7)就能得到Gibbs Sample方法所需要的条件分布
(8)其中第一个“=”号的分母,是因为根据(1.2.1)中,一个联合概率对zi做了积分得到的结果就是没有这个zi的边缘分布。表示这个向量没有第i列,t表示第t个词。1、最后一步那个正比符号出现是因为右下角那一项对所有的zi都一样,无论有一个词分配到了那个topic, 都是一样的,而在Gibbs Sample方法中,同等放大是可以的,所以很多的程序实现都只计算这三项。2、对于第m篇文档中的第n个词假设刚好就是语料库中的第t类词,它的topic是z,有两个性质可以使用。另外。利用这个式子,抽样就可以进行了。要注意的是,i是要遍历整个topic空间的,即i从1到K,需要计算K个概率的。这里的步骤就是不断迭代的,每次迭代都为每个词抽样一个新的topic,然后再根据每个词对应的topic情况估算doc-topic分布Θ和topic-word分布Φ。2.1.4抽样后更新参数抽样后怎么更新两个分布矩阵中的元素呢?来点推导,对于语料库中的第i个词w_i=t,其topic为z_i=k,同时令i=(m,n),意义为该词为第m个文档的第n个词。回到(1.1.1)中的概率图,这个概率图分成两个物理过程来看:,这个过程表示在生成第m 篇文档的时候,先从第一个坛子中抽了一个doc-topic骰子θ_m,然后投掷这个骰子生成了文档中第n个词的topic编号z_(m,n)=k。,这个过程表示用如下动作生成语料中第m篇文档的第n个词:在上帝手头的K个topic-word 骰子Φ中,挑选编号为z_(m,n)=k的那个骰子φ_k进行投掷,然后生成词w_(m,n)=t。对于第一个过程来说,α→θ_m→z_m这个过程会生成第m篇文档的所有tipic。《LDA数学八卦》说过,取先验分布为Dirichlet分布,所以前半部分对应于Dirichlet分布,θ_m→z_m就对应于Multinomial 分布。这样就构成了一个Dirichlet-Multinomial 共轭结构,如下图利用这个共轭结构,可以得到参数θ_m的后验概率是,M个文档就有M个这样的共轭结构,其中n_m是一个K维向量,表示第m个文档中各个topic产生的词数。由于LDA是一个bag-of-words结构,各个词之间都是可以自由交换的。比如说,在第一步中,可以先把所有文档的所有词的topic先全部生成,再把词一个个生成。这样的话,第二步也可以所有相同的topic放在一起,把相应的词生成。这样的话,对于topic k中的所有词来说,这一步就变成了,这样再看,前半部分对应于Dirichlet分布,后半部分对应于Multinomial 分布,整体构成一个Dirichlet-Multinomial 共轭结构,如下图利用这个共轭结构,可以得到参数φ_k的后验概率是,K个topic就有K个这样的共轭结构,其中n_k是一个V维向量,表示第k个topic中的产生的各个词的数量。具体为啥共轭机构会有这样的效果,具体参看《LDA数学八卦》,里面说得很清楚了。根据论文《Parameter estimation for text analysis》中θ_(m,k) 和φ_(k,t) 的定义,计算参数矩阵这两个值的更新方式如下
(10)这就得到了更新的式子,但数据挖掘DW(datadw) 
 文章为作者独立观点,不代表微头条立场
的最新文章
数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014用机器学习的方式,来判断「红楼梦后40回是否曹雪芹所写」这个老问题,会有什么意外的发现呢?数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014下载数据分析更多资料
自从Deep Learning之风盛起之时到现在,江湖上诞生了数据挖掘、数据分析、机器学习、R/python、Hadoop学习资料加微信:hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014长夜读是创见的一档晚间阅读推送,我们会精选那些时效性不强你平时无暇关心的精品文章伴你入睡数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014我当年和在进入数据分析这块行业的时候也是和很多刚进入这块的同学一样,一样的迷茫,一样的不知道该学习什么,一样数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014数据挖掘、机器学习、R语言、python 资料信息,联系微信 hai299014咨询资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014机器学习、数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014机器学习、数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘、R语言、python资料信息,联系微信 hai299014咨询数据挖掘、R语言、python资料信息,联系微信 hai299014咨询数据挖掘、R语言、python资料信息,联系微信 hai299014数据挖掘资料,点击底部左下角"阅读原文"作者:龙心尘 &&寒小阳 出处: http://blog.csdn.数据挖掘资料,点击底部左下角"阅读原文"作者:龙心尘 &&寒小阳 出处:
http://blog.csdn咨询数据挖掘、R语言、python资料信息,联系微信 hai299014查看更多资料
点击此处一、决策树模型组合
单决策树C4.5由于功能太简单,并且非常容易出现过拟1沈浩老师中国传媒大学教授,这位老师给我深的印象就是比较喜欢旅游、爱摄影,除此之外更多的介绍还一下子想不起来datadw数据资源帝,致力于源源不断的资料提供。涵盖数据分析/数据挖掘,机器学习,R/Python编程,算法原理与案例,大数据,分享专家经验或观点,能为你解决数据研究相关学习、工作问题!热门文章最新文章datadw数据资源帝,致力于源源不断的资料提供。涵盖数据分析/数据挖掘,机器学习,R/Python编程,算法原理与案例,大数据,分享专家经验或观点,能为你解决数据研究相关学习、工作问题!如何处理 Python 入门难以进步的现象_百度知道
如何处理 Python 入门难以进步的现象
提问者采纳
同时也要多读其实不只是python,不停的去重构,一点一点的积累,各种语言都是这样,然后不停的回头去看自己写的代码,现在网上太多开源的代码,去观摩。唯一的办法就是多写
其他类似问题
为您推荐:
其他1条回答
多写,碰到不懂的看官方文档或相关书籍+google
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁帮你提升 Python 的 27 种编程语言 | 程序师如何处理 Python 入门难以进步的现象?
看视频看呀看呀看, 看完了,基础的都懂了 然后就想写点东西 可是无从下手呀,我以为基础不扎实,又去看视频 好了 视频看完了
想网上找点习题来做,结果简单的习题做不出来,又怀疑基础没学好呀
又看视频和网上的文章 如此的循环着
学习有一个月了
我困惑的是,很难把知识点结合起来写个简单的东西
比如说目录遍历都写不出来
我知道站在岸上学不会游泳
你们可能会叫我多练 , 可是我想知道怎么去练
不能没有目的的去练,
其实我PHP也是如此的,能看懂代码就是难下笔
一身劲,不知如何用……
我不懒 我把每天安排满满的
只是每晚睡觉前看下知乎
看知乎以来第一次提问=========================================补充:很感谢各位的回复!也有很多人跟我一样困惑的!也感谢这位朋友!
但是你回答还不能解除我心中的困惑. 你说的一些开源项目,比如说: 注入神器
你是让我们去看他们是怎么写的吗?
还是照抄一遍。因为很多人说,多练习, 我就针对这个问题来说吧。 很多人都说练习没有给出明确的怎么练习,难道是对着书中抄一遍吗?
我真的不理解这样能帮忙自己什么。 对于目前以0基础的人,是没有C语言等其它语言基础的。 因为不像有基础的同学。2个星期看一遍官方文档就能够写了.
这对他们来说可以是小菜一碟呀. 其实上面说了这么多,我的心中大约隐隐的有答案。
我们所缺少的就是编程思想呀
照着书中抄行不通呀!
那么问题又来了?
如何培养 编程思维 ?
让自己从自己所学的知识结合起来。 我相信有好多关注这个问题的朋友是能看懂代码,能修改代码。
就是不知道从何下手写的!
一时头脑发热写出来的!可能我上面所说的编程思维有不对不要喷呀!
按时间排序
问题是没有看编程思路的视频,只看一些讲语法的书或视频,对初学者来说,学习时间成本太高。很多朋友是书上代码可以看懂,但自己不会写代码解决问题。请看黄哥本人写的文章如何捅破python编程的那层纸剪刀石头布小习题三种语言python2、php、go代码一段小代码说明@property装饰器的用法黄哥python远程视频培训班黄哥python培训试看视频播放地址
能理解题主的困惑,也写给曾经有过相似困惑的初学者。我认为主要原因有这几个:1. 学习动机不明你学习Python最初的目的是什么?总不能是为了应聘、为了考试、为了炫耀吧?我一直认为学习一样东西,一定是需求驱动的。因为我想实现某个东西,而去学习了某项技术。而不是因为我会了某样技能,我再去想想它还能做些什么。拿自己举例子,我决定学习Python的时候是为了用它写爬虫。因为听说Python写起来比java便捷很多。由于这个兴趣的驱动,去学习python的网络库的使用。一开始用自带的urllib,后来发现用起来麻烦,就想自己封装一个使用简单的库。后来发现总是用split分割字符串已经不能满足对网页元素提取的需求,去简单了解了正则表达式,去学习了HTMLParser……爬虫爬下来的数据要存起来啊,有没有方便的存取数据库的框架?然后学习了SQLAlchemy。爬下来的数据光我自己看还不够酷炫,我想做个网站,就去学习了django……你看看为了实现我自己提出的需求,我每一个加粗的字体标出来的都能单独写一个开源项目了,如果对任何一个感兴趣都可以去深究下去。所以说并不是你写不出来,而是没有找到自己感兴趣的“需求”去驱动自己朝着这个方向钻研下去。2.
知识面不够宽解决一项需求不止要掌握一门语言就可以。就比如题主说目录遍历都写不出来。如果你去搜索引擎搜索:“Python 目录遍历方法”我不相信搜不出来关于“递归”、“深搜”、“宽搜”等等的关键词,如果你连这些都不懂,就得去学习学习相关的算法了。觉得某一个需求很难实现,往往不是因为组合不出技术路线,而是你还不了解这条技术路线上的技术点。有些技术点,比如写目录遍历要用到python 的os库里的函数,并不需要你会用所有关于路径、文件操作的所有的函数怎么用。你只需要看着函数的简要说明,知道它们分别能干什么、我可能需要用到哪一个就够了。同样,也不需要把整本算法书啃一遍,每种都会写,只了解它们各自特点,我目前需要掌握哪一个,就够了。以后用到的时候,能想到,再具体去看。一年前我在知乎提了一个问题——,半年前自问自答了一下。现在想想当初的提问,就是因为了解的太少。想做一个刷票器,连HTTP请求都不知道,却问用什么语言实现,这不是很可笑吗?3. 思维方式有人说,我自认为自己需求很明确,掌握的知识点够宽,还是想不出技术路线怎么办?最初人类梦想飞上天空,用了风筝、火箭筒、巨型鸟翅膀,虽然最后都失败了,但最起码能飞行几秒钟到几分钟吧。有些问题,想不到简洁而有效的办法,但我不相信花两三天时间,苦思冥想,画画思维导图,写写思路,还写不出一个笨拙但可以解决问题的代码。我也不相信你再花一周时间闭门造车地自己试着优化,不能把这堆烂代码做些许优化。更加不相信一周之后,你和大神讨论、在网上搜索更好的方式、阅读别人的源码,还没有豁然开朗的收获。人类能够把一些看似不相关,实则充满内在联系的事物结合在一起,碰撞出火花,这就是创造力。这种能力也是需要锻炼的,也是从量变到质变的过程。很多人说,“要多读别人的代码”、“多写项目”、“一开始只是借鉴,慢慢就懂了”、“一开始只会用轮子,后来就会造轮子”,说的是没错,但他们没说自己独立思考的过程。从独立思考,到参考借鉴,到自己创造。---------------------------------------------------------------------------------------------------------------以上都是些抽象的,来点实际的,讲讲我的Python学习之路:1. 看到
大神回答这个问题了,表达一下崇拜之情。我就是看着廖老师的Python教程入门的。至今还没全部看完,因为浅浅的入门容易,想真正掌握Python的很多高级用法还是很不容易的。建议题主先了解Python的历史,看看目录,知道Python都能做啥,挑自己感兴趣的多了解了解。最底下的实战就是练手的了,跟着边想边做。2. 如果你对爬虫比较感兴趣,可以试着爬一爬廖老师的网站啊,把它们爬下来存到本地,然后就能在手机上不费流量地看了,想想是不是感觉很爽?那就把它作为自己的第一个Python项目吧。实在不会写了,可以看看我当时写的,只有50行。3. 用Python爬Python教程在本地看,还不爽,要放到kindle上看才爽嘛,找了找HTML转epub的工具,都不好用,有的转完不带图片的。算了自己研究一下epub文件格式的规则,自己用Python写一个好了。4. 爬网站爬得好慢啊,有没有什么可以改进?哦,对了想起来廖雪峰教程里有说到“线程”和“进程”对于I/O密集型操作要有利很多。我来看看学习学习怎么开线程、开进程。5. ……N. 学海无涯啊,只想把Python当计算器用够么?只会Python基本用法够么?只能借鉴别人创造力的果实够么?说了这么多,总结起来就是:明确需求和动机,拓宽知识面,锻炼思维方式。
不是打击题主,真心觉得题主可能不太适合 程序员 这种职业【跟其他职业一样都是坑啦,不要也罢】
本着劝和不劝离的道德理念,说2句。【本来怎么做能学好这种东西是应该题主自己去思考的,除非你还没成年】
1)网上个小的代码或者项目 如[有啥问百度google要]:如何用python读写excel,目标就是生成一个excel,写入你的个人信息什么的。
2)看网上找来的代码,看下有哪些函数,函数的功能,先不要去看函数的实现。3)然后就是自己思考去实现函数【猜测一般你回遇到,怎么截取字符串,怎么替换字符串等等非常小单元的功能,遇到就百度找下】,直到自己把函数功能写出来,这个过程学的最多,而且是记忆深刻的那种
4)自己写的跟别人的对比下,好坏优劣思考下。
最后,这样写多了,你就想知道整个项目代码是怎么组织在一起的,然后你就可以搞些大的项目。于是就不是停留在函数功能层面了,而是高大上的代码架构层面,传说中的boss大牛。-----@ 总结的还是非常好的
你过分强调照抄代码,可能过程差不多,你阅读源码,理解之后写出一个同样的东西,但不是照抄,起码里面的逻辑,语言的用法,涉及的原理总能学到东西吧,理解的东西多了,下回再“照抄”的时候是否就能找个难度大点的项目了?应该在这种不断的反馈中学习。
有了基础,当然要实战了:一上来去看那些开源项目的代码,当然看不懂,你需要——实战篇,从0开始,一天加一点代码,最后堆出一个完整的网站+iOS App
这个问题我想回答一下,分享一下我自己的经验和看法。我是一直反对类似高票答案这样,以及一些长长的「新手指南」里讲的,让一个初学者用尽Python这把「瑞士军刀」把所有可以依赖Python实现的方方面面都来上一遍的。我的理由很简单,懂Python的基础语法,和了解外部包并得以应用是两个事情,而了解各个方面的包对于初学者来说,耗时费力,事倍功半。我认为正确和理性的学习方法还是有所目标,也就是究竟想学会Python来做什么。比如你想用来做个网站,那学完Python基础语法后就应该研究研究Flask,那些爬虫、数据分析、数学模型等可以放一放,等到主线的学习任务要用到其他方面的工具时,可以回过头来再学。相应的,如果你学习Python就是用来做数据工作的,那么一些Web框架和搭建网站的小练习应该先放弃不学。我很喜欢Python,一开始学习时也是看了一些书和很多教程,类似高票答案一样,会让你接触到GUI、爬虫、数学、WEB等一系列Python可用的方面,各式各样依赖不同包的小练习搞得我手足无措,挫败感很强,我大致回想了一下,大概能做出来里面练习题的三成不到,剩下的七成完全下不了手。好在我本身学习Python还是目的性很强的,就是为了搞网站,不为别的。所以在我基本了解Python的语法后,开始读Flask的相关文档,并动手做网站。这之中会遇到各种问题,然而有赖于我一直就把全部的精力学习这一个方面,所以比分散精力去研究各种不同的包更容易获得一小步一小步的成功,每一小步的成功,解决一个小问题,我很有成就感,进而有足够的动力继续前进,最终,因为我总是在一条路上前进,因而我能走的更远。所以,我对题主的建议就是,我相信你有足够的能力学习好Python的基本语法知识,之后你所要做的,就是选择Python应用的一个方面,在这一个方面不断的学习、研究和动手做更多的事情。相应的,放弃Python在无关你所选择的方面的那些应用,暂时远离其他方面的练习。我天资愚笨,唯有术业专攻。
不请自来,我想题主是学生吧?如果在做项目,那么赶紧用来做点小功能入手即可。以我的经历,之前用php写大数据量和文本处理功能,觉得效率上,安全性上都不行,就用python 啦,找个教程看看,不会有时间给你看视频的,直接就用上了
想一件满足以下几个条件的事:1. 你用电脑完成的2. 你(几乎)每天都会做的3. 因为重复性的劳动让你不爽的好,如果你想到了,用 Python 写个程序简化它,最好是点击一下就帮你把事情做完了。怎么下手?Google。如果想不到。。。那就去刷题吧,不过那样挺没意思的。
排名靠前的答案,完全是来装逼的,根本就没看清楚题主的情况。什么开源项目,什么自己写的各种工具,像第一的 的答案,完全变成向题主炫耀:“你看我做了这么多东西厉害吧,你看我之道那么多小技巧厉害吧。哎呀其实人家也是菜鸟一枚呢别夸我。”这种回答,看了就来气,围观的已经会写代码的人看着很爽,但是对题主的情况一点帮助都没有。========吐槽完毕的分割线=================楼主这种情况,其实很常见。比如某小学生,一平米等于多少平方厘米,你教了半小时了,他还是不懂,然后没耐心的老师就开始说了“怎么这么简单的问题你都不会!”。比如拖延症,患者自己都很痛苦,某些朋友只会说“你别拖延了不就完了么!”给出这种答案,其实说白了就是无知+无能而已。拜托如果能不拖延,还叫拖延症么!拜托题主是“能看懂代码就是难下笔”好么!所以我给题主的建议就是:从最基础的开始,默写一个helloword开始,书上或者视频上一章讲完,你就默认程序范例,默写不下来,就再看一遍。基本上你默写不下来,就说明这里没有真正搞懂。刷题也是个好途径,那些说刷题有什么用的,跟问都有matlab了中学学解方程还有毛用的人一样,不解释。题主的问题在于,即使比较简单的题目,也刷不来。但是我相信,你按照第一步把范例程序能自己写下来了,应该就可以刷一些简单题目了。这个过程或许会很长,但是就是在这个过程中,一般来说你会产生一些想法,例如“我每天写这么多程序,但是具体写了多少行有效代码呢?”,然后你就会想自己写个统计有效代码行数的程序吧,也许开始你觉得这个问题很简单,所以你就直接开始了,然后发现原来没有想象得那么简单,就开始解决各种问题。这个过程你会发现刷题与解决实际问题的差别,就在于实际问题的非理想化。这又是一个快速提升的过程。等这个阶段过去了,再去看一些简单项目,相信你可以慢慢上手了。此时可以说你算是正式步入及格程序员的行列了。=============================其实这个过程跟其他领域的学习无异,无非是从简单到复杂,从理想问题到实际问题,step by step。如果老是想着一口吃个大胖子,很难快速提升。题主现在的水平,去看开源项目,纯属浪费时间。项目整体为何这样架构,局部的设计为何这样,根本无法理解,因为还有更多的编程知识题主没有接触过,例如设计模式。
import sys
__age = 12
#def __init__(self,age):
#def __del__(self):
def doSomething(self, s):
def main():
a.doSomething('111')
print a.s1
if __name__ == '__main__':
上面是最简单的一段python(最小全功能project 这个比helloworld有价值)程序开始, 函数, 参数传递,类-对象-实例化-公共私有属性-成员函数(OO)都涉及了然后就是往里面添功能 这段最好背下来 你已经是半个python coder了演进的 dosomething project# -*- coding:utf-8 -*-
#dosomething.py
#每种语言都有类似的dosomething工程 至少我用过的c++ nodejs delphi objectivec我知道有
import sys
别被这些红字吓住 这些都是注释 去掉全部注释 剩下的代码是50行
这可以知乎首发 别处没有的 不是copypaste来的 嘿嘿
程序复杂了 下面的class A
1.可以放到一个文件中 例如 filea.py
用 from filea import A
2.可以放到一个目录中 例如 modulea
用 from modulea import A
modulea目录必须要有__init__.py
class A 代码可以放在里面
modulea目录就是新的python库 你自己的
3.你如果有共享精神同时觉得自己的东西还不错
愿意把自己的class A(自己的python库)和别人分享
这有一篇 告诉你如何打包上传到pypi.python.org/pypi
http://liluo.org/blog/2012/08/how-to-create-python-egg/
以后别人就可以pip install modulea 安装你的库了
(巴菲特不会干这事 你愿意把赚钱的绝招告诉别人吗?这些人都是赚钱偷着乐 )
到这步 你就是个真上路的python coder了
s1 = 333 #公共属性
__age = 0 #私有属性 __开头
def __init__(self,age): #构造器 专有函数 __开头 __结尾
self.__age=age
def __del__(self): #析够 专有函数 __开头 __结尾
print 'destroyed'
return #函数体没内容则必须有return 否则可有可无
def __doSomething(self, s): #私有成员函数 __开头 无__结尾
print self.__age #类内部访问私有属性 外部不可访问
def doSomething(self, s): #公共成员函数
self.__doSomething(s) #类内部访问私有成员函数 外部不可访问
class AA(A):
#AA继承自A python如果是写后台程序 继承用的少 直接库中类的实例化多
#delphi-objpascal xcode-objc这种写客户端设计UI控件的
#要有很多编码在标准UI组件的继承类上或者通过接口定制
#90%的工作在这块不为过
#python少继承多直接实例化多
#(这是python程序容易读 除了强制排版外的另一个原因)
#原因很简单
#覆盖一个例如numpy的成员函数的难度要比改一个按钮的行为 难度大很多
#或者说几乎不可能 因为这些函数多c/c++写的 你的python方法慢10倍
#有些人好奇这个 确实以前没人搞明白 我把原因说清了 嘿嘿
#如果说继承的主要目的是为了覆盖父类的成员函数也不为过
#所以说python初学者从可视化编程开始不明智
#这个要涉及继承和接口 事件函数 回调 还无法集中主要矛盾和本质
def doSomething(self, s): #公共成员函数 覆盖父类A的同名公共成员函数
print '==='
print '==='
def doSomething(v):
def main():
a=A(111) #对象a对类A实例化
a.doSomething('222')
#调用对象的公共成员函数
print a.s1 #访问对象的公共属性
del a #授权垃圾回收销毁对象 python会自己处理必要时刻销毁(对象没引用了)
#但是你后面的代码已经不能访问对象a了 你如果不写 del a
#python会在程序执行完统一销毁
#java垃圾回收一样不是c++那种即时销毁 这个是android跑多了卡顿的重要原因之一
aa=AA(111) #对象aa对类AA实例化
aa.doSomething('222')
print doSomething(444) #函数调用函数 同时被调用函数有返回值
这写东西也行 如果只是这有内容 退化为命令行顺序执行
这个是过程式编程 上面class A那堆是面向对象编程
python和javascript是多范式语言 就是可以多种编程风格
java是更加彻底的面向对象编程 不是函数型 过程式 编程语言
所以最简单的python helloworld是 print "helloworld" java要写一堆东西
c++也是多范式语言 除了面向对象 也支持过程式 但它还一个有名的是范型式编程 很强大
python支持面向对象 过程式 命令式 函数型 等多种编程风格
初学者 用面向对象 过程式 命令式(这50行代码都涉及了)够用了 可满足全部工作需求
以后熟悉了可以试探少许函数式编程风格(优点:适合并发开发 找bug容易 程序可以热更新 代码短)
python写函数式程序相对有些丑陋 也比较繁琐(相对erlang这种彻底的函数型语言) 参考用
guido(python发明人)解释过python主要不是一种函数型编程语言
(需要穿墙 搞it要先会穿墙 不会或者懒不愿意学 建议改行
google英文技术资料的搜索/大数据引擎处理能力是百度的10倍+)
http://python-/2009/04/origins-of-pythons-functional-features.html
print '------------------------'
if __name__ == '__main__':
去掉全部注释的版本import sys
def __init__(self,age):
self.__age=age
def __del__(self):
print 'destroyed'
def __doSomething(self, s):
print self.__age
def doSomething(self, s):
self.__doSomething(s)
class AA(A):
def doSomething(self, s):
print '==='
print '==='
def doSomething(v):
def main():
a.doSomething('222')
print a.s1
aa=AA(111)
aa.doSomething('222')
print doSomething(444)
print '------------------------'
if __name__ == '__main__':
你可以自己搭建python环境 如果懒 把上面代码拷贝到这也行贴好代码 选python 然后选Run Code 再Submit 就OK了输出------------------------
这50行的程序多了类的构造器,析构,私有函数,垃圾回收,继承,覆盖 也解决了python的中文注释加上前面的 程序开始, 函数, 参数传递,类-对象-实例化-公共私有属性-成员函数(OO)完全可以用在生产环境了 你如果无法记住 建议改行干别的 因为程序模块50行左右最佳 可读性强 你记不住说明不适合编程未来程序到上万行也是这个基本结构 有人写python书前10章的一大坨甚至全本书本质和上面这段程序没区别 但是写少了 没钱拿 我如果是大学老师这么教一定会失业 很多人存在的意义就是为了把简单的事情搞复杂 混碗饭 可以理解 不过扯远了 其实c++ 也有简单教法。我们可爱的大java版本dosomething project在这 不是一坨是半坨 但也是50行 哈哈javascript呢?阐明javascript特有的原型继承各种关系的dosomething project是20多行 很多人也会写本书 NNN坨东西 最后你可能是被砸晕而不是更清楚 嘿嘿python语言很简单 短短几个小时长的几天就会了库很多 需要花时间适应 别的语言一样cocoa也很大当然也有万变不离其宗的dosomething project另外记住python是脚本里少见的强类型objective-c是编译语言里少见的弱类型不要以为所有的脚本都是弱类型 所有的编译语言都是强类型知呼上见过不少无法分清脚本/编译和强弱类型是两码事的人嘿嘿
同样有困惑。 好比小学生认字以后,只会简单的写看图说话。和阅读简单的故事。哪里知道有小说,传记,论文,游记,旅游指南,烹饪指南自然这些,段子,评书,剧本。等等。
这些都是语言可以创造的世界。 对于编程,它能创造怎样的东西?对我这样的小白无法知道。我想这是困惑的根源。
感觉不少人都说得有点远了.题主这个学习的困惑个人是很能理解的, 因为本人也试过这种莫名其妙的编程困境, 但个人却找不到瓶颈在哪, 把书看了一遍感觉自己基础可以了,但脱离书和例子后对着电脑又是一片空白.楼上好多人说的应该适用于有一定计算机基础的人, 而对刚入门1个月基本相当于0基础的人来说, 什么做项目、源码分析、看一遍文档直接开搞的人简直是NB到不行呀.所以说, 对题主现阶段最重要的还是基础. 这个阶段去看开源项目学习不是不可以(以前有个前辈从Mysql源码入门, 搞了半年成了大神), 但这种方式毕竟只适合少部分人, 大部分入门者应该是无法理解别人为何这样设计以及其中妙处.基础的话, 先把书上的知识吸收透彻, 边看书边写代码, 抄代码有没有用?有用! 抄完之后自己脱离源码按自己的思路默一遍或者直接在原来代码进行破坏性修改再还原. 这个阶段持续一个月, 你对自己的基础应该就没这么不自信了. 如果觉得自己看不下去书, 可以去尝试看视频学习, 视频教程会教你一些书本上可能不会提到的要点和许多非常实用的技巧,当然前提是你找的视频质量要好.接下来就是算法和数据结构, 编程思维. 这些是内功了, 要修炼很久的, 不是一本书就能教会的东西, 本人也不是什么大神, 就不搬门弄斧了. 知乎有很多相关的问题, 请参考诸如此类的问题.等感觉自己能写个小项目, 写程序已经不是什么大问题了. 恭喜你又有一道新的坎, 去看看github诸多大神的开源项目吧, 你会发现自己写的代码是多么的丑陋, 别人为何能这么优雅? duang,原来代码还能这样写?duang, 这个数据结构是什么我竟然看不懂? duang...反正是各种被碾压, 不多说, 用心去体会.
关键还是看完学完后要消化,编码时做到胸有成竹,理清思路!
跟着这个教程把练习和lab都弄懂, 还愁学不会python吗? 至于学会了之后可以干啥, 这跟学会了认字以后可以写啥是一样样的.
以下所说仅供参考题主看视频看书学习有一个月了,相信理论知识也掌握的七七八八了,不知道能理解多少?能全部理解当然最好,可是就算没有理解完全,没关系,程序这东西不是一看就能成为高手的。代码,关键字那些估计现在题主能看懂了,可是书中,网上看到的案例,那些代码,题主有想过别人为什么要这样写吗?我学习编程的时候,看书看案例,都不想看,一直半桶水,处于代码勉强能看懂,可是写不出来的状态,后面我终于下定决心一定要学好这个了,终于开始思考,为什么别人要这样实现这个功能,这样做的目的是什么?然后强行让自己摸清楚作者的思路,慢慢的,就把自己的编程思想培养起来了
你是用python来干工作还是用来实现书中的数据结构与算法?如果是想用来干工作做项目,建议到网上找个实际教程跟着做。假如你做web开发,不妨关注一下django和flask,图灵出版社最近出了一本flask web开发的书,里面有一个完整项目的例子,可以跟着做一遍。如果对python不熟,可以看廖雪峰的python教程还有python基础教程这本书。如果想用python来学习计算机的一些课程,推荐udacity的在线课程,老外的教学风格以及深度与实用性都很好,课程很多都是免费的,而且基于python。手机作答,就不贴说的一些资料链接了,可以从网上搜到。
居然想跨平台,先学怎么实现,枝节先可以放弃。
之所以你无从下手 我觉得你还没有明白或者适应计算机的规则,你可以先模仿, 注意
模仿并不等于copy
结果简单的习题做不出来====这一点说明题主的基础很弱。建议学习边写。而不是学完了再写。
写爬虫吧,练练手,用起来是最重要的
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 python爬虫入门教程 的文章

 

随机推荐