赋值前引用局部变量“第一个”
这个问题在这里已经有了答案:
  Python为任何赋值扫描一个函数体,如果它们没有明确声明为global ,那么它会为该名称创建一个本地作用域变量。  由于您在reverse()函数中first分配,并且您没有在该函数的作用域中first显式声明为全局变量,python会创建一个名为first的局部变量来隐藏全局变量。 
比较之后的任务并不重要; python隐式地声明了函数开头的所有局部变量。
  为了解决这个问题,你可以在reverse()函数中声明first是全局的,但正如其他人所说的那样,应尽可能避免使用全局变量。 
