python使用心得
博客专区 > paul2011 的博客 > 博客详情
python使用心得
paul2011 发表于3年前
python使用心得
  • 发表于 3年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 3

移动开发云端新模式探索实践 >>>   

摘要: 不求甚解,互相学习
  • ipython 自动补全,方便调试的交互式命令行; ipython -i xx.py 执行后进入命令行;
  • pip 是easy-install的改进版,用法类似,都是python自带的管理工具;python3自带pip;
  • python是能看到源码的脚本语言
  • python是跨平台的,一处编码,到处运行~
  • python的解释器有很多,官网的是Cpython,顾名思义,使用C语言写的;另Jyhton和IronPython可以把python代码编译成java和.net的字节码
  • dict查询速度快,原理是dict内部能根据key计算出value的内存地址!相比list查找速度很快,但会占用大量内存空间!
  • dict.get(a[,b]); if a not in dict,return b [default None],dict.setdefault(key,value)
  • python基本数据类型: int,float;boolen;str; None;
  • 数据结构:list;tuple;dict;set
  • 不可变对象:str,tuple
  • 列表生成式[x*x for x in range(10) if x%2]
  • @classmethod和@staticmethod都可以通过类访问,但后者不能被子类覆写!

执行语句(每次运行前都会编译成字节码,耗时耗力,可以先编译    cpl=compile(str);eval(cpl);    )

  • eval(str,globals.locals);
  • exec str [in globals,locals];
  • execfile(str,globals.locals);

闭包函数的变量绑定机制:

内部函数的常量是在调用时才会绑定,这事要注意 循环赋值生产函数,比如

def gen_func():
    """
     结果很诡异
    """
    return [lambda x:x*i for i in range(4)]

print [func(2) for func in gen_func()]   # [6,6,6,6]

性能问题

  • 内置测时模块 timeit; timeit.timeit和timeit.repeat区别在于repeart多一参数,repeat=重复次数;还封装了TImer class,包含上诉2个方法
  • 也可以自己实现上下文管理, 实现__entry__;__exit__;即可;
  •  

生成器

  • 注意send可以直接返回生成器!演示代码如下:
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

def send_when_iterate(max):
    """
    迭代中send,会直接返回到迭代器
    eg:
    send_when_iterate(5)
    >>5,2,1,0
    
    :param max: 最大值
    :return: None
    """
    def countdown(max):
        print 'Count down from', max
        while max>=0:
            newvalue = yield max
            # yield max
            print 'in: ', max
            # max -= 1
            if newvalue is not None:
                max = newvalue
            else:
                max -= 1
    
    c = countdown(5)
    for x in c:  # 调用c.next()
        print x
        if x == 5:
            c.send(3)  # 直接返回到迭代器,继续执行!
        print 'out2: ', x
  • 函数返回值是yield; (i for i in range(10)); 2种生成器
  • 迭代完毕后,触发StopIteration异常
  • close()手动关闭生成器;
  • next()下一个元素,取得后不可逆
  • list(generator)遍历完generator,此时next()会触发StopIteration

python2.x 坑:

  • 单个元组(1,)
  • json dumps-loads后,int型会转化为str
  •  
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 3
博文 27
码字总数 13070
评论 (3)
paul2011
one genius: https://github.com/rainyear?tab=repositories
paul2011
包一定要有__init__.py文件,空文件也行; 不然导入包内模块会报ImportError;
避免相互调用! 通过业务分层解决: meta(DAL) -> srv->web_srv
paul2011
DAL(data access layer)-BLL(business logic layer)-USL(user show layer)
×
paul2011
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: