美文网首页
EffectivePython-函数

EffectivePython-函数

作者: longwz | 来源:发表于2017-03-30 01:19 被阅读18次
    1. 尽量用异常来表示特殊情况,而不是返回None
      None返回值 无法区分正常情况和特殊情况
      解决方式:
    2. 返回一个二元组,其中一个表示成功与否的状态,两一个值为功能值
    3. 直接把异常抛给调用者来处理。
    4. 了解如何在闭包里使用外围作用域中的变量
      python3:使用关键字nonlocal修饰变量名,在变量赋值时,自动会在上层作用域查找。
      python2:不支持nonlocal关键字,使用变量的引用。
    在表达式引用变量是,解释器解析作用域的顺序:
      1. 当前函数的作用域 
      2. 任何外围作用域(当前函数的其他函数)
      3. 包含当前代码的模块的作用域
      4. 内置作用域(包含len、str等函数的作用域)
    
    1. 考虑用生成器来代替直接返回列表的函数
      当列表长度不可预知或者比较长的时候,内存的压力会非常大。而生成器刚好弥补了这个问题。
      调用生成器时,生成器不会运行,只是返回一个迭代器。只有调用next(generator)时,迭代器才会吧生成器推到下一个yield表达式处。
    2. 小心迭代器作为参数
      因为迭代器只产生一轮结果,就会停止,如果多次使用迭代器,再第二次后的此参数将为空列表或者其他值。所以有迭代器的参数,首先要把迭代器的结果先拷贝一份。
    3. 用数量可变的位置参数减少视觉杂讯
      *args(位置参数)会带来两个问题:
    4. 变长参数在传给函数时,需要先转为元组,(a = [1,2,3]->*a)如果使用此方式处理一个生成器,需要考虑内存占用情况。
    5. 会给重构带来一定麻烦,比如新增一个函数参数。
    6. 用关键字参数来表达可选的行为
    关键字参数规则:
      1. 传参的顺序不限制,也可以混合(某些使用关键字参数传参,某些不使用)
      2. 位置参数必须在关键字参数之前
      3. 每个参数只能一次
    
    1. 用None和文档字符串来描述动态默认值的参数
      代码模块在加载的时候,参数的默认值就固定了。如果想使用动态的默认值:使用None,并用文档字符串说明。
    def some_func(par=None):
            #参数par:默认值为123
            par = 123 if par == None else par
    
    1. 用只能以关键字形式指定的参数来确保代码明晰
    2. python3语法:定义只能以关键字形式来指定参数的函数。
    def some_func(number, *, default=0)
    

    上例中,调用some_func函数,如果想传default参数,必须使用some_func(100, default=1)

    1. python2方式:使用**kwargs的方式。

    相关文章

      网友评论

          本文标题:EffectivePython-函数

          本文链接:https://www.haomeiwen.com/subject/omquottx.html