LoveHDays 2020-03-19 22:24 采纳率: 100%
浏览 392
已采纳

Python在使用from。。。import。。为什么导致numbers出现问题?

萌新练习使用该命令时

def find_max():

   max = numbers[0]
   for number in numbers:
      if number > max:
         max = number
   print(max)


让这个作为文件第一个‘game’文件。

然后再第二个文件中


from game import find_max

numbers = [10,3,5,6]
find_max()

调用第一个文件来寻找第二个文件中numbers的最大数

Traceback (most recent call last):
  File "C:\Users\BAO\Desktop\新建文本文档.py", line 5, in <module>
    find_max()
  File "C:\Users\BAO\Desktop\game.py", line 3, in find_max
    max = numbers[0]
NameError: name 'numbers' is not defined

但是会出现如上报错。

我尝试了直接import 文件的方法,成功了!
但是使用如下的方法,粗错了

from game import find_max

萌新认为,import的直接导入和演示方法最大却别在于:
不需要多次写源文件的名字。
那么为什么在对于numbers来说现在不论是否添加都会找不到呢?
谢谢大佬帮路过!

  • 写回答

2条回答 默认 最新

  • 陈年椰子 2020-03-20 09:26
    关注

    不够严谨, 写函数,就要有封闭性。把数据作为参数

    game.py

    
    def find_max(numbers):
       max = numbers[0]
       for number in numbers:
          if number > max:
             max = number
       print(max)
    
    

    work.py

    from game import find_max
    
    numbers = [10,3,5,6]
    find_max(numbers)
    
    aaa  = [16,13,5,26]
    find_max(aaa)
    
    
    

    直接 import game , 相当于整个 game.py 文件直接复制, 那在findmax函数里就可以访问到 你的 work.py 里 numbers 这个变量.
    这种直接 import 还会执行 最顶层的代码,

    from game import findmax , 对于 game.py 里有很多的函数, 比如上百个, 但你只用到 findmax , 那这种方式就比较好.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题