《简明 Python 教程》笔记-----面向对象及系统相关

 
 
1、类
①.每个函数都有个self参数,代表对象,类和对象所属变量,相当于C++中的‘静态变量’和‘某对象变量’
   如果类Person
   self.name为对象变量,Person.name为类变量
class Person:
    population = 0
    def __init__(self ,name):
        self.name = name
        population = population + 1
    def __del__(self):
        population = population - 1
p = Person()
p.fuc()
p2 = Person()
P2.fuc()
 
②.__init__相当于构造函数
   __del__ 相当于析构函数
 
③.加双下划线的变量为私有变量,这是默认方式
class Person:
   def __init__(self ,name):
       self.__name = name
   def r(self):
       return self.__name
p = Person('angel')
#print p.__name "error!"
print p.r()
④.子类继承父类,不会继承私有变量,就是子类里根本没有那个变量
网上查了一下,python内部操作是,继承时对私有变量进行改名,子类再找那个变量名就换了名了,也就是没了。
 
举例:下面代码就是错的,把__name改成name就对了。

class Person:
    def __init__(self ,name):
        self.__name = name
    def r(self):
        print self.__name

class Son(Person):
    def __init__(self ,name, num):
        Person.__init__(self, name)
        self.num = num
    def r(self):
        print self.num
        print self.__name

p = Son('angel',3)
p.r()

2、输入输出文件 

给的很少,基本的输入输出格式

文件读写:

 

poem = '''Programming is fun use Python! '''

 

f = file('poem.txt', 'w')
f.write(poem)
f.close()

f = file('poem.txt')
while True:
    line = f.readline()
    if len(line) == 0:
        break
    print line,
f.close()

储存器 Pickle:可以整块的存取数据,各种类型放一块打包

import cPickle as p

filename = 'shoplist.data'
shoplist = 234
a = 'fdsafd'

f = file(filename, 'w')
p.dump(shoplist, f) 
p.dump(a, f)
f.close()

f = file(filename)
sl = p.load(f)
print sl
sl = p.load(f)
print sl 

3、异常,跟C++模式一样

 

import sys

 

try
   ...
except MyException:
   ...
except :
   ...
else:
   ...
finally:
   ...

自定义异常举例:

class ShortInputException(Exception):
    def __init__(self, length, atleast):
        Exception.__init__(self)
        self.length = length
        self.atleast = atleast

try:
    s = 
raw_input('Enter something --> ')
    if len(s) < 3:
        raise ShortInputException(
len(s), 3)
except EOFError:
    print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
    print 'ShortInputException: The input was of length %d, \
          was expecting at least %d' 
% (x.length, x.atleast)
else:
    print 'No exception was raised.'

4、Python标准库

给的很少,以后用的话还是要自己探索啊

sys模块:

   这里给了怎么使用sys.argv,在非交互模式下运行,你后面输入的东西,放在arg[]里

   比如输入 python a.py --version

   argv[0]储存当前文件名,即a.py

   argv[1]储存--version

sys模块里还有其它项目,

   sys.stdinsys.stdoutsys.stderr分别对应你的程序的标准输入、标准输出和标准错误流。

OS模块:

   一些与平台无关的功能,增强了可移植性。

   http://sebug.net/paper/python/ch14s03.html

5、更多Python内容的特殊方法

   我觉得有用的:

①.列表综合:

     代码:

         listone = [234]
         listtwo = [2*i for in listone if i > 2]
         print listtwo

     输出:

         [6, 8]

②.在函数中接收元组和列表

   变量前加*代表数组,可以接收元组和列表

   变量前加**代表二维数组,可以接收字典

     def powersum(power, *args):
         total = 0
         for i in args:
             total += pow(i, power)
         return total

 ③.lambda形式

    代码:

    def make_repeater(n):
     return lambda s: s*n

     twice = make_repeater(
2)

     print twice('word')
     print twice(5)

    输出:

    wordword
    10

     lambda语句用来创建函数对象。

     本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。

     注意,即便是print语句也不能用在lambda形式中,只能使用表达式。

④.exec和eval语句

      exec语句用来执行储存在字符串或文件中的Python语句

       >>> exec 'print "Hello World"'
       Hello World

      eval语句用来计算存储在字符串中的有效Python表达式

       >>> eval('2*3')
       6

⑤.assert语句

   assert语句用来声明某个条件是真的。当assert语句失败的时候,会引发一个AssertionError

   >>> mylist = ['item']
   >>> assert len(mylist) >= 1
   >>> mylist.pop()
   'item'
   >>> assert len(mylist) >= 1
   Traceback (most recent call last):
     File "<stdin>", line 1, in ?
   AssertionError

⑥.repr函数

   repr函数用来取得对象的规范字符串表示。

   反引号有相同功能

   >>> i = []
   >>> i.append('item')
   >>> `i`
   "['item']"
   >>> repr(i)
   "['item']"

 

6、一些GUI库,python书籍,开发书籍等相关资料

   http://sebug.net/paper/python/ch16.html

   http://sebug.net/paper/python/ch16s02.html

   http://sebug.net/paper/python/apa.html

 
posted @ 2012-04-22 17:53  kfinder  阅读(634)  评论(2编辑  收藏  举报