跳转至

Statement

652 个字 76 行代码 1 张图片 预计阅读时间 3 分钟

assignment 赋值语句

1.evaluate all expressions to the right of = from left to right

2.bind all names to the left of = to the resulting values in the current frame

#attention the unique syntax of Python
a,b = b+a,a

if

if x<=2760:
   y = 0.538 * x
elif x<=4800:
   y = 0.588 * x
else:
   y = 0.838 * x
  • if之后的行,如果保持相同的缩进,就是这个if的一部分,是当表达式的结果是True,即关系成立的时候,要执行的内容

boolean operators

优先级规则 not>and>or

a26c8031eeb36116320ad0f23883c8c

while

冒号,True 大写

while True:
    x = int(input())
    if x == -1:
        break
    cnt += 1
    s += x

for

python 中有for - else 结构,不要使用

所谓 else 指的是循环正常结束后要执行的代码,

即如果是 bresk 终止循环的情况。else 下方缩进的代码将不执行。

x = int(input())
for k in range(2,x):
  if x%k==0:
    print(f'{x} is compsite')
    break
else:
  print(f'{x} is prime')

异常

try:
     语句块1
except 异常类型1:
     语句块2
except 异常类型2:
     语句块3 

except 异常类型N:
     语句块N+1
except:
     语句块N+2
else:
     语句块N+3
finally:
    语句块N+4  
    
except Exception as n: ##万能捕捉器
  • except 异常类型子句中找对应的异常类型,如果找到的话,执行后面的语句块
  • 如果找不到,则执行except后面的语句块 N+2
  • 如果程序正常执行没有发生异常,则继续执行else后的语句块 N+3
  • 无论异常是否发生,最后都执行finally后面语句块 N+4
  • raise 抛出异常
raise Exception
raise Exception('load overload')

标准异常

异常名称 描述
SystemExit 解释器请求退出
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError ( 或取模 ) ( 所有数据类型 )
KeyboardInterrupt 用户中断执行 ( 通常是输入 ^C)
ImportError 导入模块 / 对象失败
IndexError 序列中没有此索引 (index)
RuntimeError 一般的运行时错误
AttributeError 对象没有这个属性
IOError 输入 / 输出操作失败
OSError 操作系统错误
KeyError 映射中没有这个键
TypeError 对类型无效的操作
ValueError 传入无效的参数
##一次捕捉多个异常
try:
    x,y = map(int, input('输入两个整数:').split())
    print(x/y)
except (ZeroDivisionError, TypeError, NameError):
    print('输入错误')

异常变量

  • 有时需要除了异常类型以外其他的异常细节:
except Exception as name

再抛异常

  • 如果需要在except子句中再次抛出刚捕捉到的异常:
def calc(expr):
    try:
        return eval(expr)
    except ZeroDivisionError:
        print('divided by zero is illegal!')
        raise

自定义异常

  • 根据自己的目的可以自己定义异常类型
  • 异常类需要从Exception类继承
class AgeOutofRange(Exception):
    pass

Testing

断言

  • 通常写在本文件或者同文件夹下的_test.py
  • 函数是写出来给别的程序员用的
  • 检查函数接口的数据错误
  • 函数入口应该对传入的参数值做检查
  • assert <条件>, <失败提示文字>
def divide(a, b):
    assert b!=0, 'Divided by zero'
    return a/b

Doctest

placing simple tests directly in docstring of a function

def add(a, b):
    """
    返回两个数的和。

    示例:
    >>> add(2, 3)
    5
    >>> add(-1, 5)
    4
    """
    return a + b
import doctest

if __name__ == '__main__':
    doctest.testmod()
from doctest import run_docstring_examples
run_docstring_examples(sum_naturals, globals(), True)
python3 -m doctest -v <source_file>

Doctest 的优点是它与文档紧密结合,测试用例直接嵌入在文档字符串中,使得测试更加直观和易于维护。它还可以作为文档的一部分,提供实例和用法示例。

然而,Doctest 适用于简单的测试场景,对于复杂的测试需求,如测试边界条件、异常处理等,通常需要使用其他测试框架,如 unittestpytest