Nester模块无法在Python中运行

时间:2016-05-08 00:51:56

标签: python python-2.7

我是python的新手,我一直在尝试从Head First Python运行此代码。 我目前正在使用Python 2.7.9

以下是代码:

from __future__ import print_function
import sys
def print_lol(the_list, indent=False, level=0, fh=sys.stdout):


 for each_item in the_list:
        if isinstance(each_item, list):
            print_lol(each_item , indent, level+1, fh)

        else:
            if indent:
                    for tab_stop in range(level):
                        print("\t", end='', file=fh)


            print(each_item, file=fh)

这是nester代码:

Traceback (most recent call last):
  File "C:\Users\Olusegun\Desktop\Python codes\HeadFirstPython\Chapter 3\data.py", line 30, in <module>
    print_lol(man, file = man_file)
NameError: name 'print_lol' is not defined

但我一直收到这个错误:

def inorder(self):

    print("in INOrDER is entered")
    temp = [None]


    if self.__left:
        temp = temp.append(self.__left)
        return self.__left.inorder() 
    elif self.__right: 
        temp = temp.append(self.__right)
        return self.__right.inorder() 
    return temp


def test_inorder(self):
    bt = family_tree()
    bt.add(20, "melanie")
    bt.add(10, "edwin")
    bt.add(30, "junior")
    bt.add(25, "dora")
    bt.add(35, "kate")
    x = bt.inorder()

    expected = '''(10, 'edwin'),(20, 'melanie'),(25, 'dora'),(30, 'junior'),(35, 'kate')'''
    self.assertEquals(str(x), expected)
    t = family_tree(bt)
    self.assertEquals(str(t), expected)

请帮助

1 个答案:

答案 0 :(得分:1)

print_lol位于nester模块中,您只需import nester,您应该使用print_lol

致电nester.print_lol()

或者您可以from nester import print_lol,以便您可以致电print_lol

您应该知道如何import Python modules

  

Python至少提供了三种导入模块的方法。您可以使用import语句,from语句或内置的 import 函数。 (有更多人为的方法可以做到这一点,但这超出了这个小笔记的范围。)

     

无论如何,这些语句和函数的工作原理如下:

     
      
  • 导入X 导入模块X,并在当前命名空间中创建对该模块的引用。或者换句话说,在运行此语句之后,可以使用X.name来引用模块X中定义的内容。

  •   
  • 来自X import * 导入模块X,并在当前命名空间中为该模块定义的所有公共对象创建引用(即,所有没有名称的公共对象)用“_”)。或者换句话说,在运行此语句之后,您可以简单地使用普通名称来引用模块X中定义的内容。但是X本身未定义,因此X.name不起作用。如果已经定义了名称,则它将被新版本替换。如果X中的名称更改为指向其他对象,则模块将不会注意到。

  •   来自X import a,b,c
  • 导入模块X,并在当前命名空间中为给定对象创建引用。或者换句话说,您现在可以在程序中使用a和b和c。

  •   
  • 最后, X = __import __('X')的工作方式与导入X相同,区别在于您1)将模块名称作为字符串传递,并且2)明确地将其分配给当前命名空间中的变量。

  •