使用关键字import导入模块..类似Java中的类,不过似乎没有作用域的概念,可以直接使用导入后的
模块名.方法名进行方法的调用
如果想直接调用函数,可以赋给他一个本地的名称,也就是用一个变量指向该function
say=fibo.sayHell
say("123")
import的变体
from fibo import sayHell //表示只导如fibo模块中的sayHell方法, 也可以使用*代替,表示导入所有的方
法
注意:这种导入的方式,不能导入_开头的方法,直接使用import可以
使用编译器编译时,生成的pyc和pyo文件,功能与py文件相同,只是加载的速度更快一些
Python内置的标准模块
主要模块包括sys...
内置函数dir()用于按模块名搜索定义,返回一个字符串类型的存储列表
类型中包括所有类型的名称:变量,模块,函数,等等
默认情况下,不会列出内置函数和变量名,需要在标准模块__builtin__中定义
Packages包,与Java中的类似,也是用于防治出现模板之间的命名冲突
可以使用
from com.orz.fibo import sayHell
print sayHell("33")
进行导入使用,也可以import后,使用完整的包名进行调用
必须有一个__init__.py文件的存在,才能使Python视该目录为一个包,可以为空文件,也可以包含包的初始化代
码
注意from ...import的形式,可以从包中导入一个模块,也可以从模块中导入一个函数或变量
使用from package import *的时候,有可能因为平台的大小写原因,而出现问题,解决的方法,可以在包中的
__init__.py 代码定义一个名为__all__的链表,就会按照链表给出的模块名进行导入:
如:
__all__=["echo","suu"]
需要注意更新这个列表
推荐使用from Package import xx 导入模块
还有一种更为特殊的变量,__path__,不常用
输入和输出
格式化输出,有两种不同的方式
第一种:使用字符串的拼接和切割处理,然后得到结果
第二种:使用%操作符,解释成类似sprintf()的风格,作用于右参数,从改操作中返回格式化的字符串
使用repr()或者str()方法 将不同的值转换成字符串
其中str转换成适合人阅读的形式,而repr则转换成供解释器读取的形式
rejust方法,向字符串左侧填充空格来格式显示字符串,还包括了Ljust和center等方法
也可以配合[:n]来分割字符串
zfill方法用于向数值的字符串表达式左侧填充0
使用%的方式
print "%d----%s" %(1,"2")
可以在循环时候,使用方式,由两个链表生成文本.
也可以使用字典的方式生成文本
table={"a":199,"v":299,"c":123}
print 'use %(a)d,%(v)d,%(c)d' % table //注意key的使用
读写文件
使用open方法,返回一个文件对象,两个参数分别是文件名与读写的模式
其中需要注意的是,模式中的读写模式有rb,wb,r+b等模式, b表示以二进制方式打开文件,对于文本没有特别影
响,不过如果打开JPG或exe文件,将会造成破坏.
其他注意: 如果只以w打开,那么将会覆盖原文件,如果不存在,也将会自动创建一个空文件,a模式表示追加方式
打开文件,r+表示读写方式打开文件,默认为r模式
f.read(size) 将会读取指定长度的字符串,并返回
f.readline() 将会读取一行
f.readlines() 用于读取多行,可以带size,读取指定数量的行数返回,也可以带多个参数,读取多个行
f.write(str).写入文件的方法,注意需要转换成字符串后写入
注意:如果同时读写一个文本,可能会出现乱码等错误
f.seek() 用于移动读取字符的游标位置,然后可以调用read读取当前位置的字符
f.tell() 返回游标所在位置
f.close()用于关闭文件,关闭后调用将会出错
如果需要输出中文操作,无论是文件还是字符串在控制台输出,都需要在指定module文件中输入
# coding=utf-8
而且要在第一行或者第二行 &&&&&&
Python提供的名为pickle的标准模块,用于将Python的对象表达为字符串,然后可以再转换成对象,类似Java的
序列化操作,用于将对象存储在文件中或者通过网络传输
将一个对象x,包装到文件f的方法
pickle.dump(x,f)
读取的方式,需要注意,中文会被自动转码,如果需要使用需要进行转码
x=pickle.load(f)
注意需要加载模块
import pickle
错误和异常
最少的两种错误: 语法错误和异常(syntax errors and exceptions)
异常处理 try: .... except xxError:...
处理的流程与Java类似
可以使用except(xxError,vvError): 用于同时捕获多种异常
如果except后不带具体异常类型,将会捕获所有的异常(通配项)
推荐捕获异常的方式
在 except xxError,inst:的方式,将Error异常中的信息赋值给inst变量
如
def toError():
print 1/0
try:
toError()
except Exception,iso:
print "打印异常错误信息";
print iso
抛出异常的方式,类似Java中的throw一样,不过关键字改为raise
如 raise Exception,"错误鸟"
其中第二个参数为错误的信息,可以使用上个例子进行捕获
还有一种抛出异常的写法 raise xxError('错误信息'),不过推荐使用第一种
可以通过在except中,使用raise,将会再次抛出异常,而不捕获
用户自定义异常
异常类通常直接或者间接从Exception类派生,为了与标准类相同,自定义异常类以Error结尾
try语句的清理行为, 如java中的finally一样,Python中使用的关键字同样也是finally
使用预定义的清理行为----如自动打开与关闭文件
如:
with open("f:/1234.txt") as f:
for line in f:
print line
Python中类的使用
机制为C++和Modula-3的混合
定义类的语法
class ClassName:
<语句....>
类对象支持两种操作,属性引用和实例化
对类实例属性的修改,将不会对类名.属性访问的进行冲突
构造函数的定义(类似Java的格式)
def __init__(self)
self.data=[]
其中self为系统参数,会自动载入,需要放置在第一位
可以在init方法中使用self对象,动态添加属性,这些属性将会是私有的,不过对类对象的动态添加,将会影响到
所有的类的实例
类的实例对象 包括属性与方法对象
方法对象 Method Objects
可以给类和类实例动态添加方法,不过需要注意,类添加方法时,需要添加一个参数给方法对象
如:给实例添加方法
ass=abc('a')
def obc():
print "sd"
ass.db=obc
ass.db()
如:给类添加方法,需要传入一个实例对象
ass=abc()
def obc(obj): //注意方法需要一个参数
print "sd"
abc.db=obc
abc.db(ass) //注意方法调用需要一个实例
一些说明:
为了避免同名数据进行覆盖,在定义方法和属性的时候,采取以下的命名约定
属性名使用小写字符,并且使用_下划线开头
方法使用首字母大写 (这个和Java又有所不同)
对类属性的修改,将会影响到所有实例的属性,包括过去和将来创建的实例
通常类相关的方法的第一个参数命名为self,这仅仅是一个约定
继承 Inheritance
语法如下:
class DerivedClassName(BaseClassName):
.....
子类与基类必须在一个作用域里面(这里需要明确下啥是作用域....)
方法调用时,会沿着派生类--父类逐级寻找调用,子类可以覆盖父类的方法
如果在Python被覆盖的方法中调用父类的方法,与Java不同,不使用Super,而直接使用父类名.方法名(self,参
数)..进行调用
class efd():
def sayHello(self):
print "I am GOD"
class abc(efd):
def __init__(self):
self.add="地址"
self.age=20
def sayHello(self):
efd.sayHello(self)
print "Hello "
aI= abc();
aI.sayHello()
多继承 Multiple Inheritance
Python提供有限的多继承形式
如:
class DerivedClassName(base1,base2)
....语句
解析类属性的规则是由左到右
不推荐使用多继承,以免代码维护上的混乱
对于私有属性的介绍比较少,只介绍使用至少两个__开头,最多一个_结束
不过在代码测试过程中,没有找到正确的方法...等下本书继续研究
补充:
对类的实例动态添加属性,并不会影响到其他实例
异常也是类,所以可以使用下面两种方法抛出异常
raise Class,instance
raise instance
for x in "xx"的循环原理
在容器对象中调用iter().返回一个定义next方法的迭代器对象,逐一访问元素,没有后续元素时,next抛出一个
stopIteration异常通知for循环结束
这样可以在定义类中实现__iter__(),只需要返回return self,然后实现next()方法,就可以实现自定义的迭代
器-----例子在下本书中补充
生成器与生成器表达式明天补充
分享到:
相关推荐
**JavaEE 5 教程概述** Java Enterprise Edition(JavaEE)5是Java平台的一个版本,专注于为企业级应用提供开发框架。这个教程旨在帮助开发者掌握JavaEE 5的核心技术,包括JSP(JavaServer Pages)、Servlet和更多...
《iOS 5实战 by Tutorials》是一本专为高级iOS开发者设计的实战指南,旨在帮助他们深入理解并熟练掌握iOS 5开发中的各种技术和最佳实践。这本书以丰富的实例和详尽的步骤指导读者探索iOS 5的新特性,提升开发技能。 ...
在RDMA编程指南中,Dotan Barak作为Mellanox Technologies公司的高级软件经理,分享了他的专业知识和经验。他在verbs编程领域拥有超过十年的经验,曾参与多项相关文档项目,包括libibverbs的手册页,编写了...
5. **HTTP服务器**:Node.js可以方便地创建高性能的HTTP服务器,这是构建Web应用的基础。通过`http`模块,你可以理解请求和响应的工作原理。 6. **流(Stream)**:Node.js中的流是一种处理大量数据的有效方式,它...
### Git教程概览 #### 一、Git简介与特点 **Git** 是一种分布式版本控制系统,相较于传统的集中式版本控制系统(如CVS、SVN等)具有独特的优势。Git最初由Linus Torvalds为Linux内核开发所设计,现已被广泛应用于...
Create React App入门 该项目是通过引导的。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。您还将在控制台中看到任何棉绒...
欢迎! 此仓库包含强化学习算法。... 基于价值 , , , , 基于政策 Ray Pararell python包Totorial系列。 论文参考 , , , , , , ,演员批评-萨顿的教科书代码参考萨顿-强化学习教科书第二版。
一些VC++数据库编程实例,教你在VC++数据库编程领域里快速入门 (some very useful examples of VC++ programming in Database, giving you the quick totorial in the field of database VC++ programming)
5. **初始条件和输出频率**:如原子坐标和速度的输出间隔,能量和压力的记录频率。 6. **能量最小化**:在模拟开始前进行能量最小化,以去除可能的结构冲突。 教程中的翻译内容还会深入到具体的实例,如水分子、...
VTK Completed Book (Part3)