首先我们来看几乎所有python教程都会说的话:“python是一门面向对象,解释型,强类型计算机程序脚本语言,他具有简洁性,易读性”。
这句话其中包含很多猫腻,比如“面向对象”,说明他有一些对象编程都有的东西,比如继承,接口,类的转义。但又是一门“脚本语言”,脚本语言的代表linux是shell,典型特点就是可以使用过程化编程。“解释型”表示他的执行速度,呵呵。相对应的事“编译型”语言,编译型语言在执行前都需要将人编写的代码转换为计算机能理解的代码(机器码),而解释型就是说我执行前不需要编译,我边执行边进行代码“翻译”,所以,第一句话表示:python是一门既可以用过程化编程写脚本,又可以用对象型编程写大型应用的比较慢的语言。总得来说,就是“你学了python什么都可以干,但执行速度上来说,慢”。
还有,"强类型语言"。强类型语言的杰出代表java,不仅变量的声明,使用都需要标记我是什么类型,类型间的转换都会有特定的操作进行转换。也就是说python也需要这些操作。但是,python又干了一件事,使用对象时不用在变量前标记是什么类型的变量.不懂什么意思?别急。
java的示例:
People a = new People()
String b = “张三”
a.setName(b)
python的示例:
a = People()
b="张三"
a.setName(b)
是不是在看起来python和java差不多,但是,在大型系统上,python和"简洁性","易读性"完全不挂钩。因为,如果b="张三"这个参数是经过多次变化,多个文件间传递生成的这么一个字符串,源码读者如何判断setName的输入参数要是一个字符串。java就很简单的在setName的定义的形式参数上就必须有类型。
java:
setName(String name)
python:
setName(name)
作为一名程序员。我们都需要阅读源码,不管你是阅读开源社区的代码,还是接手公司别的项目,你都需要阅读源码。而python的这种设计,"简洁性","易读性"只是针对一个小脚本,如果是一个大项目,相信我,你会恨python.python最大的现在的代码是openstack的代码,曾经我看了想哭,只"看",是看不懂的,还最好单步跟进。
提一个别人的解决方案,在定义变量时,必须在变量后加上类型
比如:
aStr="张三"
bInt=5
setName(nameStr)
是不是清晰很多,但是,这是在实际开发中弱性规定,除非你对该项目有完全控制权,使用代码规则检验,检查手段来保证。但这增加了多少非业务工作量。你作为写代码的"前人",真的会那么在乎两年后接手这套代码"后人"的源码阅读障碍吗?你我都不care的!
所以,从语言级别来讲,python在大型应用中,代码并不容易读懂。
在来说说关于python,怎么叫入门?什么时候可以说""我会python"
所有语言都有自己的语法,语法会了不叫会了。因为语法是最简单最基本的条件。
python语法更简单,对于英语国家来说,python语法简直就是英文
if a == b:
print "hello world"
而c++还要说
if(a == b )
{
std::cout << "hello world" << std::endl;
return 0;
}
对于c++来说这是这一段最简单的代码,但是,等等,这里这个std::cout是个什么鬼,<< 又是什么鬼,endl,分号还必须有,还要一个return 0;
python就是这样"简单",简单的语法。但是,2个小时看完python,数据结构,map这些就会python了吗?
python通常介绍里还有一段话,python拥有丰富的类库(内裤),哈哈,这个输入法。
我给出的什么时候叫会python了:核心类库,通用类库有基本使用能力了,有一些未知新类库的源码阅读能力了才叫“会”python了。
所以python的入门曲线是一进来刚学觉得很简单啊,但往后,就不知道怎么提升python能力了。更进阶的能力比如研究python的内存模型,编写python的c库,研究python这门语言的本身代码(c编写的)。我也只尝试过看看python的本身c代码。有本陈儒写的<python源码剖析>,不过,人生苦短,且行且研究。
python2还是python3?
python官方当然推荐你用python3,python一定也要用到2.7以下的很多库已经不支持了。我这里给的建议是python2.7为什么?
因为linux本身还是用的python27啊,linux很多工具比如yum都有用到python,linux才是换不换python高版本的标杆。
我是Django这个框架的黑粉。很多新手同学学python就是为了写一个web管理界面,不管什么原因,让一个新手,用django就是在给自己挖坟。django里面的表单渲染。模板,model到sql的转义,路由,都不是一个新手pythoner能理解的。也许有人会说,按照文档做就行了。如果你对你们项目的风险,bug,要求很低,我真不能在反对了。
写小的web管理系统你可以用php啊!