zoukankan      html  css  js  c++  java
  • 《可爱的python》读书笔记

    实例故事

    Just use it!don't learn!
    刚刚够用是王道。
    明确你的问题,当问题真正的被定义时,问题已经解决了一半。
    不要先想着创造--python是自足的
    不断否定自己,但不能否定目标
    没有完美的软件,够用就已经算完美了
    你碰到的99%的问题别人都遇到过,所以找到别人解决相似代码。
    字符编码使用别人写好的库(如:chardet)
    注释使用 '''@param  args :..'''
    将界面放在web上,少用gui。
    可以用flash帮助展示python。
    python自带压缩模块
    想象力才是pythoner唯一的界限。
    在Python 世界,处理XML ,其中ElementTree最好用,支持 Xpath 的搜索。
    使用 Python 多年也不敢说对Python 的方方面面都了解并可以自由运用
     
    Python学习作弊条

    环境篇

    python自省函式有:
    help()
    dir()
    type()
    id()引用对象的id
    hasattr()和getattr()分别判断对象是否有某个属性及获得某个属性值。 
    callable()判断对象是否可以被调用。 
    isinstance()可以确认某个变量是否有某种类型。 
     
    若在该脚本中导入了另一个模块,这个模块会产生.pyc 字节码文件。 
     
    #!/usr/bin/python这句话表示该脚本文件用哪个解释器来执行,注意指定python的版本。
     
    语法篇
    函数没有返回值的时候就返回None。
     
    None,0,"",(),[],{}都被当做False,如果__nonzero__()或__len__()返回0或者False,则其实例也被当做False。
     
    普通整数位机器位数长,超过这个就为长整数,长整数几乎没有限制
     
    list的内建函数:
    pop(i) ,返回并删除第i个元素,默认为最后一个
    reverse() , 反转序列
    extend(L)   等同于+=
    index(x) 返回第一次出现x的位置,没有就报错。
    count(x) 出现x的次数
    sort() 排序
    len(list) 长度
    del list(i) 删除第i+1个变量
     
    set 无序,不重复,类似数学中的集合
    dict 有方法:copy,fromkeys([1,2],0)={1:0,2:0},popitem()
     
    lambda为匿名函数式,为没有名字的函数式,lambda 的滥用会严重影响代码可读性
    lambda arg1, arg2 ... : expression 
     
    闭包其实就是通常所说的函式嵌套。在嵌套函式的内部函式对象本身包含了外部函式对
    象的名称空间。
     
    python没有switch方法,代替的是
            1. if...elif...  
            2.commands = {'-e':walk_cd,'-f':search_cd}
     
    python的三元表达式:
            1.return a if a!=None else "hehe" 
            2.return a!=None and a or "hehe"
     
    is用来比较两个变量是否指向同一内存地址(也就是两个变量是否等价) 而 == 是用来比较两个变量是否逻辑相等 
     
    python 的构造方法叫做__init__,析构方法叫做__del__,查看属性叫做__dict__
     
    try子句经由 break 或return 退出也一样会执行finally 子句。
     
    try...except 可以带一个else 子句,该子句只能出现在所有 except 子句之后。
     
    raise 函式的第一个参数是异常名,第二个是这个异常的实例,它存储在instance.args 的参数中。和except NameError, a:  中的第二个参数意思差不多。 
     
    map+filter+reduce+lambda+List Comprehensions:
    1.map
    def foo(x, y):  return x*y
    map(foo, range(10), range(10)) 
    传入的值为(0,0),(1,1),(2,2)...(9,9) ,不足部分None。
            2.filter
            def foo(x): return x>10
            filter(foo,range(20))  --> 11,12...19
            传入的方法是过滤条件,返回真才有效,如果foo为None,则返回第二个参数中所有的真值
            3.reduce
            foo(perm,x)
            reduce(foo,range(10),1) 第三个参数是perm的初始值,不传为第二个参数的第一个值
            4.lambda
                    lambda x:x**2
            5.List Comprehensions
                    print [x**2 for x in range(10)]
    优先使用列表推导式5.举例:
    l=range(12)
    print [x*y if x>10 else x+y for x in l if x>9 for y in l if y>9]
     
    模块篇
    os模块
    os.path.split 
    拆分路径,返回一个 tuple,
    第一个元素是文件所在路径,
    第二个元素是对应文件名。
    "/one/two/three" : "('/one/two', 'three')" 
    "/one/two/three/" : "('/one/two/three', '')" 
    "/" : "('/', '')" 
    "." : "('', '.')" 
    "" : "('', '')"  
    os.path.basename
    获取某路径对应的文件名。
    "/one/two/three" : "three" 
    "/one/two/three/" : "" 
    "/" : "" 
    "." : "." 
    "" : ""
    os.path.dirname 只获取某路径对应的路径,
    不含文件名
    "/one/two/three" : "/one/two" 
    "/one/two/three/" : "/one/two/three" 
    "/" : "/" 
    "." : "" 
    "" : ""
    os.path.splitext  将路径、文件名、扩展名分开,
    并以一个tuple的形式返回
    "filename.txt" : ('filename', '.txt') 
    "filename" : ('filename', '') 
    "/path/to/filename.txt" : ('/path/to/filename', '.txt') 
    "/" : ('/', '') 
    "" : ('', '')
    os.path.commonprefix
    在一组路径中,
    找到一个共同的前缀
    ['/one/two/three/four', 
    '/one/two/threefold', 
    '/one/two/three/'] 
    /one/two/three 
    os.path.join 
    组合一些零散的字符串,
    生成一个安全的路径表示
    拼接从/ 开始的
    ('one', 'two', 'three') : one/two/three 
    ('/', 'one', 'two', 'three') : /one/two/three 
    ('/one', '/two', '/three') : /three 
    os.path.expanduser  寻找用户的home目录
    ~ : /home/shengyan 
    ~root : /root 
    ~mysql : /var/lib/mysql
    os.path.normpath  处理不规则路径字符串,
    将其转化为正常的路径。
    one//two//three : one/two/three 
    one/./two/./three : one/two/three 
    one/../one/two/three : one/two/three 
    os.path.abspath 将相对路径转换为绝对路径
    "." : "/home/shengyan/LovelyPython/PCS/pcs-200" 
    ".." : "/home/shengyan/LovelyPython/PCS" 
    一些小模块
    cmd 
    命令行接口
     
    chardet
    字符编码自动检测模块
     
    epydoc
    从源码注释中生成各种格式文档的工具
     
    ConfigParser 处理ini 格式的配置文件  
    内置函数
     
    enumerate 遍历中同时需要序号 for index,obj in enumerate(olist)
    map  组合 map(lambda x:x*2,[1,2,3,4,5]) ->  [2, 4, 6, 8, 10] 
    filter 过滤 filter(lambda x:x>3,[1,2,3,4,5]) ->  [4, 5] 
    zip  同时循环两个一样长的数组 for x,y in zip([1,2,3],[4,5,6]): 
    dir  一个变量的所有方法和属性  print dir(s) 
    reduce 叠加运算  
     
    Python 是支持多线程的,thread 是比较底层的模块,threading 是thread 的包装。 Python 对线程的支持还不够完善,不能利用多 CPU ,不建议使用 thread 模块,更高级别的threading 模块更为先进,对线程的支持更为完善,而且使用thread 模块里的属性有可能会与threading 冲突。
     
    线程简单使用:
    mutex = threading.Lock() #被定义为全局使用,否则可传入fun
    mutex.acquire() 
    mutex.release() 
    t = threading.Thread(target=fun, args=(10,))
    t.start()
    t.join() #等待
    threading.currentThread().getName()
    线程类中使用:
    class Test(threading.Thread): 
        def __init__(self, num): 
            threading.Thread.__init__(self) 
     
            def run(self): 
                globalmutex 
                mutex.acquire() 
                print 100
                mutex.release() 
     
    有一个解析ini的文件,dict4Ini
     
    pickle 的文档清晰地表明它不提供安全保证,所以用cpickle
     
    shutil:
            copyfile() ,copy()  ,copy2() ,copymode()  ,copystat()  ,copytree() ,rmtree()  ,move()  
     
    time:
            time()当前时间,
            ctime()当前方便阅读时间
            clock(),cpu时钟,常用作性能测试,反映的是程序运行的真实时间
            gmtime() 返回当前的UTC时间,返回struct_time
            localtime() 返回当前时间域的当前时间,返回struct_time
            mktime()接收struct_time(tm_year=2013,tm_mon=1...tm_isdst=0) 参数并将其转化为浮点型
            strptime() 和strftime() 可以使struct_time 和时间值字符串相互转化
            设置时区:        os.environ.get('TZ', '(not set)')  ,os.environ['TZ'] = ‘US’
     
    random
            random.randrange(20, 201, 2):随机生成 20 ~200 的偶数:
            random.random()不能传递参数,它只能生成 0 ~1 的浮点数。
            random.uniform(),可传递参数,生成随机浮点数。 
            random.choice() 生成随机字符。random.choice('abcdefghijklmnopqrstuvwxyz')
            random.sample() 生成随机字符串。 
            random.shuffle([]) 打乱排序。 直接修改了list的值
     
    socket:
            创建Socket 对象、绑定端口、监听连接、接受请求、数据收发、关闭端口。 
            socket.socket() 、socket.bind() 、socket.listen() 、socket.accept() 、socket.sendall()\socket.recv() 、socket.close() 。 ..

    框架篇

    MoinMoin是一个基于Python 环境的wiki 引擎程序
    Twisted  也是老牌社区的作品,关注网络应用底层支持,支持几乎所有网络协议,
    框架从来不是最重要的,最重要的应该是我们使用 Python  的决心和Pythonic  带来的愉悦感,它促使我们可以高效地再生出更加好的工具来! 

    友邻篇

    重构是必要的浪费 
    首先推荐一本专门的好书:《重构——改善既有代码的设计》,
    什么时候不应该进行重构? 
    1.  现有的程序无法运行,此时应该是重写程序,而不是重构。 
    2.  程序到了最后的交付期限。

    读后感

    不错。推荐python刚入门的朋友看一看。
    书强调实际使用,并且很有连续性,但也由于这样,所以知识点上的组织上有些乱。
    内容简单,知识点全面,看着很轻松,同时会引起很多思考。
    对于自学python,担心在学习中遗漏了什么,就将这本书看一遍,非常有用。
     
  • 相关阅读:
    常用、好用的资源管理器收藏
    单片机延时函数整理——针对裸机
    ad7793的调试记录
    《80c51单片机实用技术》邹久朋学习笔记
    使用串口工具(volt++ vofa)伏特加来实时打印波形
    golang从简单的即时聊天来看架构演变
    无敌简单快速的文件服务器sgfs
    到底是否应该使用“微服务架构”?
    你所学习的设计模式到底有什么用?到底怎么用?
    浅入深出ETCD之【raft原理】
  • 原文地址:https://www.cnblogs.com/wanself/p/2871617.html
Copyright © 2011-2022 走看看