1、python 的编码转换

  utf-8 --> unicode   'xxx'.encode('utf-8)

  unicode --> utf-8   'xxx'.decode('utf-8)

 

2.python 的中文输出

  # -*- coding: utf-8

  print u'xxx'

 

3.格式化字符

  %d   %f  %s

  特殊用法: %02d 强制输出两位(超过则无效),不足用0补

        %.2f

 

4.list&tuple

  list的一些用法:  插入: list.append()  list.insert('number', content)

            删除: list.pop()

  tuple的注意事项:  定义一个元素的tuple: t(a,)

            关于tuple的不可变: 指tuple的指针,如果元素可变,如:元素是list,可以改变元素

 

5. dic中元素存在与否

  dic ={}

  i in dic

    or  dic.get[key]

      dic.get[key,value]

 

6.set(集合)的定义的应用

  s = set([a, b, c])

  s.add(key)

  s.remove(key)

___________________________华丽的总结线______________________

所有的集合: list tuple dictionary set

  list[]  tuple()    dic{}  set([])

  list :元素可以包含以上全部

  tuple: 指向不可变,但指向的对象本身可变

  dic: key不能为list、set

  set: 定义时必须是一个list,但不可变 如 set(【1,2,3】),不能为:list = 【1, 2, 3】, set(list)

  各项基本操作:

    list: 增加元素 list.append(content)   list.insert(key,content)

       删除元素 list.pop()

       改变元素 list[key] = content

       排序:list.sort()

    tuple: 无

    dic: 删除元素: dic.pop(key)

       改变元素: dic[key] = content

       检查元素: key in dic

             dic.get(key, content)

    set:   增加元素:set.add(content)

            set.remove(content)

    其他:对于string  string.reapalce(a, b) # remove a to b  

 

7. 定义函数

  错误指出:    if   a:

          raise

  多个输出值:  实质返回的是一个tuple

 

8.函数的参数

  分类: 必选参数, 默认参数, 可变参数, 关键字参数(字典)

  关于可变参数:    定义方法: def(*key)

            读取方法: *(v_name)  #其中v_name 可以是 list tuple 或者set

    关键字参数:   定义方法: def(**key)

            读取方法: **(v_name) # v_name是字典 

                  or: function(key:'content')  # 注意key没有不是string

  其他:定义默认参数时保证参数指向对象的不可变,避免: v = 【】       

 

9.递归函数

    def rec(n):

      if n ==1:

        return n

      else:

        return rec(n-1) * n

    尾递归: 同样以阶乘为例:

    def rec(n, total = 1):

      if n == 1:

        return total

      else:

        return rec(n - 1, n * total)

    尾递归和递归的区别:不会导致栈溢出(编译器优化的情况下,python仍然会溢出)

 

10. Slice

  对象:list tuple string

  方法: obj[a:b:c] # [a, b),step = c

 

11.迭代(recurse)

 

   对象:list, tuple, dic, 特殊:string

   方法: a.  for a in list/tuple/dic:

       b.  for a,b in enumerate(list/tuple/dic):   #返回value和对应的下标

       c.  for key in dic:   #返回key

          for value in dic.values():   #返回 value

          for k,v in dic.items():   #返回 (key, value)

  判断是否可迭代:  from collections import Iterable

            isinstance( a, Iterable)

  迭代器的使用:  l1 = []  # a list

           l = lter(l1)

           print next(l)

 

12.列表生成式

  a.  list(range(n))

  b.  [ n for n in list/tuple/str if ]

     [ m+n for m in for n in ]   

   其他:  1.  a.lower()  # 大写转小写

        2.  import os

           [a for a in os.listdir('.')]  # 以os.listdir的元素作为列表

 

13.generator

  迭代器的生成:

  1.  g = (参数 表达式) # list生成器

  2.  yield

 

14.高阶函数

  a.  map(function, list) # function 作用于list 每个元素

  b.  reduce(function, list) # 例

                  

print reduce((lambda x, y : x * y), range(1,10))

result

362880

 

  c.  filter(function,list) #用于筛选

def chr(x): 
    return isinstance(x, str)
    
li = ['a','V','SRW','1',2,None]
chr_li = filter(chr, li)
print chr_li

 

  d.  sorted(list, function) #排序

def reverse_sorted(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    else:
        return 0
        
        
print sorted(range(10),reverse_sorted)

 

15.返回函数

  

def double_F():
    def output():
        print "Out out!"
    return output
    
s = double_F()
s()

  注意:返回函数中出现循环的情况下

def double_F():
    k = []
    for i in range(1,4):
        def f():
            return i * i
        k.append(f)
    return k
    
s1,s2,s3 = double_F()
print s1(),s2(),s3()

return :9 9 9

 

16.匿名函数

  lambda x,y: x+y

 

17.装饰器(Decorator)

  # 在不改变函数的情况为函数添加抬头,结尾等

  定义:

    def log(func):   # 装饰器本身无输入

      @functools.wraps(func)

      def wrapper(*arg, **kw):

        print ""

        return func(*arg, **kw)

      return wrapper

  

    def log(text):  # 装饰器自带输入

      def decorator(func):

        @functools.wraps(func)

        def wrapper(*arg, **kw):

          print ""

          return func(*arg, **kw)

        return wrapper

      return decorator

 

    两种同时:

import functools

def log(text):
    if callable(text):
        @functools.wraps(text) # 输入时问题出在这里!callable()返回True的情况下,关键字text已经变成了func,所以之后必须用text代替习惯用的func
        def wrapper(*arg, **kw):
            print "Now calling:", text.__name__
            run = text(*arg, **kw)
            print "Now end."
            return run
        return wrapper
    else:
        def decorator(func):
            @functools.wraps(func)
            def wrapper(*arg, **kw):
                print "%s ,Now calling:%s" %(text, func.__name__)
                run = func(*arg, **kw)
                print "Now end:"
                return run
            return wrapper
        return decorator
        
@log('execute')
def fact(n):
    re = 1
    while n > 0:
        re = re * n
        n -= 1
    print 'result is: ', re, '\a'
    
fact(5)

 

18. 偏函数

引用: from functools import partial

     partial(max, 10)

 

19. 模块的使用

  标准格式:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
"""

__author__ = ""

  模块的引用和别名:

  import f1 as f2

  作用域:

  __f__: 此类函数不应该直接在外部被引用

 

20. __future__ 函数的调用

  利用__future__ 函数可以在低版本调用高版本的属性

  如:  unicode.literals

>>> from __future__ import unicode_literals
>>> isinstance('xxx', unicode)
True

 

21. 类的特性

  类和实例

  类的封装性

 

22.类的属性

    访问限制

    有些属性可以定义成如下限制访问: __attribution (_attribution 半限制)

 

23.类的继承

    class Grand(object):

      pass

 

    class Parents(Grand):

      pass

  关于多态:在不改变父类的情况下可以增加子类,或者利用函数调用父类的属性

 

24.获取对象信息

    a. type   如: type('abc')    # 可以引用types    type('abc') == types.StringType

    b.isinstance  如:isinstance('abc', str)

    c. dir()  # 部分类似__xxx__的属性可以通过 xxx()调用

    其他:对象信息的获取和处理  hasattr、getattr、setattr

      

class Myobj(object):
    def __len__(self):
            return 100
>>> hasattr(Myobj, '__len__')
True
>>> a = getattr(Myobj, '__len__')
>>> a
<unbound method Myobj.__len__>
>>> a = setattr(Myobj, 's', 4)
>>> hasattr(Myobj, 's')
True

 

25.OOP: __slots__的应用

  a. 在class中动态添加method的方法:

      from types import MethodType

      class_name.func_name = MethodType(func_name, None, class_name)  #此处None是在具体实例中添加method时实例的名字

  b. 在class中限制变量加入的方法:

      class name(object):

        __slots__ = 'name1, name2, ...'

 

26.OOP: property

  @property可以将函数变为属性

  @proname.setter 可以指定属性的限制条件 (setter和property的函数名一致!)

class Name(object):
    @property 
    def pro_name(self): # 变量名
        return self.provalue
        
    @pro_name.setter
    def pro_name(self, value): #设置变量值
        Pass
        return self.provalue = value
        

 

27.多重继承和Mixin

  子类可以继承多个父类, 通常额外获得的类明加后缀Maxin以示区别

  如 : 

class Animal(object):
    pass
    
def lovelyMixin(object)
    pass
    
class Cat(Animal, lovelyMixin)
    pass

 

28.定制类

  a.命名类:  __str__, __repr__

 

29.异常处理

  a.   

try:
    Main
except XXXError, e:
    print '', e 
finally:
    pass

  错误记录:

import logging

except XXXError,e:
    logging.exception(e)

 

30.调试  (assert ; logging; pdb)

  a. logging

import logging
logging.basicConfig(level=logging.DEBUG) # three levels:debug,info,warning,error

def main(s):
    logging.debug('s is %d' %s)
    n = 10 / s
    print n 
    
main(0)

 

  b.assert

def main(s):
    assert s!= 0, 's is zero'
    n = 10 / s
    print n 
    
main(0)

 

  c.pdb

import pdb    # 'n' next 'p'+variable; without set_trace: -m - pdb
def main(s): 
    pdb.set_trace()
    n = 10 / s
    print n 
    
main(0)

 

31.  单元测试

import unittest  # 运行: python -m -unittest filename

def setUp(self):
    print 'setUp..'
        
def tearDown(self):
    print 'tearDown..'
    
class test_try(unittest.TestCase):
    def test_1(self):
        self.assertTrue(1 != 0)
        
    def test_2(self):
        self.assertEquals(True, True)
        
    def test_3(self):
        with self.assertRaises(ZeroDivisionError):
            10 / 0
            

 

32.  文档测试

'''
    Sample test div.
    
    >>> d = div(10, 5)
    >>> d.div()
    2
    
    >>> d = div(10, 0)
    Traceback (most recent call last):
    ...
    ZeroDivisionError: integer division or modulo by zero
'''
if __name__=='__main__':
    import doctest
    doctest.testmod()

 

33.IO编写

  读写文件(with语句):   with open() as f:

                f.read()

  

import codecs # codecs 模块
with codecs.open('', 'r', 'gbk') as f:
    f.read()

 

posted on 2016-09-10 18:57  公子不吃梨  阅读(183)  评论(0)    收藏  举报