鱼C论坛

 找回密码
 立即注册
查看: 2093|回复: 1

[已解决]函数(IX)的课后问题

[复制链接]
发表于 2023-3-6 15:40:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用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__'
最佳答案
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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 09:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表