编写一个python程序来计算字符串中的字符_Python基础试题

一、语言特性谈谈对 Python 和其他语言的区别

Python是面向对象的、解释型、高级编程语言。由Guido van Rossum在1991年创建。Python的设计理念就是强调代码的可读性。Python2.0在2000年发布,Python3.0在2008年发布。在Python中使用import this可以查看Python之禅。随着数据科学、人工智能、机器学习等学科的发展,Python无疑成了当下最热门的编程语言,没有之一。各种编程语言的对比是编程界经久不衰的话题,Python常常用来和R语言做对比,尤其是在数据科学领域。这儿就结合本人使用的亲身体验来比较一下Python和R。

首先作为科研人员和数据工作者,R语言是使用情况上来说,要比Python更加广泛。周围大大多数人也通常使用R,而不是Python。本人虽然平时也尝试写一些Python代码,但是主流的工作语言还是R。可以说“Python是爱好,R是工作”。当然,各个领域的使用情况可能不同。在科研领域,面对的主要对象是数据,包括对数据的整理和清洗,数据的分析等,而R语言自出生就流淌着统计的血液,在统计分析上具有先天优势。另外,广大科研人员并不关注语言是不是面对对象,他们反而觉得面向过程更简单一些。而且数据分析通常不会涉及太多代码的重用性,也不会太关注代码的效率(除非是写工具用)。

R语言在处理数据框(表)类型的东西上,更具优势。尤其是很多R包,比如data.table,tidyr,dplyr等等,还有%>%管道符号,在处理数据表上简直就是神器。虽然Python也有pandas等之类的模块,但是使用起来显然不如R语言灵活好用。另外,R语言在画图上也有很大优势,很灵活,尤其是ggplot2包,以及搭配各种配色,作出的图可以直接放在论文中的。

所以,可以看到R语言在数据清理筛选 -> 统计分析 -> 结果作图上都比Python具有优势,对于普通的科研人员来说,这些就够了,所以在这个意义上R语言要比Python好用很多。

当然,Python在处理非数据框(表)类型的数据时,比R语言更方便。尤其是处理字符串,Python特别好用,R相比就显得笨拙一些。此外,Python中的生成式也非常灵活方便。

另外,在面向对象而言,R语言也加入了一些S3,S4等类型,但是,就本人而言,R的S3和S4显得晦涩,很难以让人理解。Python中的类就显得很简洁了。简述解释型和编译型编程语言

我们通常用的计算机变成语言都是高级语言,高级语言有助于人类对语言的理解,很多单词数字等等,都是人类可以直接读懂的。但是,高级语言对计算机来说却是天书,计算机能够读懂的只有1和0,也就是我们常说的机器语言。为了让计算机能够读懂人类的高级编程语言,就需要一个转化,或者叫做翻译,将高级语言翻译机器语言【除非有大神可以直接用0和1来编写程序?】。这个翻译过程就是编译器或者解释器。那么编译器和解释器有什么区别?

1)解释器:每次翻译一个语句;分析高级语言源代码较快,但是执行代码较慢;通常没有中间对象产生,不占用额外的内存;逐行翻译,直到遇到错误,终止执行,所以比较容易定位错误,方便识别改进bug; 每次运行都依赖于源代码

2)编译器:在运行程序时,会将整个源代码读入,并全部一次性翻译成机器语言;需要很长时间去分析源代码,但是一旦翻译完成,执行会很快;在编译过程中通常会产生中间文件,需要占用其他内存空间;定位识别错误相对较难;编译完成之后,不必再依赖于源代码;典型的编译型语言有C/C++.

举一个简单的例子:你要学做一样菜,如果你是按照解释器去做,那么你会:看一眼菜谱,操作一步,然后在看一眼菜谱,再做下一步,以此类推,直到看完全部菜谱,然后完成做菜。而如果按照编译型语言去做,你会:首先花大量时间研究菜谱,弄清了做菜的每一步,烂熟于胸,然后开始做菜,这时就可以把菜谱扔到一边了,完全按照自己记忆中的步骤来做。所以,按照编译型语言的形式去做菜,一旦学会就会很看,不用每次都看菜谱,也可以避免“欲练此功,必先自宫,如不自宫,也可成功”的情况发生。

但是,说到具体的语言,必须要先强调一下,编译型还是解释型并不是一个语言本省的属性,它只是语言执行的一种属性而已。只不过,很多时候我们用的语言只是通过其中的一种方式执行,我们习惯于称之为该语言为解释型语言或者编译型语言。比如C语言,我们通常是通过C编译器来编译执行的,但是实际上C语言也可以解释执行。其次,编译并不意味着直接编译成机器语言,广义的来讲,编译是把一种语言翻译成另一种语言。比如Java编译器,并不是直接将源代码直接翻译成二进制的机器语言,而仅仅是使用javac编译器将源代码编译成了Java字节码,然后将该字节码放入到Java虚拟机JVM中等待执行。在执行的时候,由JIT编译器将字节码解释成机器语言。

扩展一下,关于安卓软件的执行方式是一个很有意思的问题,很好的展示了理解编译执行和解释执行。在安卓5.0之前,安卓软件的执行是彻底的解释型执行,边解释边运行,所以,解释型语言的弱点就凸显出来了,慢!和IOS的软件比起来,差距太大了。其后,安卓开始放弃使用边解释边执行的方式,在安装软件的时候将源代码全部一股脑的编译成字节码,这样这执行的时候,速度就快了很多。但是问题是,软件安装需要进行对全部代码进行编译,非常费时,安装一个安卓软件要花好多时间,而且相对于源代码,字节码文件要大很多,占用大量空间。在安卓7.0之后,安卓采用了一个折中的策略,并不对软件所有部分进行编译,而仅仅是对常用部分进行编译,提升了运行效率,同时也节省了一定的存储空间。但是相比于IOS的软件,安卓软件仍然显得慢一些。IOS直接把源代码编译成了机器码(这也是为什么IOS的软件通常比对应的安卓软肩大一些),相当于编译了一次,而安卓软件则要编译两次。现在火热的华为方舟编译器,似乎想按照IOS的方式,将安卓软件在用户下载安装之前直接编译成机器码,这肯定对提升安卓软件的运行速度有大大提升。通过安卓软件的发展史,可以很清楚看到编译型执行和解释型执行的优缺点。

具体到Python语言,虽然我们称之为解释型语言,但它也编译的过程。和Java类似,Python也会将源代码首先编译成Python字节码。只不过我们平时使用Python的时候很少注意到编译过程。即便是在交互环境性运行Python语句,也是要先编译成字节码,只不过这些字节码仅存在于内存中,执行结束变释放掉。但当我们导入(执行)一个Python文件时,你会在对应的文件夹下面发现一些.pyc的文件生成,这个就是Python编译的字节码文件。

参考:https://www.programiz.com/article/difference-compiler-interpr

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值