我是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)
请帮助
答案 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 a,b,c 的
来自X import * 导入模块X,并在当前命名空间中为该模块定义的所有公共对象创建引用(即,所有没有名称的公共对象)用“_”)。或者换句话说,在运行此语句之后,您可以简单地使用普通名称来引用模块X中定义的内容。但是X本身未定义,因此X.name不起作用。如果已经定义了名称,则它将被新版本替换。如果X中的名称更改为指向其他对象,则模块将不会注意到。
导入模块X,并在当前命名空间中为给定对象创建引用。或者换句话说,您现在可以在程序中使用a和b和c。
最后, X = __import __('X')的工作方式与导入X相同,区别在于您1)将模块名称作为字符串传递,并且2)明确地将其分配给当前命名空间中的变量。