dw设计一个简单网站,学院评估 网站建设整改,网站背景图片代码,网站怎么才能被百度收录一、函数参数与返回值基础知识
1、不要使用可变类型#xff08;list等#xff09;作为参数默认值#xff0c;用None来代替。 参数默认值只会在函数定义阶段被创建一次#xff0c;之后无论创建多少次#xff0c;函数内拿到的默认值都是同一个对象#xff0c;为规避这个问…一、函数参数与返回值基础知识
1、不要使用可变类型list等作为参数默认值用None来代替。 参数默认值只会在函数定义阶段被创建一次之后无论创建多少次函数内拿到的默认值都是同一个对象为规避这个问题一般会用None来代替可变默认类型对象。 2、使用标记对象可以严格区分函数调用时是否提供了某个参数。 所谓标记对象是专门定义一个独一无二的变量类型当用户调用函数确实没有传递某个参数时、默认值会变成这个标记对象那么我们就可以知道服务到底有没有传这个变量了、而不是仅仅通过None来判断。 3、定义仅限关键字参数可以强制要求调用方提供参数名提升可读性。 4、函数应当拥有稳定的返回类型不要返回多种类型。 5、适合返回None的情况——操作类函数、查询类型函数中表示意料之外的缺失值。 6、在执行失败时相比返回None直接抛出异常更合适。 7、如果提前返回结果可以提升可读性就提前返回不要去追求所谓的“单一出口”。
二、代码可维护性技巧
1、不要编写太长的函数虽然长度没有强制标准但65行是一个危险的信号。 2、圈复杂度是评估函数复杂程度的常用指标一般超过10的函数都需要重构。 3、抽象与分层思想可以帮助我们更好地构建与管理复杂的系统。 4、同一个函数内的代码应该处于同一抽象级别。 简单来说按照职能、数据流、业务流进行分级分类逐一递进然后做模块和函数的抽象与划分不要一股脑都写在一起。 比方说通过页面查询后端数据就可以分解成接口View层、请求处理与参数校验层以及数据查询抽象Data层。 三、函数与状态
1、没有副作用的无状态纯函数比较易于理解、维护但大多数时候“状态”不可避免。 2、避免使用全局变量给函数增加状态。 3、当函数状态较为简单时可以使用闭包技巧。 所谓闭包技巧就是在函数内再定义一个函数而后使用nonlocal来对外层函数的状态记录变量进行更新举例 def counter():value 0def _counter():# nonlocal 用来标注变量来自上层作用域如果不标明内层函数将无法直接的修改外层函数变量nonlocal valuevalue 1return valuereturn _counter c counter()c()
1c()
2c2 counter()c2()
14、当函数需要较为复杂的状态管理时建议定义类来管理状态。
四、语言机制对函数的影响
1、functools.partial()可以用来快速构建偏函数。 2、functools.lru_cache()可以用来给函数添加缓存。 3、比起map和filter列表推导式的可读性更强。 4、lambda函数知识一种语法糖可以使用operator模块等方式来替代它。 5、Python语言里的递归限制较多可以的话请尽量使用循环来替代。 参考内容《Python工匠——案例、技巧与工程实践》