----------------------------------------------------------------------------------------------------------------------
良好的编程习惯:
----------------------------------------------------------------------------------------------------------------------
1 在函数定义之间放入一个空行,以便区分函数,并增强程序的可读性。
2 不建议为传给函数的参数和函数定义中的对应参数使用相同的名称。
3 选择优意义的函数名和参数名有利于增强程序的可读性,还可以减少注释量。这样写程序可获得“自动文档化的代码”。
4 避免变量名遮蔽外层作用域中的名称,为此,要注意避免标示符与内建命名空间中的标识符同名,并避免在程序中使用重复的标识符。
5 使用默认参数可简化函数调用的编写,但显式制定所有参数会使程序更易读。
----------------------------------------------------------------------------------------------------------------------
软件工程知识:
----------------------------------------------------------------------------------------------------------------------
1 避免重复劳动,尽量使用标准库模块函数,不要写新的函数。这样可加快开发进度,并增强可靠性,因为 您使用的是经过良好设计和测试的代码。
2 每个函数应该只限执行单一的、良好定义的任务,函数名应清楚的描述那个任务,这样有利于提升软件的重用性。
3 如实在想不出能准确表达函数作用的名称,就表明函数可能执行了太多分散的任务。通常,最好将这种函数分解成多个更小的函数。
4 在包含许多函数的程序中,主要部分应该是对函数的一系列调用,再由那些函数世纪执行程序的大量工作。
5 函数尽量不要超过编辑器窗口的宽度。不管函数有多长,都只应很好的执行一项任务。小函数有利于提升软件的重用性。
6 程学应该写为若干小函数的集合,这是程序更以编写、调试、维护和修改。
7 如函数需要大量参数,表明执行的任务可能过多。请考虑将函数分解成更小的函数,令其执行单单独的任务。函数的def语句及可能不超过一行。
8 采用递归方式能解决的任何问题也可采用重复方式(非递归方式)解决。如果递归方式能够更自然的放映为题,并使程序已于理解和调试,通常应该首选递归方式。通常,只需要几行代码就可实现一个递归方式。重复方式则相反,它需要大量的代码来实现,选择递归的另一个原因是重复方案不直观。
9 采用清晰的、层次清楚地方式对程序进行“函数化”,有助于保证良好的软件工程,大性能上要付出一定的代价。
----------------------------------------------------------------------------------------------------------------------
测试和调试提示:
----------------------------------------------------------------------------------------------------------------------
1 和在整个程序中更新重复的代码相比,更新函数显然更容易。
2 即使绝对程序没有bug,也应在if/elif/else机构中提交一个默认的else条件。
3 通常应避免将所有标识符从一个模块导入另一个模块的命名空间,只有可信来源提供的模块,才可考虑这种导入方法。在可信模块的文档中,应清楚说明可用这样的语句导入模块。
----------------------------------------------------------------------------------------------------------------------
移植性提示:
----------------------------------------------------------------------------------------------------------------------
1 使用核心Python模块中的函数,通常可使程序更方便移植。
----------------------------------------------------------------------------------------------------------------------
性能提示:
----------------------------------------------------------------------------------------------------------------------
1 不要试图改写现成的模块函数使其更高效。这些函数已非常完美了。
2 一般不要编写会造成调用次数以指数级增长的“斐式”递归程序。
3 避免在对性能要求较高的时候使用递归。递归调用费时费力。
4 一个由多个函数构成的程序—与没有任何函数的一体式程序相比--会产生大量的函数调用,这些调用会占用大量的处理器时间和内窜,但另一方面,一体式程序的编程、测试、调试和维护都比较复杂。
----------------------------------------------------------------------------------------------------------------------
常见编程错误:
----------------------------------------------------------------------------------------------------------------------
1 使用math模块的函数时,忘记导入math模块属于运行时错误。只有导入模块,才能使用其中的函数和变量。
2 用import语句导入模块后,如果忘记为它的函数附加模块名前缀,就会造成运行时错误。
3 忘记在函数参数列表后添加冒号(:)是语法错误
4 函数调用中的圆括号是Python运算符,使他导致了函数的调用。如果遗漏圆括号,寒暑不会被调用。通常,控制权会转交给语句。如:print语句包含一个无圆括号的函数调用,会显示函数的内存位置。如用户希望将函数调用的结果指派给函数,没有圆括号的函数调用就会将函数本身同变量邦定。
5 函数主体没有缩进是语法错误。
6 用局部命名空间中的一个标识符遮蔽模块或内建命名空间中的一个标识符,可能一起逻辑错误。
7 如果遗漏基本条件,或错误编写地跪调用,就会造成最终无法汇聚于基本条件,从而导致无穷第归,最终耗尽内存,这类似于重复方案中的无限循环问题。
8 让用于解决递归算法的一个函数调用自身(无论直接还是间接)是逻辑错误。
9 默认参数必须全部靠右。省略非靠右的参数是语法错误。
10 在函数调用中错误放置或者遗漏非关键字参数的值是错误的。
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------