浅谈我眼中的python
吴凡
摘要:
作为一门非常有潜力的高级语言,python正在编程上发挥着越来越大的作用。这学期,通过对python基础知识的学习,对python有了一定的认识.同时和已经学习的高级语言C和C++有了一定的对比,以及笔者对未来python的学习方向。本文仅仅是个人的观点和看法,笔者水平有限,如有出错之处,敬请谅解。
正文:
一、关于python编程的特点以及编程过程中的心得
python给我最初的印象便是简洁.所有的变量都不需要定义,想用就用,这给了编程者很大的自由空间。如a=3,即可同时完成变量的定义和赋值。对于简化程序的代码,起到了很大的作用!
库很多,博大精深.这样形容python最恰当不过了。正因为其强大的库,让编程不再艰难。我们只需要调用库中的函数,而对于函数的具体实现,没有特殊需求,我们无需探究。这无疑是编码者的福音。
在字符串的处理上,我们在python中感受到了简单快捷的魅力.可以轻松分割任意一段字符串,如使用string[0:3],就可以轻松地分割出string字符串中的三个字符。因为分割区间的任意性,字符串处理起来也就得心应手了。再如,对于两端字符串的叠加,可以轻松使用S1+S2来实现.在字符串的替换,迭代,以及大小写的转换上,都有相应的库函数用来方便地实现。
由于python输出机制自带换行机制,因此如不需要换行,要在语句的后面加上逗号,刚刚编程时,有时会遇到问题。
列表的使用方便了数据的批量处理.印象最深刻的就是list。reverse(),直接就可以将列表的数据逆置。字典,能够很好的处理任意长度、混合类型键值对的能力。在统计一段文章中的词频,和某段话中字母的频率时,很方便.配合相关的文件操作,可以对文本文件进行数据的统计。
在函数的使用上,由于python简化了使用方法。在函数的定义上,不需要给出相应的数据类型,形参表很简明.在返回值的时候,也更加的灵活,具有很强的操作性.其它基本的使用方法与其它语言类似,这给编码者最快的速度适应这门语言。
图形编程也是python的一大亮点。通过graphical库的使用,可以很方便的实现图形界面的编程。最让我印象深刻的是在控制窗口的颜函数setBackground(color)中,可以使用已有的颜作为参数。也可以通过改变rgb(,,,)的参数进而实现各种新颜的体现。写完这段程序,运行时,我很是激动。虽然技术含量并不是很高,但由于以前的编程完成后都是黑框框,这次可以得到炫彩的颜也是非常高兴的。
此外,在类的实现中。在定义构造函数的时候,两边的下划线是由两个组成,在编程时极易发生错误,从而造成程序报错,还很难发现.
在定义各类函数的时候,程序的主要执行函数,如main(),要在程序末尾添加main(),否则程序无法运行.而且由于python简化了分号以及各类括号的使用,所以必须遵循严格的格式对齐。格式的错乱会造成程序的严重问题,这就要求编码者能拥有好的习惯。而且,格式的对齐有利于增强程序的美观性,也便于自己和他人进行阅读。在各种包含类语句后,如for 语句,if语句,由于取消了大括号的存在,需要加上分号,否则程序出错.由于之前C编程的习惯,总是忘记加上分号和在语句的末尾不自觉的加上分号。但随着编程题目的增多,这一问题得到了显著的改善。
二、python和其它高级语言(C、C++)的一些区别
(1)关于变量。
在C、C++中,变量的使用需要提前定义。尤其在C语言中,变量必须集中在前面定义,这给编程带来了诸多的不便。虽然在C++中,变量可以随用随定义,但终究是程序员必做的一件事,当变量的使用数量达到一定的量的时候,会造成某些程度上的不方便。Python让我们眼前一亮,想用就用,随心所欲,有了一种自由的感觉。此外,在变量的内存理解上,python,也有不同之处。在C中,变量在定义后,由系统分配相应大小的内存,从而进行变量的相关操作。
而在后者,则有指针的味道,有指向值的感觉.在内存机制上,python语言与其它语言有着巨大的差别。
(2)关于循环的使用。
在C/C++中,for循环拥有强大的功能,可以实现各类循环,几乎能满足所有程序的需求。但python在for循环上,却略显逊,其功能不再那么强大。Python的for循环主要依靠关键词in来实现的。也正是因为这样,其具有特性。此时for循环可以有两种不同的实现方式.第一种便是单纯控制循环次数。比如 for i in range(10),此处控制循环进行10次,i仅仅起到控制次数的作用,这一作用与前者语言极为相似。第二中钟,也正是python所具有的特.在类似于字符串的处理上,有for i in sting,此时的i具有遍历字符串的功能,对于底下循环语句的实现,有极大的方便。在其它的循环上,如while条件循环,等等,其用法笔者认为并没有太大的区别。
(3)关于字符串的处理.
Python对于字符串的处理给程序员带来了极大的便利.在之前的C系列编程中,只能用字符
类数组对字符串进行相应的操作,步骤相对比较繁琐,而且在编程的过程中极其容易出错。类似于char a[]的样式,在python中不复存在。在创建一个字符串的时候,用s='’,即可完成一个空字符串的创建。接着将相应的内容进行添加的时候,直接用s=s+’string’python获取数组长度,即可。在编写一个字符串逆序的函数的时候,我深有体会。受之前C语言的影响,笔者想用类似于指针的方式进行元素的交换。后来突然明白,直接新建立一个空字符串,在将原字符串从后面依次加入到新的空字符串中即可.简单的思维,简单的代码,就轻松的实现了同样的功能.笔者深深被python所打动。当然,如果使用字符串中的步进,将步进设置为-1,则可以更为轻松的实现字符串的逆序输出。在字符串内元素的提取上,python同样出。它提供两种下标的方法,一种是从开始到后面,依次为0,1,2。。。这与C/C++的数组是很相似的。还有就是,从最后往前,依次为—1,—2,—3。。..进行操作。其实单纯看这两种方式,你可能觉得这没什么意思。有意思的是这两种方法可以同时使用,同时出现.从前往后,从后往前,极其方便的对字符串甚至数组进行相关的操作。当然,字符串相应的一些库函数,其功能也是非常强大的,笔者在这里就不一一阐述了,书上的函数表清晰地展现了库函数的魅力.
(4)关于批量数据的处理.
众所周知,在C\C++中,对批量数据的处理,主要依靠的是相应的数组.比如定义int a[5],char a[5],double a[5],等等,可以看到,在数组的定义时,需要加上相应的数据类型,以及定义数组的长度.也正是由于这样,数组却显得有些死板,不够灵活。这是因为系统需要分配相应的空间给已经定义的数组,这是由其内存机制所决定的。因此,独特的内存机制造就了python强大的灵活性.之前的这些数组中只能存放单一数据类型,并且一般其长度是有限的。虽然动态数组可以解决这一问题,但使用起来不方便使得许多人望而却步,往往不能很好的使用动态数组进行操作.而对于链表的使用,笔者认为也不是很方便,至少我用起来感觉很是麻烦.宁愿使用大一点的数组进行数据的存放,浪费一点内存空间,我都不愿意使用动态数组或者是链表进行相应的操作。而在python的学习中,我看到了曙光。列表,一个崭新的名词出现在我的眼前。直接使用,无需定义大小等等。
笔者很是享受这样的过程,首先定义一个空的列表,接着利用其中的库函数append(),将数据进行末尾添加,从而实现一个数组的产生。当然,在这里说的数据已经不单单是一种类型的数据了,int,double,char,等等,都可以混杂在同一个列表中,此时的列表不再单一,而是一个各种数据都有的一个集合体。正是混杂,带来了灵活.在一些信息管理系统的编写上,这样的列表给程序员带来了福音!使用二维列表,每个成员对应一个列表,将其所有的信息进行
相应的压缩,在调用的时候就显得很简单了。再加上下标可以灵活的使用,我们的管理系统就可以方便快捷的实现了!
此外,在类型之间的转换上,笔者也深有印象。你如一段字符串"Python is an excellent language",通过split(),函数,就可以直接转换成一个列表。感觉真的好神奇.
(5)面向对象编程.
python语言是一种既支持面向过程又支持面向对象的程序设计语言。因此,面向对象的程序设计方法在python中也有着很好的体现。在C++中,对象是极其重要的,以对象为核心的程序是C++的主力军。类,是面向对象的具体表现。在前者语言中,类中主要包括private,public,protected,等成员类型,而python中则不需要明确指出。在构造函数上,前者语言用与类名相同的名字,分为无参数和有参数的构造函数,并且系统也会提供相应的默认构造函数,当然是在编程者未提供相应构造函数的时候。在python中构造函数的定义形式为 def __init__(self, , ,),此处值得注意的是,下划线是由两个组成,容易造成编程者的忽视.这里的self可以当成this指针来理解。在C++中,类提供一个,默认的this指针,用于指向当前操作对象,从而有效地避免了各个对象之间的数据混乱。在python语言中,self具有相似的功能。
构造函数在赋值的时候,以这样的形式进行赋值:self.name=name,当然这里前后的名字是可以不相同的.
此外,在类对象的定义上,python也有所不同.具体形式为:objectstudent=Student(“zhang shan",127,228)。C++中的主要形式:Student object(“zhang shan”,127,228),在python中是不适用的,笔者刚开始使用python进行类的编写时,以C++的形式,程序报错,无法运行,这可能与其类中构造函数的特殊性有关.
在类中其它公有函数的定义上,形式参数表中仍然需要有self的出现。如,def getName(self):return self.name ,而在C++中,只需要直接写,无需参数.如,int getAge(){return age;}即可.因此在使用方法上,略显不同。
三、个人学习方向
笔者对网络比较感兴趣。说实话,算法确实很有用,是程序的核心,但我更喜欢具有直接实际意义的事物,因此我比较倾向于网络方面.而我感觉python在网络方面的应用是非常巨大的,其功能也是很强大的。
目前我首先接触的是python的socket库。自我感觉是个很神奇的库。在打印设备名和IP4地址、获取远程设备的IP地址上,socket库提供了简单高效的操作。
在打印设备名和IP4地址时,首先 import socket 语句导入python提供的一个核心网络库。然后调用两个工具函数,也就是其中的库函数:gethostname(), gethostbyname(host_name)。便可实现相应的功能。
在获取远程设备的IP地址上,gethostbyname(host_name),同样适用。
例如这样的一段代码:
import socket
def get_remote_machine_info():
remote_host=’www。’
try:
print "IP address : %s"%hostbyname(remote_host)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论