`
friendsys
  • 浏览: 347962 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Python Totorial入门指南 笔记 [5:9]

阅读更多
使用关键字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 Totorial

    **JavaEE 5 教程概述** Java Enterprise Edition(JavaEE)5是Java平台的一个版本,专注于为企业级应用提供开发框架。这个教程旨在帮助开发者掌握JavaEE 5的核心技术,包括JSP(JavaServer Pages)、Servlet和更多...

    ios5实战 byTotorials

    《iOS 5实战 by Tutorials》是一本专为高级iOS开发者设计的实战指南,旨在帮助他们深入理解并熟练掌握iOS 5开发中的各种技术和最佳实践。这本书以丰富的实例和详尽的步骤指导读者探索iOS 5的新特性,提升开发技能。 ...

    RDMA programing totorial

    在RDMA编程指南中,Dotan Barak作为Mellanox Technologies公司的高级软件经理,分享了他的专业知识和经验。他在verbs编程领域拥有超过十年的经验,曾参与多项相关文档项目,包括libibverbs的手册页,编写了...

    learnyounode:学习你的节点 totorial

    5. **HTTP服务器**:Node.js可以方便地创建高性能的HTTP服务器,这是构建Web应用的基础。通过`http`模块,你可以理解请求和响应的工作原理。 6. **流(Stream)**:Node.js中的流是一种处理大量数据的有效方式,它...

    Git_Tutorial

    ### Git教程概览 #### 一、Git简介与特点 **Git** 是一种分布式版本控制系统,相较于传统的集中式版本控制系统(如CVS、SVN等)具有独特的优势。Git最初由Linus Torvalds为Linux内核开发所设计,现已被广泛应用于...

    React_totorial

    Create React App入门 该项目是通过引导的。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。您还将在控制台中看到任何棉绒...

    MacaronRL:RL实施

    欢迎! 此仓库包含强化学习算法。... 基于价值 , , , , 基于政策 Ray Pararell python包Totorial系列。 论文参考 , , , , , , ,演员批评-萨顿的教科书代码参考萨顿-强化学习教科书第二版。

    Visual Cpp与数据库管理

    一些VC++数据库编程实例,教你在VC++数据库编程领域里快速入门 (some very useful examples of VC++ programming in Database, giving you the quick totorial in the field of database VC++ programming)

    gromacs tutorial 4.0 中文版

    5. **初始条件和输出频率**:如原子坐标和速度的输出间隔,能量和压力的记录频率。 6. **能量最小化**:在模拟开始前进行能量最小化,以去除可能的结构冲突。 教程中的翻译内容还会深入到具体的实例,如水分子、...

    VTK Completed Book (Part3)

    VTK Completed Book (Part3)

Global site tag (gtag.js) - Google Analytics