我用python else if 写法语言写了一堆函数然后按顺序调用做了个游戏外挂,这样写法算面向对象还是面向过程?

Python面向对象
Map Outline
Python面向对象1 课程简介1.1 培训对象1.1.1 对Python面向对象编程感兴趣1.1.2 已掌握基础的Python面向过程编程1.1.3 用Python自主开发大、中型应用系统1.1.4 有未来从事Python相关开发职业目标的1.2 技能目标1.2.1 了解面向对象编程的基本知识1.2.2 掌握Python语言中类的定义与使用方法1.2.3 掌握Python中类的属性与方法及其应用1.2.4 掌握Python中类继承与多态、方法重载1.2.5 会用继承和组合来完成项目的面向对象分析和代码实现1.3 怎样学习1.3.1 1.掌握Python基本语法及顺序、选择、循环基本程序的编写技能1.3.2 2.注意掌握面向对象的基础知识1.3.3 3.听课及时做笔记,供复习1.3.4 4.课后多做实践,理论联系实际才是最好的学习方式1.3.5 5.加入一些群、论坛等,帮人解决问题,提升自己2 面向对象与面向过程2.1 产生背景2.1.1 科学计算为目标的必然产物2.1.1.1 鸡兔同笼2.1.1.2 1.先假设全部为鸡(兔),计算出腿数2.1.1.3 2.然后算出腿数量差2.1.1.4 3.得出鸡(兔)数量2.1.1.5 4.计算出另一种动物的数量2.1.2 软件应用领域的扩张和系统膨胀之后应运而生2.2 编程方法2.2.1 自顶向下2.2.2 自底向上2.3 代码主体结构2.3.1 程序=数据(变量)+算法(函数/过程)2.3.2 程序=对象+交互2.4 数据操作主体2.4.1 由函数/过程进行加工与展现2.4.2 在对象的方法中加工与展现2.5 模拟方法2.5.1 通过函数/过程操纵表现世界的数据与状态2.5.2 把世界描绘成具有主动性的对象之间交互2.6 编程思维2.6.1 搞清处理数据的步骤2.6.2 面向对象分析2.7 运行效率2.7.1 较高2.7.2 稍低3 面向对象入门3.1 对象编程体验3.1.1 一款简单自动运行小游戏模拟:在一维的地图上,有一只虫子和一只蚂蚁。
每一次他们都走过一个-3,-2,2,3个随机单位的距离(选定走法,若达
到地图边界则放弃移动)。当蚂蚁、虫子处于同一位置时,蚂蚁吃掉虫子,
程序结束。3.1.2 PO3.1.2.1 虫子的初始位置3.1.2.2 蚂蚁的初始位置3.1.2.3 进入循环(条件为蚂蚁和虫子不在同一位置)3.1.2.4 依照规则,蚂蚁和虫子移动位置3.1.2.5 直到蚂蚁和虫子走到同一位置,程序结束3.1.3 OO3.1.3.1 游戏中的对象有:地图、虫子、蚂蚁3.1.3.2 地图是一维的,只需要记录虫子和蚂蚁的位置3.1.3.3 蚂蚁和虫子知道自己的位置3.1.3.4 蚂蚁和虫子能按规则移动3.1.3.5 定义地图、蚂蚁、虫子三个类3.1.3.6 主程序中实例化它们,并通过对象间的交互来完成游戏的模拟3.2 理解对象3.2.1 对象可以指自然界中的任何事物3.2.2 计算机为解决某个领域问题所使用的事物(自然界中的事物的模型化)3.2.3 事物(对象)具有自身的特征或能力3.2.4 计算机中的对象具有解决问题所需的特征或能力3.3 对象优越性3.3.1 封装3.3.1.1 将模型的特征和能力打包在一起3.3.1.2 模型的改变由模型自身来完成,就像自然界的事物一样3.3.1.3 隐藏模型的细节,外界只能使用他,而不必/不能改变他3.3.2 继承3.3.2.1 符合自然界的分类规律3.3.2.2 快速的代码重用3.3.3 多态3.3.3.1 子类可以继承父类的特征与能力,还可以通过自定义来修改其特征与能力3.3.3.2 鸭子类型(duck typing)名字来源于由 James Whitcomb Riley 提出的鸭子测试。
当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
在有的语言中必须用接口来实现3.3.4 组合3.3.4.1 一个模型可以由其他的模型组成4 定义和使用类4.1 最简类定义4.2 类实例化4.3 类与实例之间关系4.3.1 定义类就是建立模型(模子/印章)4.3.2 实例化类就是建立真实事物(产品/印章印出的图案)4.4 有特征和能力的类4.4.1 特征/属性,是类自身包含或知道的数据4.4.2 能力,以方法体现,是类具有能动性的体现4.5 实例化步骤4.5.1 调用__new__()方法创建实例4.5.2 __new__()方法自动从object继承4.5.3 调用__init__()方法对其初始化4.5.4 __init__()方法在类中定义4.6 添加类说明(docstring)4.6.1 紧跟类名行之后,以三引号包围的字符串4.6.2 查看类说明4.6.2.1 类名.__doc__4.6.2.2 help(类名)4.7 新式类与经典类4.7.1 Python 2.x版本4.7.1.1 默认为是经典类4.7.1.2 继承object为新式类4.7.2 Python 3.x版本4.7.2.1 统一为新式类
不用继承object4.7.3 区别4.7.3.1 经典类继承为深度优先4.7.3.2 新式类继承为广度优先4.8 课后思考4.8.1 类和实例是什么关系?4.8.2 类的属性和方法分别代表什么?4.8.3 类实例化的基本步骤是什么?5 描述对象的特征5.1 实例属性5.1.1 类被实例化以后才会具有的属性5.1.2 一般在__init__()方法中创建并初始化5.1.3 直接使用即定义:self.&属性名&5.1.4 引用方法:self.&属性名&5.1.5 self用来代表类的实例的5.1.6 类外用实例名.属性名方式定义和引用5.1.7 相同类的不同实例其实例属性是不相关的5.1.8 一般不建议在__init__()方法之外中创建和初始化实例属性5.1.9 一般不推荐类外定义和修改,修改可以单独定义方法5.2 类属性5.2.1 类定义后就存在,而且不需要实例化5.2.2 类属性使得相同类的不同实例共同持有相同变量5.3 私有属性5.3.1 不提供限制属性访问的关键字(无法限制类的各种属性在类外直接访问)5.3.2 使用__开头的变量名加以标志,只有类对象自己能访问5.3.3 使用_开头的变量名加以标志,应该只有类对象及其子类能访问(非强制性)5.4 特殊属性5.4.1 保存对象的元数据5.4.2 __doc__5.4.3 __name__5.4.4 __dict__5.4.5 __module__5.4.6 __base__5.5 作业5.5.1 定义一个类Box,具有实例属性长度(length)、宽度(width)、高度(height)。
具有私有属性体积(由长、宽、高计算得来),并且它的每个实例可以知道它被实
例化的数量。然后实例化它们五次,并输出每个实例的所有属性。6 让对象具有能动性6.1 类的方法的定义6.1.1 def fun_name(self,...):
pass6.1.2 其中的参数self代表类的实例,
在调用方法时由系统自动提供。6.1.3 方法定义时必须指明self参数6.2 类的方法的调用6.2.1 与普通的函数调用类似6.2.2 在类的内部调用:self.&方法名&(参数列表)6.2.3 在类的外部调用:&实例名&.&方法名&(参数列表)6.2.4 注:以上两种调用方法中,提供的参数列表中都不用包括self6.3 类内方法相互调用6.3.1 在一个类的内部方法之间是可以相应调用的6.3.2 调用方法同上面所述的在类的内部调用方法6.4 构造方法及其作用6.4.1 构造方法就是前面课程提到和使用的__init__()方法6.4.2 构造方法的作用就是在类实例化时初始化实例6.4.3 __init__()方法就是类实例化的第二步自动调用的函数6.4.4 注意其方法名是固定的,但其参数同普通方法一样,至少应带有self参数6.4.5 初始化实例包括:定义和初始化实例属性;或调用类的一些方法6.4.6 构造方法可以带有除self外的其它各种参数(关键字参数、
默认参数、用元组收集参数、用字典收集关键字参数等);
可以达到在实例化类时,为相应的属性传入指定的值。6.5 提醒6.5.1 本节课所定义的都是类的实例方法,和实例属性一样,必须进行类实例化之后,才能存在和调用它们。6.5.2 这里使用的是Python3.x版本,print是一个函数。6.6 作业6.6.1 修改上次课中定义的类Box,要求其具有:
访问私有属性(体积)的方法
添加颜色属性(_color)和设置与获取Box的颜色的方法
添加打开和关闭盒子(Box)的方法,并且限制Box打开(关闭)之后,
再次调用打开(关闭)方法会给予提示;即不能重复打开与关闭。
在主程序中实例化并进行测试。7 深入类的属性7.1 同名的类属性与实例属性7.1.1 以实例名.属性名引用时,优先引用实例属性7.1.2 以类名.属性名引用时,只能引用类属性7.2 属性访问的特殊方法(反射)7.2.1 提供用字符串来操作类的属性/方法的方式7.2.2 主要工具函数7.2.2.1 hasattr(obj_bame,'属性名')7.2.2.2 setattr(obj_name,'属性名',值)7.2.2.3 getattr(obj_name,'属性名')7.3 属性包装7.3.1 将方法包装成属性,以隐藏相关实现。7.3.1.1 控制属性的类型或范围7.3.1.2 虚拟属性(由其它属性处理后得来)7.3.2 三种属性操作7.3.2.1 可读:@property7.3.2.2 可写:@&property-name&.setter7.3.2.3 可删:@&property-name&.deleter7.4 描述符7.4.1 将实现特殊协议方法的类作为另一个类的类属性7.4.2 用来拦截和控制属性访问并可以重复使用7.4.3 协议方法7.4.3.1 __get__()7.4.3.2 __set__()7.4.3.3 __delete__()7.4.4 分类7.4.4.1 数据描述符(实现全部协议方法)7.4.4.2 非数据描述符(实现部分协议方法)7.4.4.3 说明:所有类成员函数都是非数据描述符7.4.5 同名的实例属性和非数据描述符(以方法为例)访问优先级7.4.6 注意:只能在新式类中使用7.5 __call__()让类的实例如函数一样可调用7.6 作业7.6.1 修改上节课的作业中定义的类:
1.使用属性包装器将私有属性_color包装为color(可读写)属性
2.运用描述符在Box类中创建一个类属性(盒子六面的图案字符,
只能为数字1-6)
3.为其定义__call__(),当作为函数调用时,返回其体积8 面向对象开发实例18.1 作业9 通过组合来构建复杂的对象9.1 作业10 Python与设计模式例谈10.1 设计模式10.1.1 一种高级的软件复用形式10.1.2 能够很好地指导软件设计过程10.1.3 是成功的软件设计模式和体系结构10.2 观察者模式10.2.1 一个持有会改变的数据对象,当其数据变化时,让监听者作出响应10.3 策略模式10.3.1 让一个对象的某个方法可以随时改变,而不用更改对象10.4 作业11 鸭子类型与多态11.1 什么是多态11.1.1 一种类型具有多种类型的能力11.1.2 允许不同的对象对同一消息作出灵活的反应11.1.3 以一种通用的方式对待可使用的对象11.1.4 非动态语言必须通过继承和接口来实现11.2 Python中的多态11.2.1 通过继承实现多态(子类可以作为父类使用)11.2.2 子类通过重载父类的方法实现多态11.3 动态语言与鸭子类型11.3.1 变量绑定的类型具有不确定性11.3.2 函数和方法可以接受任何类型的参数11.3.3 调用方法时不检查提供的参数类型11.3.4 调用时是否成功由参数的方法和属性确定11.3.5 调用不成功则抛出错误11.3.6 Python中不用定义接口11.4 多态的好处11.4.1 可实现开放的扩展与修改的封闭11.4.2 使Python更具有灵活性11.5 作业11.5.1 1.通过继承前面课程作业中定义的盒子(Box)类
实现可以相加的盒子类,并定义一个调用让盒了可以相加的函数。11.5.2 2.通过鸭子类型定义一个杯子类,能够将其实例提供给上题中的函数。
使得相加后得到一个容量为两个杯子类的实例容量之和的杯子类实例。12 类的继承与方法重载12.1 类的继承是面向对象编程的优点之一12.2 继承的特点12.2.1 减少代码和灵活定制新类12.2.2 子类具有父类的属性和方法12.2.3 子类不能继承父类的私有属性/方法12.2.4 子类可以添加新的方法12.2.5 子类可以修改父类的方法12.3 继承的语法12.3.1 定义类时,在类名后:(继承的类名)12.3.2 多重继承时,括号中放多个父类名12.3.3 例子:class MyClass(BaseClass)12.4 重载的语法12.4.1 直接定义和父类同名的方法12.5 修改父类方法12.5.1 在重载的方法中调用父类方法12.5.2 同时添加相应的业务逻辑12.5.3 多重继承时如何调用父类方法12.6 模拟游戏解析12.6.1 调用父类的方法super().父类方法名12.6.2 在父类方法的基础上修改或添加功能12.7 作业12.7.1 通过继承实现一台可灭菌的洗衣机12.7.2 修改刚才解析的游戏,为精灵添加能量,
并每次相遇时各自损失一定的能量。
耗尽后游戏结束。13 类的特殊方法13.1 深入理解类13.1.1 类也是一个对象,但具有创建其自身实例的能力。13.1.2 类可以和一个变量进行绑定。13.1.3 你可以为类增加属性。13.1.4 你可以把它作为函数的参数传递。13.2 元类13.2.1 类的创建和管理者(type)13.2.2 所有的类都是元类(type)的实例13.2.3 类实例化过程13.2.3.1 __new__()13.2.3.2 __init__()13.2.4 自定义元类13.2.4.1 目的:对其创建的类进行预处理13.2.4.2 继承type13.2.4.3 定义__new__)()方法13.2.4.4 还可以定义__init__()方法13.2.5 应用元类13.2.5.1 Python 3.x13.2.5.1.1 类继承中提供关键字参数:metaclass=元类名13.2.5.2 Python 2.x13.2.5.2.1 定义一个模块级变量__metaclass__=元类名13.2.5.2.2 为某个类添加类属性__metaclass__=元类名13.3 构造序列13.3.1 __len__(self)13.3.2 __getitem__(self,key)13.3.3 __setitem__(self,key,value)13.3.4 __delitem__(self,key)13.4 构造iter13.4.1 __iter__(self)13.4.2 __next__(self)13.5 构造可比较类13.5.1 __lt__()13.5.2 __le__()13.5.3 __gt__()13.5.4 __ge__()13.5.5 __eq__()13.5.6 __ne__()13.6 构造可运算类13.6.1 __add__()13.6.2 __sub__()13.6.3 __mul__()13.6.4 __div__()13.7 作业13.7.1 1.现在让你来回答什么是类?相信你会给出更好的答案。13.7.2 2.通过定义元类来实现以其作为元类的类具有主人(owner)类属性13.7.3 3.为前面课程中的色子类定义方法实现:
色子可以迭代、可比较、可进行加、减运算。14 类方法、静态方法14.1 静态方法14.1.1 定义方法14.1.1.1 @staticmethod装饰14.1.1.2 参数不用self14.1.2 访问特性14.1.2.1 不能引用或访问实例属性14.1.2.2 可以通过类.类变量访问类属性14.1.3 调用方法14.1.3.1 可以用类、类实例调用14.1.4 本质14.1.4.1 在类中的一个普通函数而已14.1.4.2 使面向对象程序中函数归属于类,易于代码管理14.1.5 用法14.1.5.1 与类相关,但不依赖或改变类与实例14.1.5.2 创建不同的实例14.1.5.3 把类相关工具方法放入类中14.2 类方法14.2.1 定义方法14.2.1.1 @classmethod14.2.1.2 必须提供参数cls14.2.2 访问特性14.2.2.1 不能引用或访问实例属性14.2.3 调用方法14.2.3.1 可以用类、类实例调用14.2.4 继承特性14.2.4.1 继承时,传入的类变量cls是子类,而非父类14.2.5 用途14.2.5.1 与类相关,但不依赖或改变类的实例14.2.5.2 工厂方法,创建类实例,完成有关预处理14.2.5.3 在类内调用静态方法时不用硬编码类名14.3 作业14.3.1 编写一个色子类14.3.1.1 1.具有6个面,每个面为一种颜色14.3.1.2 2.每种颜色代表一个数值(1-6)14.3.1.3 3.实现一个通过颜色计算两种其代表数值和的静态方法14.3.1.4 4.实现一个类方法(gen_dice)用于产生这个类的实例
More Maps From User
No more maps.維基百科,自由的百科全書
本條目需要補充更多。(日)
請協助添加多方面以,的內容可能會因為而移除。
關於與「Python」名稱相近或相同的條目,詳見「」。
 中有關的電子學程
