有人和我一样觉得 Python 入门容易,深入却很难?

2015-07-24 22:57:09 +08:00
 mianju

我先学的是C,后来学了点C++。最近学Python,看完简明Python,感觉很容易,可是看廖雪峰的教程,有些技巧性的东西就觉得不是很好理解。
比如

f1, f2, f3 = [(lambda i = i: i * i) for i in range(1, 4)]

可能是C语言的思维比较深入,对于Python的一些地方就容易转不过弯来。有没有大牛也是先学C然后学Python的?能分享点学习经验么> <感激不尽

13679 次点击
所在节点    Python
80 条回复
wizardoz
2015-07-25 10:11:52 +08:00
我也觉得Python想深入不简单。
Shazoo
2015-07-25 10:17:15 +08:00
python其实用C的方法写,也没什么。

如果要优雅,就得多看别人代码,记住各种tips。

就像当年的perl。一直用C风格写,后来看别人代码,就慢慢的可以写出新手眼中的天书了。
lancegin
2015-07-25 10:47:57 +08:00
看了你的描述,估计你是纠结于python的一些语法糖问题,这些语法糖会抽象多个操作,所以让你刚从c/c++这种注重细节的语言转过来的无法理解。这是许多脚本语言的特性,就是为了减少代码繁琐的操作会抽象出很多简洁的语法糖,正是因为这些语法糖,脚本语言的开发效率才会这么高。
mianju
2015-07-25 10:48:50 +08:00
@lancegin 是不是随着经常接触Python后会好点?
loading
2015-07-25 10:49:45 +08:00
你就是想写出这类看起来很牛逼的代码而已?

多模仿就好
lancegin
2015-07-25 10:58:40 +08:00
@mianju 是的,脚本语言不需要注意那么多细节,不需要太谨慎。
cc7756789
2015-07-25 11:35:55 +08:00
我第一门编程就是Python,刚开始可能会感到不适应,多接触就习惯了。你可能还没有离开C/C++ 的思维。你可以拆分理解,a1, a2, a3 = [ ... ] 一看就是把右边的结果赋给左边的3个变量。所以只要分析列表生成式中语句生成什么结果就明白了。
[ x for x in range(1,4)] 也就是生成列表 [1, 2, 3],
cc7756789
2015-07-25 11:38:11 +08:00
lambda x: x*x 是个匿名函数,这种其实接触多了不难理解,这些东西都是Python的特性,而特性这种东西熟悉它只需要时间罢了。
tushiner
2015-07-25 12:06:55 +08:00
哪门语言不一样,有些所谓入门简单的语言不就是因为语法糖多、库多、框架多么,说白了还是跟“深入”没关系。
sangmingming
2015-07-25 12:08:00 +08:00
跟楼主同感,相比于其他语言,python为了更优雅,更多的语法糖。
happlex
2015-07-25 12:45:14 +08:00
理解不了很正常,函数式的写法一方面非常不同于以往接触的过程式语言,另一方面本来就和人的直觉相悖。如果之前接触的不是 C,而是 LISP,Javascript 这样的语言,类似的写法就是家常便饭了。
另外,学习一门语言最重要的不是语法,这门语言体现核心思想。语法千变万化,核心思想都是一样的。你掌握了这种思想,也就一通百通了。这就是为什么有经验的程序员刚接触一门新的语言就能马上上手的缘故。
所以楼主实际上欠缺的是一种思维,这方面可以看看斯坦福大学的一门公开课「编程范式」。
http://v.163.com/special/opencourse/paradigms.html
也建议楼主多接触一些其他的语言,Python 包罗万象是它的优点。但它也不如 C语言,LISP 那样纯粹,没有把某一个特性发挥到极致。
不要畏惧,学习任何东西都不是一蹴而就的,最重要的还是坚持。
最后祝您身体健康,再见。
tracyone
2015-07-25 12:49:23 +08:00
编程语言只是工具.............看你实现什么
zog
2015-07-25 12:59:58 +08:00
你需要做实际的项目和练习。看书和碎片化代码片段,不管用。
tini28
2015-07-25 13:17:45 +08:00
别钻牛角尖
felixzhu
2015-07-25 14:55:10 +08:00
感觉你理解错了什么叫做深入。。

因为这都是入门的东西啊。。
SoloCompany
2015-07-25 14:59:11 +08:00
1. python 的 lambda 语法比较累赘且奇葩(见仁见智)
2. 允许命名空间内同名变量存在而不管阅读者的混淆这才是真正的奇葩

机器可以很容易的识别不等于人可以很容易的识别,语言设计者允许这样的存在我无从评价,但至少从规范上就要禁止把代码真写成这样
wuyu1998
2015-07-25 15:03:19 +08:00
你用c的思维模式(or 编程模型),去写pythan程序,当然会有这样的问题。
建议读《learning python》,学习python的思维模式。
unity0703
2015-07-25 15:08:02 +08:00
学点lisp就好理解了,推荐《计算机程序的构造和解释》,能让你功力大增
neutrino
2015-07-25 15:14:08 +08:00
python入门也不容易,和vim差不多了。。
mianju
2015-07-25 16:08:05 +08:00
@unity0703 You are bad bad= =我还是安心先啃玩CSAPP再说

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX