Python 和 Fortran 的主要区别在于它们为不同的编程语言。Python 是面向对象的高级编程语言,具有易于学习、使用和理解的简单语法。Fortran是一种面向过程的编程语言,主要用于数值计算和科学计算,它的语法较复杂,比较难上手。另外,Python 的可移植性较高,而Fortran 只能在一些特定的平台上运行。
从辩证的角度考虑没有哪个编程语言是最好的,适合自己的才是最好的,无论一个编程语言有多少优势。
相信不同的程序员会有不同的答案。常用的编程语言有C++、 C、Java、C#、Python等等。每种编程语言都自身的优点,但也是或多或少的存在这一些缺陷。所以对于程序员来说那编程语言适合项目的开发并且使用顺手那么那种语言就是最好的语言。比如说几乎不会有程序员去拿PHP、C#、Python来做嵌入式的开发。所以要选择是使用哪种语言就要看所要使用的平台环境。下面就来大概说说不同语言的特点吧。
C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言。
简洁紧凑、灵活方便;运算符丰富;数据类型丰富;表达方式灵活实用;允许直接访问物理地址,对硬件进行操作;生成目标代码质量高,程序执行效率高;可移植性好;
C++是面向对象的C语言,由于偏底层,所以性能非常高,仅次于C语言,主要用在一个要求高性能的领域。。。这个不好说,因为实际需求上,用处挺杂的,而且也确实不太好学。
PHP是一种通用开源脚本语言。语法吸收了C语言、Perl以及java的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。
Java具有卓越的通用性、高效性、安全性,广泛应用于个人PC、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
python语言,是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,能用其他语言制作的各种模块轻松地联结在一起。
C#和Java极其相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi,与COM是直接集成的,而且它是微软公司 .NET windows网络框架的主角。
总结起来:
PHP:没有什么突出的优点
C 底层操作、性能优化
Java、C# 库多通用型强。
Python 语言清晰明白
C++ 什么都能干全能
需要强调的一点是, 语言只是工具, 在特定应用场景下满足特定需要的工具,
脱离应用场景来谈不但没有意义而且还会扣友善度。以下经验(吐槽)都是针对大规模科学计算的, 个人电脑写一个下午的代码,然后跑十分钟的代码趁早去用 。
Python/R/Matlab/Ruby, 上手容易, 功能强大, 网上资源丰富, 绝对是您无悔的选择。
大家的难用都是从
fortran77那里感受来的,看过80年代的Fortran77代码,混乱程度简直爆表。再看2000年左右的Fortran95代码,马马虎虎,
算是中规中矩的结构化语言。最近看过2010年左右的Fortran2003 code(Fortran的lua接口)
。抽象类,构造函数满天飞,我擦好多feature都不知道。
所以你们批判的不是Fortran, 而是任性的,非结构化的coding。
style。这不过恰巧搞科学的这票人都不太鸟coding standard和coding style,
所以Fortran写出来的代码大都比较乱, 这是使用者自身需要学习一个, 跟语言本身关系不大吧。见过师弟师妹们写的C代码,
比Fortran版本的还魔幻。
而C和C++里面也有goto, 也有extern可以不做函数参数参数检查,倒是没见你们怎么喷。Fortran里面也有interface来声明函数原型, 倒也没见你们怎么用。
比
如elemental, pure, 函数重载, forall, where,
Fortran95新加的功能一大部分是为并行度设计的,其语法也非常偏向高维的大数组操作, 自动并行化(openmp 。
workshare)用起来简直比C++爽不知道多少倍。在OpenMP+MPI的场合加上千核量级的并行度,还是有优势的。还有一种东西叫CAF,
CoArray Fortran, 专门针对大并行度的超级计算机添加了很多新语法,估计知道的人不多。
更不要说Fortran2003/2008支持面向对象。当然在虚函数方面好像比C++缺了一个功能, 其他都是完整复刻的。
所
以真要批判, 请先看看Fortran95/2003/2008在来批判, 哪怕只看目录或者Feature 。
List也好。真正值得喷的是Fortran95里面的module的mod file的依赖问题, 写Makefile很麻烦,
还有就是输入输出功能太弱, 必须要靠lua,hdf5,netcdf, json这些第三方工具来支撑。
至少说,只要不用implicit,Fortran编译的时候可以精确地告诉你哪一行有问题。(对,我就是说给C++党的, 最近做习题被虐的不要不要的)
如
果要用心做好一个代码, 并行度在几千CPU核心的量级上, 有核心维护团队, 用户在百人千人量级上的话,正确的姿势是,
Fortran负责运算密集部分, C++/C负责常用逻辑和接口,
python/ruby/lua负责做胶水,负责暴露给不太关心细节的终端用户。这套东西199几年就有人在做,
结果到现在大家还在吵哪一个更好的问题。
-----2016-02-07 补充-------。
获悉Fortran2008里面终。
于对变量声明坑进行了修补, 在2008之前的版本中, 变量只能在函数的开始部分声明, 实际的声明语句可能距离使用语句较远,
同时可能引发临时变量误修改的情况, Fortran2008内加入了BLOCK结构, 可以当地生成临时变量,
并显式指明生存期,即使在BLOCK内部使用goto强行跳出, 编译器也会释放临时变量,即。
module m
implicit none
contains
subroutine test1(a, b)。
integer,intent(in) :: a。
integer, intent(out) :: b。
....(执行语句)
TMP1 : BLOCK
integer :: temp_var。
temp_var = a*b
a = temp_var
END BLOCK TMP1
....(执行语句)
end subroutine test1。
end module m
python做科学计算的特点:
1. 科学库很全。
科学库:numpy,scipy。作图:matplotlib。并行:mpi4py。调试:pdb。
2. 效率高。
如果你能学好numpy(array特性,f2py),那么你代码执行效率不会比fortran,C差太多。但如果你用不好array,那样写出来的程序效率就只能呵呵了。所以入门后,请一定花足够多的时间去了解numpy的array类。
3. 易于调试。
pdb是我见过最好的调试工具,没有之一。直接在程序断点处给你一个截面,这只有文本解释语言才能办到。毫不夸张的说,你用python开发程序只要fortran的1/10时间。
4. 其他。
它丰富而且统一,不像C++的库那么杂(好比linux的各种发行版),python学好numpy就可以做科学计算了。python的第三方库很全,但是不杂。python基于类的语言特性让它比起fortran等更加容易规模化开发。
python和老牌科学计算语言fortran相比,有着众多的优势,如果能用f2py接合两者,那是极好的。
精度没什么好比的,它和数据类型有关,同样的数据类型,精度之差可以忽略。
python其实是基于c的,是c的运行库、c的程序在解释执行。
python的特长应该在数据挖掘,可不要和fortran去比科学计算。
原文地址:http://www.qianchusai.com/fortran%E5%92%8Cpython%E5%93%AA%E4%B8%AA%E5%A5%BD%E5%AD%A6.html