免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 48565 | 回复: 61
打印 上一主题 下一主题

请教python有什么用啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-31 23:39 |只看该作者 |倒序浏览
先声明,本人并不是来踩场的,只是想了解一吓python为什么如此流行,请各位指教了!

我是学习c++的,都有3年多时间了,最近听朋友说python很爽,然后看了python的教程,然后在网上搜了一吓python的作用,看了一个用python写的socket程序,感觉和c++写的没什么两样,也不见得方便到哪里去?python有的,stl也有,有什么特别的地方吗?这里有精通python的高手,能道出一两样用python的好处吗?

论坛徽章:
0
2 [报告]
发表于 2006-07-31 23:41 |只看该作者
刚在网上找到了一些,“它的语法表达优美易读”``仅此?

论坛徽章:
0
3 [报告]
发表于 2006-08-01 08:31 |只看该作者
python适合快速开发,代码不仅优美,而且简洁。当然这是从美观上来说的。它本身是解释性语言,因此不需要编译即可运行。而且内置许多的高级数据结构,如常见的链表(python叫list),Hash表(python叫dict)等都是内置的。而且它没有静态类型声明,这样自然就是一种泛型编程。也不需要接口,但通过自省或约定可以轻松实现接口的功能。它的动态性还表现在可以在运行时改变一个实例,改变类(因为python中一切皆为对象,类也是一个对象)。还支持高级但更复杂的metaclass编程,即生成类的类。特别是它自带许多的标准库,功能都不错。python还提供一个交互环境可以进行测试。python有象java一样的包的概念,可以轻松管理你的模块。同时还有强大的自省功能,即在运行时检查对象的属性。支持自动垃圾回收。

因此python从使用,从学习上来说都是一种让人愉快的语言。举些简单的例子:

1. 打印一个文本文件的内容

print file('filename').read()

2. 动态给对象增加属性

class A:pass  #空类
a = A() #a没有属性,其实有一些内置的属性,但现在不关心
a.b = 1 #动态增加一个属性
print a.b #可以看到为1

3. 约定的编程

def p(a):
    print a.read()
这里只要a对象有read()方法即可成功,而不管它到底是什么,可以是一个文件对象,也可以是一个自定义的对象,但有read()方法。如果想进行一些检查,可以:
import types
def p(a):
    if hasattr(a, 'read') and isinstance(a.read, types.FunctionType):
        print a.read()
    else:
        raise Exception, 'Object should has a read function'

4.dir(a) #可以列出对象a的属性

等等。总之,它是一种动态类型解释性语言,与静态编译型语言差别非常大。这些东西只有深入下去才能有所体会。它的开发效率要高,执行效率目前的确是差一些,不过可以根据对效率的情况有选择的使用。而且还可以将C++或C写的程序封装为python的库在python中进行调用。因此还有人把python称之为“胶水语言”。

论坛徽章:
0
4 [报告]
发表于 2006-08-01 08:51 |只看该作者
顶了````除了约定编程比较特别外(个人觉得还是蛮有用)外``其他的``C#\java什么的都有`,那个动态给对象增加属性,不知道有什么用处。。。

论坛徽章:
0
5 [报告]
发表于 2006-08-01 09:57 |只看该作者
上面我列的只是一部分python的特性,C#也是一种类解释性的语言,不过不是动态的。而你所说C#/java都有,那好我可以举出几个它们没有的(不过C#基本上没有学过,不好比较):

1. Python的面向对象是多重继承,而C#/Java是单根继承。这使得Python更象是C++。因此使用起来更方便。
2. 自省的能力,java就差很多了。
3. 动态类型,即在赋值时根据数据类型自动绑定类型,但它又是强类型。这一点就与java的静态定义不同。
4. 在定义类方法时,不支持重载,与java不同,但支持参数缺省值,和可变参数,这一点java做不到
5. 动态改变实例属性,包括增加减少,还可以修改类的属性。这一点java做不到。
6. 还有许多的语法特点,太多了,举几个简单的例子:

if 2<n<5:  这种表达式java做不了
a, b = 1, 2 多个赋值
a, b = f() 函数可以一次返回多值
[str(i) for i in range(10)] 列表综合的表达

7. 还有象generator, decorator,这样更深入一些的东西java没有
还有许多。而且前面所讲内置的高级数据类型,而java不是内置的。还有python通过特殊的类方法可以实现操作符重载,而java是不支持的。还有象属性(property)定义,可以把读,写方法与一个名字绑定,这样在访问属性时,其实是调用了对应的方法。就象是delphi, vb中的属性一样。

至于讲到给实例动态加属性有许多的用处。比如我可以把它当作一个结构来传送数据,而且我在使用时直接增加属性即可,不用预先定义。因此传送对象非常方便。而且还可以用于对象序列化。先构造一个空对象,然后根据序列化的文件添填属性,最后再根据它的原始类,修改这个对象的基类完成对象的还原。

[ 本帖最后由 limodou 于 2006-8-1 09:58 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-08-01 11:24 |只看该作者
c++和python定位不同,python由于相对c++来说是更“高级”的语言,因此对各种算法封装较多,使用非常简单,不像c++,不碰 STL, BOOST 之类就不能编程。而 STL, BOOST之流,上手难度也很大。python的代码密度极高,简单举例,for循环在python中往往一行就可以写出。

论坛徽章:
0
7 [报告]
发表于 2006-08-01 19:23 |只看该作者
是的``我今天在想,两种东西根本就不同``没什么好比``不过不知道python多数用来做什么?

论坛徽章:
0
8 [报告]
发表于 2006-08-01 19:32 |只看该作者
通用程序设计语言,可以做几乎任何事:文本处理,网络,web,科学计算,游戏,图像,3D,数据库,桌面程序等等。

论坛徽章:
0
9 [报告]
发表于 2006-08-01 19:45 |只看该作者
python的精髓在于FP, 不是什么P面向对象

论坛徽章:
0
10 [报告]
发表于 2006-08-01 21:40 |只看该作者
谁说python的精髓在FP,python并不是一个FP编程语言,它的确有FP的一些功能,但你完全可以不用。曾经在python3000中甚至要把lambda去掉,但有许多人反对,因此保留了。去掉的原因就是它还是不够清晰,虽然它很方便。但大家的确习惯了。从这方面来说,FP只是python的一方面,但并不是精髓。但什么是精髓我也不知道。我只知道它好用,我很狂热,足够了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP