原文见于Python vs. PHP
Python与PHP的共同之处:
1. 都是解释型的,它们都是有动态类型的高级语言(动态语言)。
2. 都是开源的,(当然,要除掉Zend的几个产品)。
3. 都有大量开发者社区来支持。
4. 都易学,比Java容易学,甚至比Perl都容易学。
5. 都易扩展,用C,C++,Java都可以对它们扩展
6. 都有很好的兼容性,它们不用重新编译,就可以运行在目前几乎所有的平台上。
7. 它们的函数都支持可变参数个数
8. 都能将活动对象冻结成字符串(译者注:也就是序列化功能)(这样就可以实现外排序以及将对象通过网络迁移等功能),然后,这些对象又能完整无缺的被转换成一模一样的对象。PHP的serialize函数,Python的pickle、marshal模块就是用来实现这个特性的。请注意,由于PHP缺少模块,它处理对象和类的序列化能力要比Python弱很多。在PHP中,当一个对象被序列化时,只有它的属性被序列化了,而function没有被序列化,因此,在反序列化的时候,对象的类要和原来脚本中的类一样(名字要一样)。而在Python中,这个问题通过module/import框架自动解决了。(this COULD be handled with PHP 5's autoload(), but is not done automatically)

PHP有的,而Python没有的有哪些呢?
1. 来自C和Perl的语法,大括号$符号
2. “switch”语句和‘do … while’结构
3. 递增递减操作符
4. 三元操作 (istrue ? a : b),我的文章《Python三目运算,and or陷阱》里讲了在Python中如何模拟实现
5. 让人精神分裂的戏剧化的函数名。内嵌库的命名方式多种多样。没有“命名空间”,所以函数名常常需要有个前缀来说明它的所属(但是事实上,常常没有前缀)。函数常常放到类里以模拟“命名空间”。PHP5.3中会加入“名字空间”,不过可惜PHP5.3还未出世。
6. 它是一个很随意的语言,所有的变量都没“set”为NULL,而且有点“弱类型”系统的样子(不要和“动态类型”混淆了)
7. 有个很有利的环境(因为通常境况下它都已经安装好了)。
8. 引用(‘$a = & $b’代表当$b改变的时候,$a也变了)。
9. 一个数组类型既可以同时作为list和dictionary。Dictionary的键值的按照原始顺序迭代。
10. 函数和属性的 private、protected、public。
11. 类和方法的abstract and final修饰
12. 接口

哪些又是Python中有,而PHP中没有的呢
1. Python是通用编程语言(而不是只为Web开发设计)
2. 用缩进来标识程序块,而不是用大括号({})
3. 支持命名空间和模块
4. 小内核
5. 非常清晰、简明、直接的语法
6. 用docstrings和pydoc可以自己生成文档(PHP 5 有反射和doc strings)
7. 方法和函数的参数可以键值标识(f = open(filename='/abc.txt')),容易支持缺省参数
8. 真正的面向对象,一流的类和函数
反驳:面向对象在PHP5中已经完全修补好了
反反驳:但是仍然很痛苦,明显是乱搞
反驳:PHP 5 支持真正的PPP(private, public, protected),而Python不支持。在PHP中,开发者不需要将类方法的第一个参数设为self,因为可以显示的使用$this
9. 在标准库中广泛使用了类
反驳:PHP 5 有SPL,它是完全基于类的
10. 有明确的私有属性表示方法
反驳:PHP 5对方法和属性都支持PPP(private, public, protected)
11. 多重继承
反驳:PHP 5支持Trail,它更灵活,而却没有多重继承那么痛苦。我不认为多重继承是个好东西,Java也避免了这个特性
12. 面向对象的文件处理
13. 方法链
反驳:PHP5中,方法链在对象实例化时生成。它被称为fluent interface 
14. 极好的自省支持
反驳:PHP 5 有反射
反反驳:我们说的是极好的自省
15. 所有的东西都是引用(PHP中引用是很痛苦的)
16. ‘del’语句对所有的东西通用,PHP中变量用‘unset’,数组成员用其他的
反驳:数组成员可以被 ‘unset()’
17. 大小写敏感(PHP的函数是不区分大小写的,但是变量却是区分大小写的)
18. 数组分割的语法很简答 (‘abc’[1:2] == 'b')
反驳:PHP的array_slice()方法还不够简单么?
19. lambda表达式
20. 迭代器(PHP 5中支持)
21. 结构化异常处理
反驳:在PHP5中有
反反驳:PHP中没有等价与else和finally的东西
22. 操作符重载
反驳:操作符重载是有害的,是语言不好的设计,在PHP中,可以使用runkit扩展来模拟这个特性
23. 集成SWIG
24. 多线程
25. 有非常好的profiler(用于跟踪代码的执行性能)
反驳:XDebug是个个调试和profiling扩展,支持PHP4和PHP5,它非常流行
26. 很多调试器和IDE
反驳:PHP有很早就有商业化的工具,Eclipse PDT是开源的 Netbeans PHP也是开源的
27. 多种高级数据类型(lists、tuples、dicts、mx.DateTimes, NumPy arrays, etc.)
28. 数组(lists)和相链数组associative arrays(Dictionary)区别对待
29. 编译的字节码被缓存
反驳:花$980就能从zend买到。XCache和EAccelarator都是开源的
30. 有标准的数据库API函数库
反驳:pecl.php.net/PDO -- PHP 5.1
31. 支持所有主流的GUI框架
反驳:PHP支持GTK和QT
32. 很强的全球化支持和Unicode支持
反驳:PHP6将包含对Unicode的支持。这个特性在PHP5.2和PHP5.3中通过intl扩展实现,在pecl.php.net中能找到这个模块
33. 成熟、稳定、向上兼容
反驳:PHP是稳定、成熟、向前向后兼容的
反反驳:。。。

作为网页开发框架的比较
PHP内核语言中直接内建有WEB开发的特性,不像PHP,Python的WEB开发能力是由扩展模块实现的。基本的CGI是通过Python的标准库里的‘cig’模块提供的。还有很多第三方模块,有些是对这个模块补充,其他的都是这个模块的竞争者。因此,Python提供了更灵活的WEB开发基础。

。。。to be continued。

Python vs. PHP相关推荐

  1. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  2. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

  3. 【Kaggle Learn】Python 5-8

    五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...

  4. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  5. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  6. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

  7. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  10. Python gRPC 安装

    1. 安装依赖库 sudo pip3 install grpcio sudo pip3 install protobuf sudo pip3 install grpcio_tools 2. 生成对应文 ...

最新文章

  1. 安装php ssh2扩展
  2. 规模 300+ 的研发团队,怎样保持工程高质高效?
  3. Spring @CrossOrigin 通配符 解决跨域问题
  4. Go中的Socket编程
  5. W32.Downedup.B顽固病毒——查杀记
  6. 关于控制台程序的一些想法
  7. 使用log4net记录日志到MySQL中 (转)
  8. java用do while语句逆序输出_跟我学java编程—深入理解do-while循环语句的用法
  9. java排列组合二维数组_JavaScript 二维数组排列组合2
  10. 阶段3 1.Mybatis_12.Mybatis注解开发_5 mybatis注解建立实体类属性和数据库表中列的对应关系...
  11. 《信号与系统》(吴京)部分课后习题答案与解析——第四章(PART5)(系统分析、传输与滤波)
  12. 物联网周刊(第 5 期):智能家居入口之争
  13. PCA降维-原理(一)
  14. “女主播翻车”骂声不断,店湾妹感慨:主播界怎么了?三观已毁!
  15. moment的常见用法总结
  16. 通过单击按钮实现全屏、退出全屏
  17. 青蛙跳台阶变态青蛙跳台阶
  18. 局域网socket传输视频流
  19. 负记账与剩余项目清账虚增借贷的问题
  20. 解决了联想i908手机SIM卡注册失败、受限服务的BUG

热门文章

  1. 高效精力-R90睡眠法
  2. CSS:文字下波浪线动画效果
  3. C# 调用WinRar执行rar、zip压缩的代码
  4. 身份证输入框测试点分析
  5. 【C语言】链表中倒数第k个结点【牛客】
  6. 常用汇编指令对标志位的影响
  7. 关于EasyExcel的invoke方法读取多少列
  8. Word|表格竖排居中
  9. 基于ARM架构Cortex-A7 IMX6ULL 核心板设计核酸自动提取仪显控解决方案
  10. 零基础——java学习路线(下)