2022年Python良好编程习惯 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年Python良好编程习惯 .pdf》由会员分享,可在线阅读,更多相关《2022年Python良好编程习惯 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python 良好编程习惯如果进行的是简单的处理,请使用字符串方法, 这样可避免复杂的正则表达式所带来的错误,并保证程序的可读性。在原始字符串末尾使用反斜杠是语法错误。正则表达式的模式字符串中常常包含反斜杠字符。使用原始字符串来创建模式,可以避免对其中每个反斜杠进行转义的必要,使模式字符串更容易理解。 说明:原始字符串(Raw String),也就是在字符串之前加上字符前缀r 后创建的一个字符串。通常,如果在字符串中出现,Python 会把它视为转义字符,并试图用正确的转义序列替换元字符及其后续字符。但是,如果元字符出现在一个原始字符串中,Python 不会把它解释成转义字符,而是将其视为字面
2、意义的反斜杠字符。例如,Python 会将 n 解释成换行符,但将rn解释成两个字符- 一个反斜杠和一个n。 用函数式编程语言(比如说Scheme )写的程序可以反映出数学表达式的结构;数学表达式是由若干函数字符串组成的,其中的每一个都能计算出一个结果并且不产生任何副作用。同样的函数用同样的参数去调用就会产生同样的结果,这和调用时的上下文是无关的。用这样的方法可以将我们的代码优雅地结构化(并且一定程度上也起到了简化的效果)。Python编程语言拥有所有让它在函数式编程(FP )上有优势的特性。在这篇文章中,我们将从“Pythonic ”的角度来看一下FP中的一些有趣的思想如高阶函数、闭包、la
3、mbda 以及柯里化等等。什么是函数式编程?作为程序的一部分,我们所写的函数只是在表面上和数学函数类似。比方说我们写这么一个函数:int current_balance = 100; int withdraw(int w) current_balance = current_balance - w; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - return current_balance; 我们调用一次“ withdraw(
4、10) ”之后90 这个值将会被返回。再调用一次“withdraw(10) ”则返回 80。如果“ withdraw ”是一个“纯”数学函数的话,那么两次调用应该返回同样的值,因为我们传给它的参数值是一样的。而我们的程序则“记住”了前次的调用(它有“状态”)然后每次都返回一个新的值。一个如下的数学方程:y = f(a) + g(b) + f(a) 有一个很好的属性就是它可以被化简为:y = 2*f(a) + g(b) 事实上如果有一个计算机程序是由一组会修改全面变量的函数构成的话,我们是无法对它进行这样化简的。 相比于生成一个数学证明,验证一个计算机程序的正确性更像是一个探索各种假设分析的情境
5、的过程。“赋值”操作符也带来了些问题。让我们简单地看一个计算阶乘的循环:# Compute factorial of n int f = 1, n = 5; while (n 0) f = f * n; n = n - 1; return f; 我们会犯的一个常见的错误就是在循环体内交换两个语句的顺序。因为赋值操作符改变了它左边的符号的值,所以这让我们在考虑在我们的程序中每一个动作的顺序时需要格外的小心。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - -
6、- - - - - - 函数式编程的范式鼓励我们把程序结构化成一系列“纯”的函数,这些函数没有全局的状态也不使用赋值操作符(注意这并不是所有情况下都可行的,很显然一个银行的系统就需要“记住”很多东西) 。 函数式编程人员使用递归的函数调用(循环可以当成一种特殊的递归,于是特定的循环结构“ while ”和“ for ”也就不需要了)来产生重复性的行为。函数则成为了我们的“一等公民”,比方说, 它们可以被当成参数传给另一个函数,也可以被别的函数返回,这就促成了我们称之为“高阶函数”的产生。当和“闭包”这个思想结合在一起的时候,这就成为了一个很强大的思想,它可以很简单地捕获很多复杂的可计算模式。递
7、归表示Python 中定义一个递归函数没什么了不起的。这里是一个用Python 写的经典阶乘函数:def fact(n): if (n = 0): return 1 return n * fact(n - 1) 作为一等公民对象的函数让我们在Python 的命令行中定义两个函数,然后来做些实验: def sqr(x): return x*x . def cube(x): return x*x*x . sqr a = sqr, cube a0(2) def compose(f, g): return f(g(x) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
8、- - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - . compose(sqr, cube, 2) 64 我们先将两个函数存到数组中,然后用“ a02”的方式来调用“ sqr ”。接着我们又定义一个叫“ compose ”的函数, 然后将“ sqr ”和“ cube”这两个函数作为参数传给它们并进行调用。注意这边并没有任何特殊的记号,我们操作函数时就好像它们是像数组和数字之类的对象一样。高阶函数的威力Structure and Interpretation of Computer Programs,这本由Abel
9、son和 Sussman写的传奇般的“指南书”中详细地描述了高阶函数的作用。一个“函数” (或子程序、辅程序、过程)被认为是一种捕获模式的机制。如果我们有如下形式的语句a*a*a b*b*b c*c*c . 我们可以想到要定义一个叫“cube” (立方)的函数来捕获这种模式的本质并给它一个名字。将函数当成参数传给别的函数的这种能力拓宽了这种“模式捕获”机制的领域。让我们来看一个简单的函数,叫“ sum ”:def sum(a, b): if (a b): return 0 else: return a + sum(a+1, b) 这个函数将从“ a”到“ b”的所有数字进行累加。我们尝试着拓宽
10、这个函数的领域,让它具有操作任意序列的能力,比如说:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 1/(1*3) + 1/(5*7) + 1/(9*11) + . 我们发现到上面的序列和下面这个:1 + 2 + 3 + 4 + . 有着相似之处,即它们都是“求和”。我们想象一个变量“a”从1 变到 2,2 变到 3,然后一直这么做下去。这种从1 到 2 的变化可以用一个函数来捕获(就是一个简单的“加1”函数)。在第一个序列中,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Python良好编程习惯 2022 Python 良好 编程 习惯
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内