前言
终于复习完了基础理论,现在进入python阶段。其实python如果你已经学习过了,那么此处复习的就应该是那些经常忘记,比较难写的函数库名和面试题等。
注意,一旦你简历中写了精通python,那么面试官不可能问你简单的常见的,比如列表的增删改查这种。问,就一定问一些比较偏门冷门的,所以这里进行列举:
常见易忘题:
我敢打赌你不百度的情况下,答不对全部!
1时间格式化输出
datetime.strptime('17/Sep/2012:11:40:00','%d/%b/%Y:%H:%M:%S').strftime('%Y%m%d-%H%M%S') %y 两位数的年份表示(00-99) %Y 四位数的年份表示(0000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00-59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
2动态给类生成类函数
def gen_unit_test(self, test_name, function): setattr(self, 'test_{}'.format(test_name), function)
3获取命令行返回值
x = subprocess.check_output('adb shell cat /system/build.prop | grep "product"',shell=True) print x.split('\r\n')
4永久存储模块
pickle.dump() 存 pickle.load() 取
5正则
符号: | 是或的意思 . 是充当任意一个字符 ^ 是字符串的开始 $ 是字符串的结尾 * 表达0次以上 + 表达1次以上 ? 表达0,1 {} 表达次数 [] 表达内部任意一个字符 [0-9] 表达0~9 [^] 表达不包含 +? ?紧贴前面+是代表非贪婪模式,取得越少越好。 () 把正则表达式分成子组 \d 匹配任何一个单个数字 \D 匹配任何一个非数字 \w 匹配任何数字或字母 \W 匹配任何非数字或字母的字符 \s 任何空白字符 \S 任何非空白字符 \b 匹配单词边界 \nn 匹配已经保存的子组 \c 逐一匹配特殊字符c ,即取消它的特殊含义,按字面匹配 \A 匹配字符串的起始 \Z 匹配字符串的结束 方法: match() :从开始找 search():从任意位置找 group() :返回全部对象 groups():返回包含全部子组的元组 findall() :返回一个列表,非重复的 finditer() :返回迭代器,可重复 split() :根据正则中的分隔符吧字符串分隔为一个列表,返回此列表,可设置最大分隔次数 sub(正则,新,旧,最大次数) :把所有符合正则的字符串替换成新的。 subn() :和sub一样,但是多返回中可包含表示替换次数的数值 例子: import re m=re.search('foo','foo') print m.group()
6线程
守护线程:子线程名称.setDemo(True) .start() 线程开始执行 .run() 定义线程功能的函数 .join(timeout=None) 程序挂起,直到线程结束;最多阻塞timeout秒 .getName() 返回线程的名字 .setName() 设置线程的名字 .isAlive() 布尔标志,表示这个线程是否还在运行中 .isDaemon() 返回线程的daemon标志 .setDaemon(daemonic) 把线程的daemon标志设为daemonic(一定要在调用start()函数前调用) 例子: import threading def music(): for i in range(100): print i time.sleep(1) if __name__ == '__main__': t = threading.Thread(target=music) t.setDaemon(True) t.start() time.sleep(3) print "all over %s" %ctime()
7运行单独python代码
exec """ 代码组""" exec ".py" 可以运行python文件对象" 因为运行一次之后光标就在文件最后一行,需要f.seek(0) 光标调回到最初,才能再次运行
8多行代码顺序打包运行
many_code = compile(""" for i in rang(10): print "hello" ""","","exec") exec many_code
9判断属性
if (123)==int: if isinstance(123,int):
10装饰器
关于装饰器: 如果下面有类的话,第一层接收的是方法本身,第二次自动接收类,返回需要返回 方法本身(类) def log(func): print func.__name__,"1" def ww(a): print a return func(a) return ww @log def test_zzz(self): print "haha"