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)
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()
浙公网安备 33010602011771号