影中人 发表于 2023-3-6 15:40:04

函数(IX)的课后问题

使用timeit模块时,我的代码写成这样,为啥运行会报错呢?
def fibR(n):
if n == 1 or n == 2:
      return 1
else:
      return fibR(n-1) + fibR(n-2)
def main():
   n=int(input("take a number:"))
   t1=timeit.timeit("fibR(n)", setup="from __main__ import fibR,n",number = 1)
   print(t1)
错误报的是ImportError: cannot import name 'n' from '__main__'

isdkz 发表于 2023-3-6 15:43:49

因为你把 n 写在了 main 函数里面,导入模块是没法导出函数里面的变量的,函数里面的变量不在全局作用域

你要把 n=int(input("take a number:")) 放到 main 函数的外面:
def fibR(n):
if n == 1 or n == 2:
      return 1
else:
      return fibR(n-1) + fibR(n-2)

n=int(input("take a number:"))
def main():
   t1=timeit.timeit("fibR(n)", setup="from __main__ import fibR,n",number = 1)
   print(t1)
页: [1]
查看完整版本: 函数(IX)的课后问题