What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
上一修订版两侧同时换到之后的修订记录
cs:fundamental:cs61a:week_1 [2023/09/26 03:59] – [Documentation] codingharecs:fundamental:cs61a:week_1 [2023/09/26 09:47] – [Testing] codinghare
行 244: 行 244:
 </code> </code>
 还有一类以 ''#'' 起头的信息被称为 //Comments// 还有一类以 ''#'' 起头的信息被称为 //Comments//
-====Control==== 
 [[https://peps.python.org/pep-0257/|Docstring Conventions]] [[https://peps.python.org/pep-0257/|Docstring Conventions]]
 +====Control statement====
 +===statement===
 +//statement// 与 //expression// 在本质上有不同:
 +  * 我们评估(//evaluate//) expression 
 +  * 我们执行(//execute//)statement
 +//statement// 意味着应用更改:比如赋值,返回等等。//exrepssion// 在被评估的时候也可以被视作 //statement//,但其生成的结果会丢失。比如:
 +<code py>
 +>>> def square(x):
 +        mul(x, x) # Watch out! This call doesn't return a value
 +</code>
 +如果希望应用修改(返回返回值),则需要使用 ''return'' statement:
 +<code py>
 +>>> def square(x):
 +        return mul(x, x)
 +</code>
 +==Compound Statements==
 +结构如下:
 +<code py>
 +<header>:
 +    <statement>
 +    <statement>
 +    ...
 +<separating header>:
 +    <statement>
 +    <statement>
 +    ...
 +...
 +</code>
 +<WRAP center round box 100%>
 +根据上述定义,''def'' 属于 //compound statement//
 +</WRAP>
 +上述的结构可以被视作 //sequence//,也就是该结构总可以分为两个部分:
 +  * 当前的 statement
 +  * 余下的 statement
 +这是一种递归的结构。
 +===Local Assignment===
 +用户自定义的函数是在对应的 local frame 中运行的。local frame 在该函数被调用时创建;函数体中的 ''return'' statement 会起到重定向的作用。函数什么时候结束取决于
 +  * 第一个 ''return'' statement 什么时候被执行
 +  * 返回的值
 +赋值语句可以处于函数内部。任何函数内部的赋值,其绑定信息都存储于local frame,对外部的 name 不造成任何影响。
 +===Conditional statement===
 +<code py>
 +if <expression>:
 +    <suite>
 +elif <expression>:
 +    <suite>
 +else:
 +    <suite>
 +</code>
 +===Iteration===
 +<code py>
 +while <expression>:
 +    <suite>
 +</code>
 +===Testing===
 +==Assertions==
 +python 中可以使用 ''assert'' statement 做验证。如果 ''assert'' 返回的对象为 ''True'',那么什么也不会发生。否则,错误会被抛出:
 +<code py>
 +>>> def fib_test():
 +        assert fib(2) == 1, 'The 2nd Fibonacci number should be 1'
 +        assert fib(3) == 1, 'The 3rd Fibonacci number should be 1'
 +        assert fib(50) == 7778742049, 'Error at the 50th Fibonacci number'
 +</code>
 +==Doctest==
 +//docstring// 中可以包含 test case,用于测试:
 +<code py>
 +>>> def sum_naturals(n):
 +        """Return the sum of the first n natural numbers.
 +
 +        >>> sum_naturals(10)
 +        55
 +        >>> sum_naturals(100)
 +        5050
 +        """
 +        total, k = 0, 1
 +        while k <= n:
 +            total, k = total + k, k + 1
 +        return total
 +        
 +>>> from doctest import testmod
 +>>> testmod()
 +TestResults(failed=0, attempted=2)
 +</code>