待办事项清单
python
  简单程序
    标识符
      含义
        表示变量或操作名称
      要求
        必须以字母或下划线“_”开头
        后跟字母、数字与下划线
    eval
      作用
        将input（‘字符串’）获取的字符串解析为表达式并求值
      例
        m=eval(input(‘请输入整数1:’))
        n=eval(input(‘请输入整数2:’))
        print(‘m和n的差是：’,eval(m)-eval(n))
    Unicode编码值
      ‘A’65 ‘a’97
      ‘B’66 ‘b’98
      ‘C’67 ‘c’99
      ‘/‘47 ‘+’43
      ‘ ’32
    数据输入与输出
      输入函数
        变量=input（‘字符串‘）
      输出函数
        print（）
        sep
          例(默认之间空格分隔)
            print("hello","wold")
            hello wold
          例1(让之间有链接符)
            print("hello","wold",sep="-")
            hello-wold
          例2(紧密相连)
            print("hello","wold",sep="")
            hellowold
        end
          例1(自动换行)
            >>>print(1,2,3,4)
            >>>print(5,6,7,8)
            1 2 3 4
            5 6 7 8
          例2(不换行)
            >>>print(1,2,3,4,end="")
            >>>print(5,6,7,8)
            1 2 3 45 6 7 8
          例3(换行)
            >>>print(1,2,3,4,end="\n")
            >>>print(5,6,7,8)
            1 2 3 4
            5 6 7 8
    变量与赋值语句
      变量的赋值
        语法
          变量=表达式
          例：x=100
      链式赋值语句
        用于多个变量同时赋予相同的值
        例1
          >>>x=y=z=200
          >>>print(x,y,z)
          200 200 200
        例2
          a,b=b,a（交换二者的值）
      解包赋值语句
        例
          >>>a,b=100,200
          >>>print(a,b)
          100,200
    数值
      类型
        整数类型：int（）
        浮点类型：float（）
      运算符
        +
          加
        -
          减
        *
          乘
        /
          实数除法
        //
          整数除法
        %
          取余
        **
          乘方
      函数
        abs(x)
          求x的绝对值
        divmod(x,y)
          输出（x//y，x%y）
        pow(x,y[,z])
          输出（x**y）%z
        round(x[,ndigits])
          对x四舍五入，保留ndigits位小数，如ndigits省略，则四舍五入后取整
        max(x1,x2……xn)
          返回x1，x2……xn中最大值
        min(x1,x2……xn)
          返回x1，x2……xn中最小值
      math库
        引用方法
          1
            >>>import math
            >>>print(math.需要引用的math)
          2
            >>>from math import 需引用的math)
            >>>print(需引用的math)
        math库中的数学常数
          pi
            圆周率
          e
            e
          inf
            正无穷大，负无穷大为-inf
          man
            非浮点数标记，Not a Number
        math库中的数值函数
          fabs(x)
            x的绝对值
          fmod(x,y)
            x除y的余数
          fsum([x,y……])
            浮点数精确求和
          gcd(x,y)
            x和y的最大公约数，x和y为整数
          trunc(x)
            x的整数部分
          modf(x)
            x的小数和整数部分
          ceil(x)
            向上取整，返回不小于x的最小整数
          floor(x)
            向下取整，返回不小于x的最大整数
          factorial(x)
            x的阶乘，x为整数
          pow(x,y)
            x的y次幂
          sqrt(x)
            x的平方根
    m=‘bird,fish,monkey,rabbit’
    n=‘bird,fish,monkey,fish,rabbit’
    s=‘Hello Mike’
    混合类型与转换
      类型自动转换
        int和float对象可以混合运算，int对象会自动转换（隐式转换）成float对象
        例1
          >>>f=24+24.3
          >>>type(f)
          <class ’float’>
      类型强制转换
        >>>int(2.32)
        2
  字符串
    数据类型
      单引号（‘ ’）
      双引号（” ”）
      三单引号(‘’’ ‘’’)
      三双引号(“““ ”””)
      可跨行
    索引与切片
      索引
        从左到右：0 —— n-1
        从右到左：-n —— -1
        语法
          变量[序号]
        例
          >>>s[0]
          ‘H’
      切片
        变量[头下标: 尾下标] （含头不含尾）
          例1
            >>>print(s[0:5])
            ‘Hello’
          例2（正反可一起使用）
            >>>s[6:-1]
            ‘Mik’
          例3（省前则从头开始）
            >>>s[:5]
            ‘Hello’
          例4（省后则坚持最后）
            >>>s[6:]
            ‘Mike’
          例5（全省就从头到尾）
            >>>s[:]
            ‘Hello Mike’
        步长
          >0
            从左向右，每n个字符取一次
            例
              >>>s[0:5:1]
              hello
          <0
            从右向左，｜步长｜-1，需头>尾，否则为空格
            例
              >>>[4:0:-1]
              olle
    处理与操作
      运算符
        +
          字符串拼接
            “ab”+“123”——“ab123”
        *
          字符串复制
            “ab”*3——ababab
        in
          判断是否为字串
            “h” in “Hello”——False
            “H” in “Hello”——True
      处理函数（直接）
        len(x)
          返回字符串x的长度
            >>>len(s)
            10
        str(x)
          将任意类型x转换为字符串类型
            例1
              >>>str(123)
              ‘123’
            例2
              >>>str(3+2)
              ‘5’
        chr(x)
          返回Unicode编码为x的字符
            >>>chr(65)
            ‘A’
        ord(x)
          返回字符x的Unicode编码值
            >>>ord(‘A’)
            65
        相互转换
      处理办法（变量.）
        查找
          find()
            指定范围（默认整个）首次出现的位置
              >>>m.find(‘fish’)
              5
          rfind()
            指定范围（默认整个）最后出现的位置
              >>>m.rfind(‘b’)
              20
          index()
            指定范围（默认整个）首次出现的位置
              >>>m.index(‘bird’)
              0
          rindex()
            指定范围（默认整个）最后出现的位置
              >>>m.rindex(‘i’)
              21
          count()
            出现次数
              >>>m.counnt(‘b’)
              3
            不存在则返回0
          不存在则返回-1
          不存在则返回异常
        分隔
          split()
            左端开始
              例1
                >>>m.split(‘,’)
                [‘bird’,’fish’,’monkey’,’rabbit’]
              例2
                >>>m.split(‘:’)
                [‘bird,fish,monkey,rabbit’]
              例3
                >>>m.split(‘b’)
                [‘’,‘ird,fish,monkey,ra’,‘’,‘it’]
          rsplit()
            右端开始
              最大分隔次数
                例：
                  >>>m.rsplit(‘,’,maxsplit=2)
                  [‘bird,fish’ ,‘monkey’ ,‘rabbit’]
                  不管是split和rsplit，都用maxsplit
          partition()
            左端开始的第一个分隔串开始分隔
              >>>n.partition(‘fish’)
              (‘bird’,‘fish’，‘monkey，fish，rabbit’)
          rpartition()
            右端开始的第一个分隔串开始分隔
              >>>n.rpartition(‘fish’)
              (‘bird，fish，monkey’，‘fish’，‘rabbit’)
          以(‘字符’)为分界点，去除字符，其他为整体，默认按空白分隔，不存在则返回原串
          分隔符不存在则返回原串和两个空串
        连接
          join()
            用‘字符串’作连接符
              例1
                >>>li='fish,monkey,bird'
                >>>‘:’.join(li)
                ‘f:i:s:h:,:m:o:n:k:e:y:,:b:i:r:d’
              例2
                >>>li=['fish,monkey,bird']
                >>>‘:’.join(li)
                'fish,monkey,bird'
              例3
                >>>li=[‘fish’,‘monkey’,‘bird’]
                >>>‘:’.join(li)
                ‘fish’:‘monkey’:‘bird’
        大小写转换
          lower()
            转小写
          upper()
            转大写
          capitalize()
            首字母大写
          title()
            每个单词首字母大写
          swapcase()
            大小写转换
        替换
          replace()
            替换指定字符（每次只能替换一个，生成新字符串）
              >>>q=‘你是我的小呀小苹果’
              >>>q.replace(‘小’,’small’)
              ‘你是我的small呀small苹果’
        删除
          strip()
            删除两端
          rstrip()
            删除右端
          lstrip()
            删除左端
        判断开始或结束点
          startswich()
            检测开始
          endswich()
            检测结束
        判断字符串类型
          isupper()
            判断是否全为大写
          islower()
            判断是否全为小写
          isdigit()
            判断是否全为数字
          isalnum()
            判断是否为数字或汉字
          isalpha()
            判断是否全为字母或汉字
        排版
          center()
            居中对齐
          ljust()
            居左对齐
          rjust()
            居右对齐
          zfill()
            输出宽度为（），在左侧以0填充
    格式化方法
      {}
        不指定位置
          ’字符串{}字符串{}’.format(‘插入’,’插入’)
          例
            >>>‘我是{}班{}号的学生’.format(‘2’,’3’)
            ‘我是2班3号的学生’
        指定位置(从0开始)
          ’字符串{0}字符串{1}’.format(‘插入0’,’插入1’)
          例
            >>>‘我是{1}班{0}号的学生’.format(‘2’,3)
            我是3班2号的学生
      %
        '%d'%填充字符串
      格式设置项
        ‘{:填充字符对齐字符数字}’.format(‘字符串’)
        设置项
          填充字符
            ‘*’,’=’,’-’等，只能一个字符，默认空格
          对齐方式
            ‘^’居中，’<‘左对齐，‘>’右对齐
          宽度
            一个整数，指格式话后整个字符串的字符个数
        例1（*填充，居中，宽10）
          >>>’{:*^10}’.format(‘Mike’)
          ‘***Mike***’
        例2 （保留4位小数）
          >>>’{:.4f}’.format(3.14159)
          ‘3.1415’
        例3（空格填充，整数默认右对齐，宽5，整数形式输出）
          ‘{:5d}’.format(24)
          ‘ 24’
        例4（=填充，居中，宽30，保留4位小数)
          >>>’{:=^20.4f}’.format(3.14159)
          ‘=======3.1415=======’
  流程控制
    条件表达式
      关系运算符
        !=
          不等于
        ==
          等于
        >
          大于
        <
          小于
        >=
          大于等于
        <=
          小于等于
      逻辑运算符
        and
          并且
        or
          或者
        not
          取反
      条件表达式
        变量%2==0
          偶数
        变量%3==0 and 变量%10==5
          3的倍数且个位上为5
        (a+b>c) and (b+c>c) and (a+c>b)
          a、b、c为能构成三角形的三段线
    结构选择
      单分支结构：if语句（一种情况）
        语法
          if 条件表达式：
          语句块
        例1（用文件式）
          a,b=1,2
          if a<b:
          a,b=b,a
          print(a,b)
        语法（短）
          if 条件表达式：语句块
        例2（短的可写一排）
          a,b=1,2
          if a<b:a,b=b,a
          print(a,b)
      双分支结构：if-else语句（两种情况，非一即二）
        语法
          if 条件表达式：
          语句块1
          else：
          语句块2
        例1
          str=input(‘请输入字符串：’)
          if (str==str[::-1])：
          print(str+‘为回文串’)
          else：
          print(str+‘非回文串’)
        语法（短）
          语句块1 if 条件表达式 else 语句块2
        例2（短可写一排）
          str=input(‘请输入字符串：’)
          print(str+‘为回文串’) if str==str[::-1] else print(str+’非回文串’)
      多分支结构：if-elif-else语句（多种情况的一种）
        语法
          if 条件表达式1:
          语句块1
          elif 条件表达式2:
          语句块2
          elif 条件表达式3:
          语句块3
          …
          else:
          语句块n
      嵌套的if结构
        例
          num=int(input(‘请输入三位数’))
          a=str(num)[0]
            #取百位
          b=str(num)[1]
            #取十位
          c=str(num)[2]
            #取个位
          if a>b:
          if a>c:
          max_num=a
          else:
          max_num=c
          else:
          if b>c:
          max_num=b
          else:
          max_num=c
          print(str(num)+’中最大的数字是：’+max_num)
    循环结构
      for语句
        语法
          for 变量 in 迭代器：
          语句块
        字符串作为迭代器
          例
            for s in ‘abide’:
            print(s,end=‘ ’)
            a b i d e
        range()函数生成迭代序列
          语法1
            range（n）
              从0开始，到n-1结束
          语法2
            range（m，n）
              从m开始，到n-1结束
          语法3
            range（m，n，d）
              从m开始，每隔d-1个取(正增负减)，到n-1结束
          例1(求1～100的整数和)
            sum=0
            for i in range(1,100+1):
            sum=sum+i
            print(‘sum=’,sum)
            sum=5050
          例2（求1～100的奇偶和）
            sum_old=0
            sum_even=0
            for i in range(1,100+1):
            if i%2==1: #i为奇数
            sum_old=sum_old+i
            else: #i为偶数
            sum_even=sum_even+i
            print(‘1~100中奇数和为：’,sum_old)
            print(‘1~100中偶数和为：’,sum_even)
      while语句
        语法
          while 条件表达式：
          语句块
        用法：先求条件表达式的值，若值为True则重复执行至出现False。需要自己管理循环中的变量
        例(求1～100的整数和)
          sum=0
          i=1
          while i<=100:
          sum=sum+i
          i=i+1
          print(‘sum=’,sum)
      break和continue语句
        break #遇到即结束
          例(求1～10不能对3取余的数)
            for i in range(1,11):
            if i%3==0:
            break
            print(i,end=‘ ‘)
            1 2
        continue #遇到跳过继续
          例(1～10不能对3取余的数)
            for i in range(1,11):
            if i%3==0:
            continue
            print(i,end=‘ ‘)
            1 2 4 5 7 8 10
        #用法：只能出现在循环内，且只能控制包含着它们的最内层循环
      循环结构中的else子句
        break可以阻断else语句
        例
          for i in range(5):
          print(i,end=‘ ‘)
          if i>=3:break
          else:
          print(‘for 循环正常结束’)
          0 1 2 3
      循环的嵌套
        例1
          for m in range(2):
          for i in range(10):
          print(‘*’,end=‘ ‘)
          print()
          * * * * * * * * * *
          * * * * * * * * * *
        例2
          for m in range(1,3+1):
          for i in range(1,m+1):
          print(‘*’,end=‘ ‘)
          print()
          for m in range(1,3+1):
          for i in range(4-m):
          print(‘*’,end=‘ ‘)
          print()
          *
          * *
          * * *
          * * *
          * *
          *
    random库
      函数
        random()
          在[0.0,1.0)中抽一个随机浮点数
        randrange(n)、randrange(n,m)
          返回给定区间中一个随机整数
        randint(n,m)
          相当于randrange(n,m+1)
        choise(s)
          从序列s中随机选择一个元素
        uniform(n,m)
          生成一个[n,m]之间的随机小数
        sample(pop,n)
          从pop类型中随机抽取n个元素，以列表类型返回
        shuffle(n)
          将序列中的元素随机排列后返回
        seed(n)
          用整数n重制随机数生成器。利用系统时间。
      例1
        >>>from random import*
          # ” * “代表所有对象
        >>>random()
        0.2559038928926731
      例2
        >>>randrange(0,10,2)
        0
  列表与元组
    元组tuple()
            列表list()
    列表
      内容
        注
          列表，字典，集合本身可变
          字符串，元组，集合的元素，字典的键不可变
        表示
          [列表]，之间用 ”,“ 隔开
          可存放不同类的元素
          列表元素类型不受限制
      操作
        元素
          索引
            列表名[索引]
            列表名.index(元素)
              查找指定元素，在则返回元素索引，不存在则报错，存在多个返回最小的索引
          修改
            列表名[索引]=新值
          增加
            列表名.append(新元素)
              相当于“[列表+新元素]“，在尾部添加
            列表名.insert(索引，新元素)
              可插入指定位置
          删除
            列表名.pop(索引)
              删除并返回该元素
              缺乏索引时默认删除最后的元素
            列表名.remove(元素)
              可直接删除该元素
              重复时删排在前面的
            del 列表名[索引]
              [:]清空元素
            列表名.clear()
              清空元素
          其他
            len(列表名)
              用于统计和返回列表长度
            列表名.count(元素)
              统计并返回其中指定元素的个数，没有时返回0
            检测
              元素 in 列表
                判断元素是否在列表，在则True，不在则False
              元素 not in 列表
                与以上相反
        整体
          遍历
            range()函数
              例
                >>>l=[1,2,3,4]
                >>>for i in range(2):
                print('hello,{}.'.format(s[i]))
                hello,1.
                hello,2.
            for 元素 in 列表
              例（小偷问题）
                t=['A','B','C','D']
                for x in t:
                if (x!='A')+(x!='D')+(x=='C')+(x!='C')==3:)
                print('小偷是：',x)
                break
          排序
            列表名.sort()
              元素从小到大排序，基于编码值
              默认元素第一个元素的关键字来排序
              原地排序，改变原来列表
            sorted(列表名,reverse)
              与以上不同就是生成新列表
          切片
            列表[起始：终止：步长（可省）]
          扩充
            +
              列1+列2
                生成新列表，原来的不变
              列表.extend(新列表)
                将新列表添加到列表尾部，改变原来的列表
            *
              列表*数字
                生成新列表，原来的不变
          复制
            深拷贝(独立)
              切片方法
                语法
                  列Copy=列[:]
                例
                  >>>l=1,2,3,4
                  >>>lCopy=l[:]
                  >>>lCopy
                  [1,2,3,4]
              Copy方法
                语法
                  列Copy=列.copy()
                例
                  >>>l=[1,2,3,4]
                  >>>lCopy=l.copy()
                  >>>lCopy
                  [1,2,3,4]
            浅拷贝(共享)
              赋值
                语法
                  列1=列
                例
                  >>>l=[1,2,3,4]
                  >>>l1=l
                  >>>l1
                  [1,2,3,4]
          删除
            del 列
      数值列表
        创建
          input()输入
            语法
              列=eval(input())
            例
              >>>l=eval(input())
              [1,3,4,2]
              >>>l
              [1,3,4,2]
          list()转换
        生成
          range()生成
            语法
              列=[循环变量式 for 循环变量 in range（数）]
            例
              >>>l=[i for i in range(1,5)]
              >>>l
              [1,2,3,4]
    元组
      内容
        定义
          （元组）
          可直接用“，”定义元组
        注
          元素不可修改
          只有一个元素时，一定要加“，”
      操作
        对列表元素修改的都不能使用
        sorted()排序结果位列表
        深拷贝可以，浅拷贝不行
        元组可充当列表元素
  字典与集合
    字典dict()
            集合set()
    字典
      内容
        定义
          {键：值}，之间用“，”隔开
        注
          键不可改，唯一；值可改，不唯一
          {}只能为字典
          只可用键访问值，不可用值访问键
      访问
        语法
          字典[键]
            不能用数字
        例
          >>>d={'z':100,'y':299,'x':399}
          >>>d['y']
          299
      操作
        条目
          添加
            字典[键]=值
          修改
            字典[键]=值
              #必须为存在的条目，否则为添加
          删除
            指定删除
              del 字典[键]
              字典.pop(键，默认值)
                例1（可返回被删除的值）
                  >>>d={'z':100,'y':299,'x':399}
                  >>>d.pop（'z'）
                  100
                例2（键不存在时需给默认值）
                  >>>d={'z':100,'y':299,'x':399}
                  >>>d.pop('c',400)
                  400
                例3（必须要有参数）
                  >>>={'z':100,'y':299,'x':399}
                  >>>d.pop()
                  报错
            随机删除
              字典.popitem()
                以元组形式返回被删除的条目
          查找
            键 in 字典
              存在True，不存在False
            字典.get(键，默认值)
              存在则返回键对应的值，不存在则返回默认值
        整体
          遍历
            键
              字典.keys()
                例
                  >>>d={'z':100,'y':299,'x':399}
                  >>>d.keys()
                  dict_keys(['z', 'y', 'x'])
              for key in 字典.keys()
                例
                  >>>d={'z':100,'y':299,'x':399}
                  >>>for key in d.keys():
                  print(key)
                  z
                  y
                  x
            值
              字典.values()
                例
                  >>>d={'z':100,'y':299,'x':399}
                  >>>d.values()
                  dict_values([100, 299, 399])
              for value in 字典.values()
                例
                  >>>d={'z':100,'y':299,'x':399}
                  >>>for value in d.values():
                  print(value)
                  100
                  299
                  399
            条目
              字典.items()
                例
                  >>>d={'z':100,'y':299,'x':399}
                  >>>d.items()
                  dict_items([('z', 100), ('y', 299), ('x', 399)])
              for item in 字典.items()
                例
                  >>>d={'z':100,'y':299,'x':399}
                  >>>for item in d.items():
                  print(item)
                  ('z', 100)
                  ('y', 299)
                  ('x', 399)
          排序
            语法
              sorted(字典)
            例（按键的Unicode值从小到大）
              >>>d={'z':100,'y':299,'x':399}
              >>>sorted(d)
              ['x', 'y', 'z']
          删除
            字典.clear()
              清空所有条目，只剩{}
            del 字典
              删除字典
          合并
            for循环
              例
                >>>d1={'z':100,'y':299,'x':399}
                >>>d2={'m':2,'n':1}
                >>>for k,v in d2.items():
                d1[k]=v
                >>>d1
                {'z':100,'y':299,'x':399,'m':2,'n':1}
                >>>d2
                {'m':2,'n':1}
            字典1.update(字典2)
              例（只变字典1）
                >>>d1={'z':100,'y':299,'x':399}
                >>>d2={'m':2,'n':1}
                >>>d1.uptade(d2)
                >>>d1
                {'z':100,'y':299,'x':399,'m':2,'n':1}
                >>>d2
                {'m':2,'n':1}
            dict（）
              例1（先列后典）
                >>>d1={'z':100,'y':299,'x':399}
                >>>d2={'m':2,'n':1}
                >>>ls=list(d1.items())+list(d2.items())
                  #变为列表相加
                >>>dict(ls)
                  #使ls变为字典
                >>>ls
                {'z':100,'y':299,'x':399,'m':2,'n':1}
                >>>d2
                {'m':2,'n':1}
              例2
                >>>d1={'z':100,'y':299,'x':399}
                >>>d2={'m':2,'n':1}
                >>>d1=dict(d1,**d2)
                >>>d1
                {'z':100,'y':299,'x':399,'m':2,'n':1}
                >>>d2
                {'m':2,'n':1}
    集合
      内容
        定义
          {元素}，之间用“，”隔开
        注
          {}不为集合
          确定性，互异性，无序性
          集合元素不可变
      操作
        访问
          for遍历
            例（生成10个0~20之间的随机数）
              >>>ls=[]
                #创建列表
              >>> for i in range(20):
              ls.append(random.randint(0,20))
                #添加列表元素
              >>> s=set(ls)
              >>> print(s)
              {6, 0, 19, 11, 19, 17, 7, 17, 16, 10, 19, 15, 10, 20, 11, 20, 1, 12, 2, 11}
          全输出
        添加
          集合.add(不可变数据元素)
            #将元素直接加到集合中
          集合.update(可变数据元素)
            #将元素拆分重组后加入
        删除
          集合.remove(元素)
            #元素不存在会报错
          集合.discard(元素)
            #元素不存在则无反应
          集合.pop()
            #从中随机删除并返回一个元素
          集合.clear()
            #清空元素
        判断
          元素 in集合
            #存在为True，不存在False
      运算
        交集
          A|B
            #二者相同的元素
          A.union(B)
        并集
          A&B
            #二者一起的元素
          A.intersection(B)
        差集
          A-B
            #二者重复的元素
          A.difference(B)
        对称差集
          A^B
            #二者不同的元素
          A.symmetric_difference(B)
  函数
    基本概念
      名称
        例
          abs（x）
            #电脑内置函数，求绝对值
            #函数名abs
            #形式参数x
            #函数返回值：x的绝对值
          abs（-1）
            #实际参数-1
      分类
        内置函数
          abs()、len()
        标准库函数
          math、random
        第三方库函数
          jieba、numpy、requests
        自定义函数
    使用
      内容
        语法
          def 函数名([参数列表])：
          函数体
        注
          圆括号内是形参，如有多个参数则用“，”分开
          函数体可使用return语句返回值。
          return可以有多条，但一旦第一条被执行，函数终止（=break）。可出现在函数体任何位置
      调用
        语法
          函数名([实参])
        注
          实参必须与形参一一对应（顺序，数量）
          函数如果有返回值，则可以在表达式中继续使用，没有则可以单独做表达式使用
          需要调用才能运行函数
        例
          >>>def f(a,b):
          return a+b
          >>>f(12,13)
          25
        例2(return返回)
          def get_max(a,b):
            #定义函数，在a，b中谁大
          v=a
          if b>a:
          v=b
          return v
            #把v值返回给外界
          i=get_max(5,8)
            #相当于i=8
          print(i)
      参数
        默认值参数
        名称传递参数
        可变参数
      返回多个值
    lambda()函数
      内容
        定义
        注
    变量的作用域
      局部变量
      全局变量
    递归函数
      定义
      注