设为首页 收藏本站
查看: 621|回复: 0

[经验分享] Python Totorial入门指南 笔记 [5:9]

[复制链接]

尚未签到

发表于 2017-5-2 10:28:49 | 显示全部楼层 |阅读模式
使用关键字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()方法,就可以实现自定义的迭代

器-----例子在下本书中补充

生成器与生成器表达式明天补充

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372004-1-1.html 上篇帖子: python中'@'符号用作函数修饰符 下篇帖子: python入门(二)简明语法学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表