Python(英國發音: 美國發音:),是一種、的。它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的簡單,與其它大多數程式設計語言使用大括號不一樣,它使用縮進來定義語句塊。
與、、、等一樣,Python具備功能,能夠自動管理內存使用。它經常被當作腳本語言用於處理系統管理任務和網路程式編寫,然而它也非常適合完成各種高階任務。Python虛擬機本身幾乎可以在所有的中運行。使用一些諸如、、之類的工具可以將Python原始碼轉換成可以脫離Python解釋器執行的程式。
Python的官方解釋器是,該解釋器用編寫,是一個由社群驅動的自由軟體,目前由管理。
Python支援、、、、多種編程範式。
Python的創始人為(Guido van Rossum)。1989年的聖誕節期間,為了在打發時間,決心開發一個新的腳本解釋程式,作為的一種繼承。之所以選中Python作為程式的名字,是因為他是BBC電視劇——(Monty Python's Flying Circus)的愛好者。ABC是由吉多參加設計的一種教學語言。就吉多本人看來,ABC這種語言非常優美和強大,是專門為非專業程式設計師設計的。但是ABC語言並沒有成功,究其原因,吉多認為是非開放造成的。吉多決心在Python中避免這一錯誤,並取得了非常好的效果,完美結合了和其他一些語言。
就這樣,Python在吉多手中誕生了。實際上,第一個實現是在機上。可以說,Python是從ABC發展起來,主要受到了(另一種相當優美且強大的語言,為小型團體所設計的)的影響。並且結合了和C的習慣。
目前吉多仍然是Python的主要開發者,決定整個Python語言的發展方向。Python社群經常稱呼他是仁慈的獨裁者。
Python 2.0於日發布,增加了實現完整的,並且支持。同時,整個開發過程更加透明,社群對開發進度的影響逐漸擴大。Python 3.0於日發布,此版不完全兼容之前的Python原始碼。不過,很多新特性後來也被移植到舊的Python 2.6/2.7版本。
Python是完全物件導向的語言。函數、模組、數字、字串都是物件。並且完全支持繼承、重載、派生、多重繼承,有益於增強原始碼的複用性。Python支持重載運算符,因此Python也支持泛型設計。相對於Lisp這種傳統的函數式程式語言,Python對只提供了有限的支持。有兩個標準庫(functools, itertools)提供了與和中類似的函數式程式設計工具。
雖然Python可能被粗略地分類為「」(script language),但實際上一些大規模軟體開發計畫例如、Mnet及,也廣泛地使用它。Python的支持者較喜歡稱它為一種高階動態程式語言,原因是「腳本語言」泛指僅作簡單程式設計任務的語言,如shell script、等只能處理簡單任務的程式語言,並不能與Python相提並論。
Python本身被設計為可擴充的。並非所有的特性和功能都集成到語言核心。Python提供了豐富的和工具,以便程式設計師能夠輕鬆地使用、、來編寫擴充模組。Python編譯器本身也可以被集成到其它需要腳本語言的程式內。因此,有很多人把Python作為一種「」(glue language)使用。使用Python將其他語言編寫的程式進行集成和封裝。在內部的很多項目,例如Google App Engine使用編寫性能要求極高的部分,然後用Python或/調用相應的模組。《Python技術手冊》的作者馬特利(Alex Martelli)說:「這很難講,不過,2004年,Python已在Google內部使用,Google召募許多Python高手,但在這之前就已決定使用Python。他們的目的是儘量使用Python,在不得已時改用C++;在操控硬體的場合使用C++,在快速開發時候使用Python。」
Python的設計哲學是「優雅」、「明確」、「簡單」。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」,也因此它和擁有明顯個人風格的其他語言很不一樣。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確沒有或者很少有歧義的語法。這些準則被稱為「Python格言」。在Python解釋器內運行import this可以獲得完整的列表。
&&& import this
The Zen of Python
by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合併到Python內。再加上因為Python屬於動態類型語言,動態類型語言是在運行期間檢查數據的類型,不得不保持描述變量值的實際類型標記,程序在每次操作變量時,需要執行數據依賴分支,而靜態類型語言相對於動態類型語言,在聲明變量時已經指定了數據類型和表示方法,根據這一原理導致Python相對於C、Visual Basic等靜態類型語言來說運行速度較慢。不過,根據,大多數程式對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向於使用,或者用使用C/C++語言改寫這部分程式。目前可用的JIT技術是。
Python經常被用於Web開發。比如,通過:)模組,可以運行用Python編寫的Web程式。使用Python語言編寫的作為Web服務器,也能夠運行Python語言編寫的Web程序。Python定義了標準應用接口來協調Http伺服器與基於Python的Web程式之間的溝通。一些Web框架,如、、、、、、等,可以讓程式設計師輕鬆地開發和管理複雜的Web程式。
Python對於各種網路協定的支援很完善,因此經常被用於編寫伺服器軟體、網路蠕蟲。第三方函式庫支援非同步線上編寫程式和多數標準的網路協定(包含客戶端和伺服器),並且提供了多種工具,被廣泛用於編寫高性能的伺服器軟體。另有這個流行的第三方庫,同樣能夠支持高性能高並發的網絡開發。
Python本身包含的Tkinter庫能夠支持簡單的GUI開發。但是越來越多的Python程序員選擇或者等GUI套件來開發跨平台的桌面軟件。使用它們開發的桌面軟件運行速度快,與用戶的桌面環境相契合。通過還能將程序發布為獨立的安裝程序包。
在很多作業系統裡,Python是標準的系統元件。大多數Linux發行版和Mac OS X都集成了Python,可以在終端機下直接執行Python。有一些Linux發行版的安裝器使用Python語言編寫,比如Ubuntu的Ubiquity安裝器、Red Hat Linux和Fedora的Anaconda安裝器。在RPM系列Linux發行版中,有一些系統組件就是用Python編寫的。Gentoo Linux使用Python來編寫它的Portage。Python標準庫包含了多個調用作業系統功能的函式庫。通過pywin32這個第三方軟體包,Python能夠訪問Windows的COM服務及其它Windows API。使用IronPython,Python程式能夠直接調用.Net Framework。
、、可以讓Python程式設計師編寫科學計算程式。有些公司會使用代替make構建C++程序。
很多遊戲使用C++編寫圖形顯示等高性能模組,而使用Python或者編寫遊戲的邏輯、伺服器。相較於Python,的功能更簡單、體積更小;而Python則支援更多的特性和數據類型。很多遊戲,如使用Python來處理遊戲中繁多的邏輯。
YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。的作業系統Sugar項目的大多數軟體都是使用Python編寫。
一個在標準輸出設備上輸出的簡單程式,這種程式通常作為開始學習程式語言時的第一個程式:
適用於Python 3.0以上版本以及Python 2.6、Python 2.7
print("Hello, world!")
適用於Python 2.6以下版本以及Python 2.6、Python 2.7
print "Hello, world!"
將這行程式碼保存為myhello.py。然後在Linux終端機下輸入python myhello.py,或者在Windows命令編輯字元下輸入myhello.py執行。
Python也可以單步直譯執行。執行Python直譯器進入互動式命令列的環境,你可以在提示符號&&&旁輸入print("Hello, world!"),按Enter鍵輸出結果:
適用於Python 3.0以上版本以及Python 2.6、Python 2.7
&&& print("Hello, world!")
Hello, world!
適用於Python 2.6以下版本以及Python 2.6、Python 2.7
&&& print "Hello, world!"
Hello, world!
注意,低於3.0版本的Python,"Hello, world!"周圍不需要括號。Python 3.x與Python 2.x的print語法是不一樣的。
Python的設計目標之一是讓程式碼具備高度的可閱讀性。它設計時盡量使用其它語言經常使用的標點符號和英文單字,讓程式碼看起來整潔美觀。因為Python是動態語言,它不像其他的靜態語言如C、Pascal那樣需要書寫聲明語句。
Python開發者有意讓違反了縮排規則的程序不能通過編譯,以此來強迫程序員養成良好的編程習慣,也方便所有人查找和閱讀。並且Python語言利用縮排表示語句塊的開始和結束(),而非使用花括號或者某種。增加縮排表示語句塊的開始,而減少縮排則表示語句塊的結束。縮排成為了語法的一部分。例如if語句:
if age & 21:
print("你不能買酒。")
print("不過你能買口香糖。")
print("這句話處於if語句塊的外面。")
註:上述例子為Python 3.0以上版本的程式碼。
根據PEP的規定,必須使用4個空格來表示每級縮排。使用Tab字符和其它數目的空格雖然都可以編譯通過,但不符合編碼規範。支持Tab字符和其它數目的空格僅僅是為兼容很舊的Python程式和某些有問題的編輯程式。偏向使用Tab字符的程序員可以設置文本編輯器將Tab鍵轉換為4個空格實現縮進而不致導致縮進錯誤。
if語句,當條件成立時執行語句塊。經常與else, elif(相當於else if)配合使用。
for語句,遍列列表、字符串、字典、集合等,依次處理迭代器中的每個元素。
while語句,當條件為真時,循環執行語句塊。
try語句。與except, finally, else配合使用處理在程式執行中出現的異常情況。
class語句。用於定義類型。
def語句。用於定義函數和類型的方法。
pass語句。表示此行為空,不執行任何操作。
assert語句。用於程式調適階段時測試執行條件是否滿足。
with語句。Python2.6以後定義的語法,在一個場景中執行語句塊。比如,執行語句塊前加鎖,然後在語句塊執行結束後釋放鎖。
yield語句。在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本以後。這個語句變成一個運算符。
raise語句。拋出一個異常。
import語句。導入一個模塊或包。常用寫法:from module import name, import module as name, from module import name as anothername
Python的表達式寫法與C/C++類似。只是在某些寫法有所差別。
主要的算術運算符與C/C++類似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取模。&&, &&表示右移和左移。&, |, ^表示二進制的AND, OR, XOR運算。&, &, ==, !=, &=, &=用於比較兩個表達式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算符裡面,~, |, ^, &, &&, &&必須應用於整數。
Python使用and, or, not表示邏輯運算。
is, is not用於比較兩個變量是否是同一個對象。in, not in用於判斷一個對象是否屬於另外一個對象。
Python支持字典、集合、列表的推導式(dict comprehension, set comprehension, list comprehension)。比如:
&&& [x + 3 for x in range(4)]
[3, 4, 5, 6]
&&& {x + 3 for x in range(4)}
{3, 4, 5, 6}
&&& {x: x + 3 for x in range(4)}
{0: 3, 1: 4, 2: 5, 3: 6}
Python支持「迭代表達式」(generator comprehension),比如計算0-9的平方和:
&&& sum(x * x for x in range(10))
Python使用lambda表示。匿名函數體只能是表達式。比如:
&&& add = lambda x, y : x + y
&&& add(3, 2)
Python使用y if cond else x表示條件表達式。意思是當cond為真時,表達式的值為y,否則表達式的值為x。相當於C++和Java里的cond?y:x。
Python區分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。可以改變list中的元素,而不能改變tuple。在某些情況下,tuple的括號可以省略。tuple對於賦值語句有特殊的處理。因此,可以同時賦值給多個變量,比如:
&&& x, y=1, 2 #同时给x,y赋值,最终结果:x=1, y=2
特別地,可以使用以下這種形式來交換兩個變量的值:
&&& x, y = y, x #最终结果:y=1, x=2
Python使用'(單引號)和"(雙引號)來表示字符串。與Perl、Unix Shell語言或者Ruby、Groovy等語言不一樣,兩種符號作用相同。一般地,如果字符串中出現了雙引號,就使用單引號來表示字符串;反之則使用雙引號。如果都沒有出現,就依個人喜好選擇。出現在字符串中的\(反斜槓)被解釋為特殊字符,比如\n表示換行符。表達式前加r指示Python不解釋字符串中出現的\。這種寫法通常用於編寫正則表達式或者Windows文件路徑。
Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的類型有str, bytes, list, tuple等。它的語法是...[left:right]或者...[left:right:stride]。假定nums變量的值是[1, 3, 5, 7, 8, 13, 20],那麼下面幾個語句為真:
nums[2:5] == [5, 7, 8]從下標為2的元素切割到下標為5的元素,但不包含下標為5的元素。
nums[1:] == [3, 5, 7, 8, 13, 20]切割到最後一個元素。
nums[:-3] == [1, 3, 5, 7]從最開始的元素一直切割到倒數第3個元素。
nums[:] == [1, 3, 5, 7, 8, 13, 20]返回所有元素。改變新的列表不會影響到nums。
nums[1:5:2] == [3, 7]從下標為1的元素切割到下標為5的元素但不包含下標為5的元素,且步長為2
Python的函數支持、默認參數值、可變參數、閉包,但不支持函數。為了增強代碼的可讀性,可以在函數後書寫「文檔字符串」(Documentation Strings,或者簡稱docstrings),用於解釋函數的作用、參數的類型與意義、返回值類型與取值範圍等。可以使用內置函數help()打印出函數的使用幫助。比如:
&&& def randint(a, b):
"Return random integer in range [a, b], including both end points."
&&& help(randint)
Help on function randint in module __main__:
randint(a, b)
Return random integer in range [a, b], including both end points.
函數調用時,實參可以如同C語言那樣按照位置與形參匹配;也可以按照keyword argument形式調用,即param_name=value形式的實參。在一個函數調用的實參表中,keyword argument必須出現在位置參數之後。
可變參數用*args或**dictargs表示,即在形式參數名字前加一個*號,表示這是由多個實參組成的可變參數,該形參視作tuple數據類型;在形式參數名字前加**號,表示這是由多個實參組成的可變參數,該形參視作dict數據類型。實際上,在一個collection類型(包括set、list、tuple甚至bytes、str等)的變量前加一個*號,獲得了其中所有元素作為多個對象。
Python的函數作為first-class citizen,具有和普通變量平等的地位。函數一旦定義,即可視作為普通對象,其形參會保留上次調用時的值,但在函數新的一次調用時會被實參值覆蓋。因此函數的缺省參數值在連續多次調用該函數時,如果不被實參值覆蓋,就會一直保留。例如:
def f(a, L=[]):
L.append(a)
print(f(1))
print(f(2))
print(f(3))
函數的缺省參數值在函數被定義時被一次性計算其初值。
Python的函數實參與形參之間的結合是傳遞對象的引用。這是因為Python的賦值操作是把(變量)名字綁定到對象上。形實結合也是這種方式。如果形參綁定到一個可變的對象,則通過形參對此對象內容的修改,在函數外也是可見的。如果形參綁定到一個不可變的對象,則通過形參是不能修改此對象內容,但可以把形參重新綁定到其它對象上,這並不影響函數外的對象的值。例如:
def foo(a):
a.append('haha')
def bar(b):
b=101 #实际上是重新绑定了另一个整型对象101
print(a) #结果为['haha']
print(b) #结果为100
面向對象開發方法是指綁定到對象的函數。調用對象方法的語法是instance.method(arguments)。它等價於調用Class.method(instance, arguments)。當定義對象方法時,必須顯式地定義第一個參數,一般該參數名都使用self,用於訪問對象的內部數據。這裡的self相當於C++, Java裡面的this變量,但是我們還可以使用任何其它合法的參數名,比如this和mine等,self與C++,Java裡面的this不完全一樣,它可以被看作是一個習慣性的用法,我們傳入任何其它的合法名稱都行,比如:
class Fish:
def eat(self, food):
if food is not None:
self.hungry=False
class User:
def __init__(myself, name):
myself.name = name
#构造Fish的实例:
#以下两种调用形式是等价的:
Fish.eat(f, "earthworm")
f.eat("earthworm")
u = User('username')
Python支持一些以「__」開始並以「__」結束的特殊方法名,它們用於實現運算符重載和實現多種特殊功能。
Python採用動態類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運行時,才做出檢查。所以操作對象時可能會拋出異常。不過,雖然Python採用動態類型系統,它同時也是強類型的。Python禁止沒有明確定義的操作,比如數字加字符串。
與其它面向對象語言一樣,Python允許程序員定義類型。構造一個對象只需要像函數一樣調用類型即可,比如,對於前面定義的Fish類型,使用Fish()。類型本身也是特殊類型type的對象(type類型本身也是type對象),這種特殊的設計允許對類型進行編程。
Python內置多種數據類型。下面這個列表簡要地描述了Python內置數據類型(適用於Python 3.x):
一個由字符組成的不可更改的有序列。在Python 3.x里,字符串由Unicode字符組成。
'Wikipedia'
"Wikipedia"
"""Spanning
一個由字節組成的不可更改的有序列。
b'Some ASCII'
b"Some ASCII"
可以包含多種類型的可改變的有序列
[4.0, 'string', True]
可以包含多種類型的不可改變的有序列
(4.0, 'string', True)
set, frozenset
與數學中集合的概念類似。無序的、每個元素唯一。
{4.0, 'string', True}
frozenset([4.0, 'string', True])
一個可改變的由鍵值對組成的無序列。
{'key1': 1.0, 3: False}
精度不限的整數
浮點數。精度與系統相關。
邏輯值。只有兩個值:真、假
除了各種數據類型,Python語言還用類型來表示函數、模塊、類型本身、對象的方法、編譯後的Python代碼、運行時信息等等。因此,Python具備很強的動態性。
Python使用與C、Java類似的運算符,支持整數與浮點數的數學運算。同時還支持複數運算與無窮位數(實際受限於計算機的能力)的整數運算。除了求絕對值函數abs()外,大多數數學函數處於math和cmath模塊內。前者用於實數運算,而後者用於複數運算。使用時需要先導入它們,比如:
&&& import math
&&& print(math.sin(math.pi/2))
fractions模塊用於支持分數運算;decimal模塊用於支持高精度的浮點數運算;第三方庫Sympy用於支持數學符號運算。
Python定義求余運行a % b的值處於開區間[0, b)內,如果b是負數,開區間變為(b, 0]。這是一個很常見的定義方式。不過其實它依賴於整除的定義。為了讓方程式:b * (a // b) + a % b = a恆真,整除運行需要向負無窮小方向取值。比如7 // 3的結果是2,而(-7) // 3的結果卻是-3。這個算法與其它很多編程語言不一樣,需要注意,它們的整除運算會向0的方向取值。
Python允許像數學的常用寫法那樣連着寫兩個比較運行符。比如a & b & c與a & b and b & c等價。C++的結果與Python不一樣,首先它會先計算a & b,根據兩者的大小獲得0或者1兩個值之一,然後再與c進行比較。
Python擁有一個強大的標準庫。Python語言的核心只包含數字、字符串、列表、字典、文件等常見類型和函數,而由Python標準庫提供了系統管理、網絡通信、文本處理、數據庫接口、圖形系統、XML處理等額外的功能。
Python標準庫的主要功能有:
文本處理,包含文本格式化、正則表達式匹配、文本差異計算與合併、Unicode支持,二進制數據處理等功能
文件處理,包含文件操作、創建臨時文件、文件壓縮與歸檔、操作配置文件等功能
操作系統功能,包含線程與進程支持、IO復用、日期與時間處理、調用系統函數、日誌(logging)等功能
網絡通信,包含網絡套接字,SSL加密通信、異步網絡通信等功能
網絡協議,支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多種網絡協議,並提供了編寫網絡服務器的框架
W3C格式支持,包含HTML,SGML,XML的處理。
其它功能,包括國際化支持、數學運算、HASH、Tkinter等
Python社區提供了大量的第三方模塊,使用方式與標準庫類似。它們的功能覆蓋科學計算、Web開發、數據庫接口、圖形系統多個領域。第三方模塊可以使用Python或者編寫。,常用於將C語言編寫的程序庫轉化為Python模塊。包含了一組函式庫,Boost.Python,使得以Python或C++編寫的程式能互相調用。Python常被用做其他語言與工具之間的「膠水」語言。
開源Web開發框架,它鼓勵快速開發,並遵循MVC設計,開發周期短。
輕量級的Web框架。
輕量,同時有可以規模化的Web框架,Pylon projects 的一部分。
ActiveGrid
企業級的Web2.0解決方案。
簡單的Web框架,自身包含了Web服務,py腳本引擎和純python的數據庫PyDBLite。
一個輕量級的Web框架,內置非阻塞式服務器,而且速度相當快
一個小巧靈活的Web框架,雖然簡單但是功能強大。
基於Python的Web應用程序開發框架。
基於Python的一個極其高效和可靠的Web開發框架。
開源的Web應用服務器。
基於Python的MVC風格的Web應用程序框架。
流行的網絡編程庫,大型Web框架。
Web開發框架。
Matplotlib
用Python實現的類matlab的第三方庫,用以繪製一些高質量的數學二維圖形。
用於數據分析、數據建模、數據可視化的第三方庫。
基於Python的matlab實現,旨在實現matlab的所有功能。
基於Python的科學計算第三方庫,提供了矩陣,線性代數,傅立葉變換等等的解決方案。
基於Python的GUI程序開發GTK+庫。
用於Python的QT開發庫。
Python下的GUI編程框架,與MFC的架構相似。
BeautifulSoup
基於Python的HTML/XML解析器,簡單易用。
python的一個高性能並發框架,使用了epoll事件監聽、協程等機制將異步調用封裝為同步調用。
基於Python的圖像處理庫,功能強大,對圖形文件的格式支持廣泛。目前已無維護,另一個第三方庫Pillow實現了對PIL庫的支持和維護。
基於Python的多媒體開發和遊戲軟件開發模塊。
將python腳本轉換為windows上可以獨立運行的可執行程序。
適合於人類使用的HTTP庫,封裝了許多繁瑣的HTTP功能,極大地簡化了HTTP請求所需要的代碼量。
scikit-learn
第三方庫,實現許多知名的機器學習演算法。
TensorFlow
開發維護的機器學習庫。
Python的3.0版本,常被稱為Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的。為了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮。許多針對早期Python版本設計的程序都無法在Python 3.0上正常運行。為了照顧現有程序,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數。基於早期Python版本而能正常運行於Python 2.6並無警告的程序可以通過一個2 to 3的轉換工具無縫遷移到Python 3.0。
新的Python程序建議使用Python 3.0版本的語法。除非運行環境無法安裝Python 3.0或者程序本身使用了不支持Python 3.0的第三方庫。目前不支持Python 3.0的第三方庫有Twisted, PIL等。大多數第三方庫都正在努力地兼容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫兼容Python 3.0版本的程序,然後使用Python 2.6, Python 2.7來運行。
Python 2.7被確定為最後一個Python 2.x版本,它除了支持Python 2.x語法外,還支持部分Python 3.1語法。
Python 3.0的變化主要在以下幾個方面:
print語句沒有了,取而代之的是print()函數。可以使用2to3工具來自動轉換。Python 2.6與Python 2.7部分地支持這種形式的print語法。在Python 2.6與Python 2.7裡面,以下三種形式是等價的:
print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数
然而,Python 2.6實際已經支持新的print()語法:
from __future__ import print_function
print("fish", "panda", sep=', ')
新的str類型表示一個字符串,相當於Python 2.x版本的unicode類型。而字節序列則用類似b"abc"的語法表示,用bytes類表示,相當於Python 2.x的str類型。現在兩種類型不能再隱式地自動轉換,因此在Python 3.x裡面"fish"+b"panda"是錯誤。正確的寫法是"fish"+b"panda".decode("utf-8")。Python 2.6可以自動地將字節序列識別為Unicode字符串,方法是:
from __future__ import unicode_literals
print(repr("fish"))
除法運算符/在Python 3.x內總是返回浮點數。而在Python 2.6內會判斷被除數與除數是否是整數。如果是整數會返回整數值,相當於整除;浮點數則返回浮點數值。為了讓Python 2.6統一返回浮點數值,可以:
from __future__ import division
print(3/2)
捕獲異常的語法由except exc, var改為except exc as var。使用語法except (exc1, exc2) as var可以同時捕獲多種類型的異常。Python 2.6已經支持這兩種語法。
集合(set)的新寫法:{1,2,3,4}。注意{}仍然表示空的字典(dict)。
字典推導式(Dictionary comprehensions){expr1: expr2 for k, v in d},這個語法等價於:
for k, v in d.items():
result[expr1]=expr2
return result
集合推導式(Set Comprehensions){expr1 for x in stuff}。這個語法等價於:
result = set()
for x in stuff:
result.add(expr1)
return result
八進制數必須寫成0o777,原來的形式0777不能用了;二進制必須寫成0b111。新增了一個bin()函數用於將一個整數轉換成二進制字符串。Python 2.6已經支持這兩種語法。
dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。
如果兩個對象之間沒有定義明確的有意義的順序。使用&, &, &=, &=比較它們會拋出異常。比如1 & ""在Python 2.6裡面會返回True,而在Python 3.0裡面會拋出異常。現在cmp(), instance.__cmp__()函數已經被刪除。
可以注釋函數的參數與返回值。此特性可方便IDE對源代碼進行更深入的分析。例如給參數增加類型信息:
def sendMail(from_: str, to: str, title: str, body: str) -& bool:
合併int與long類型。
多個模塊被改名(根據PEP8):
ConfigParser
configparser
SocketServer
socketserver
StringIO模塊現在被合併到新的io模塊內。new, md5, gopherlib等模塊被刪除。Python 2.6已經支持新的io模塊。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合併到http包內。
取消了exec語句,只剩下exec()函數。Python 2.6已經支持exec()函數。
其他變化詳見參考文獻。基本上,可以編寫出使用Python 3.0語法並運行於Python 2.6, Python 2.7的程序。
Python是一門跨平台的腳本語言,Python規定了一個Python語法規則,根據該規則可編寫Python。
,官方的解釋器。需要區別於其他解釋器的時候才以CPython稱呼。這是最常用的Python版本。
(原名JPython;Java語言實現的Python,現已正式發布)。Jython可以直接調用Java的各種函數庫。
(使用Python語言寫的Python)
(面向和的Python實現)。IronPython能夠直接調用.net平台的各種函數庫。可以將Python程序編譯成.net程序。
(周蟒,支持使用繁/簡中文語句編寫程序的Python語言)
很多並非集成開發環境軟件的,也對Python有不同程度的支持,並且加上專門為Python設計的編輯器插件也會有很高的可用性。
+ pydev插件,目前對Python 3.X只支持到3.0
,由Python開發的程式編輯器。
適用於Python的(IDE)軟件,除了標準二進制發布包所附的IDLE之外,還有許多其他選擇。其中有些軟件設計有語法着色、語法檢查、運行、自動補全、智能感知等便利功能。由於Python的出身,這些軟件往往也具備各種操作系統的版本或一定的移植性。
:適用於windows和Linux等多個平台,採用conda對其包管理,隨軟件打包了許多科學計算的第三方Python庫。
:基於的自由軟件。支持自動補全、智能感知、自動語法檢查、工程管理、svn/mercurial集成、自動單元測試等功能,具有可擴展的插件系統,通過可選插件支持集成。調試功能與Visual Studio和Eclipse類似。目前版本為Eric6,可同時支持Python2.x和Python3.x,以及PyQt4和PyQt5。使用前需要先安裝相應的Python和PyQt版本。
:Python「標準」IDE。一般隨Python而安裝,支持較少的編輯功能。調試功能也比較弱。
和:後者是前者的免費精簡版。也可以用於PHP,Ruby,Javascript,Perl,Web和雲開發。
:由打造,該公司的Java IDE軟件IntelliJ(此軟件也有Python開發插件)擁有海量的使用者;PyCharm具備一般IDE的功能,比如,調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制等等,同時另外,PyCharm還提供了一些很好的功能用於Django開發,同時支持,PyCharm也支持IronPython。PyCharm是商業軟件,目前已經到2016.3版本。PyCharm也具有社區版。
:功能較全的開源IDE,使用Delphi開發。
:包含在pywin32內的編輯器,僅適用於Windows。
(Stani's Python Editor):功能較多的免費軟件,依賴。
:開源的跨平台科學計算IDE。
:功能較全的免費軟件,依賴。
:商業軟件,有免費的Wing IDE 101,功能有限,適用於入門者教學。
- 社交分享網站
- 文件分享服務
- 圖書、唱片、電影等文化產品的資料數據庫網站
- 鼓勵快速開發的Web應用框架
- 應用服務器
- 內容管理系統
- 另一個Web應用快速開發框架
- Python的網絡應用程序框架
- 用於管理成百上千台Linux主機的程序庫
- MediaWiki的機器人程式
- Python寫成的程序
- 使用Python編寫的BUG管理系統
- 使用Python編寫的郵件列表軟件
- 基於Django編寫的系統
- Python微Web框架
- Python微Web框架
- Python微Web框架
- 網絡遊戲EVE大量使用Python進行開發
- 使用Python作為建模工具與GUI語言的開源3D繪圖軟體
- 一個開源的SVG矢量圖形編輯器。
- 一個問答網站
- 一個泛科技主題網站
-仍在持續發展壯大且最受歡迎的ERP軟件
從Python參考了iterators,generators,以及list comprehensions。
有個optional syntax,稱為twt(The Whitespace Thing),取材自Python與。
. Python Software Foundation. ].
. Python Software Foundation. ].
. Python Software Foundation. ].
. Python Software Foundation. ].
Guido van Rossum. .
. Google Documents List Data API v1.0. Google. (存檔於10 August 2010).
call by value (where the value is always an object reference, not the value of the object)或者稱作call by object reference
Przemyslaw Piotrowski, , Oracle Technology Network, July 2006. Accessed October 21, 2008.
Python Software Foundation. .
] (英語).
Python Software Foundation. . ] (英語).
Python Software Foundation. .
Guido van Rossum. . Python Software Foundation.
] (英語).
- Python的官方網站(英文)
中和相關的內容
您可以在中查找此百科條目的相關電子教程:
中的相關學習資源:
:隱藏分類:

我要回帖

更多关于 面向对象写法 的文章

 

随机推荐