调用自己使用的其他函数,而函数中存在全局未配置的Moudle如(sys)时,直接调用def的名称
则会出现 sys is not defined,
(这是因为并不是import Moudle,而是import了. py文件,如果不在代码段首声明,则需在使用时注意加上)
如下
print_b(a,fn=a_file)
而print_a.py文件代码如下:
import sys
def print_b(the_list ,indent=False,level=0,fn=sys.stdout):
for each_item in the_list:
if isinstance(each_item,list):
print_b(each_item,indent,level+1,fn)#判断当前列表中的元素是否为列表,若是列表,则进入循环
else:
if indent:
for tab_stop in range(level):
print("\t",end='',file=fn)
print(each_item,file=fn)
面对如此情况,我们需要使用
import print_a
print_a.print_b(a,fn=a_file)
代码是head first上的源码,已经提示了导入修改后的模块,但是因为自己的认知过于浅薄,
不能有效的运行代码,闭门造车出门也合不了辙,这算个啥。
同样面对这段代码:
import sys
def print_b(the_list ,indent=False,level=0,fn=sys.stdout):
for each_item in the_list:
if isinstance(each_item,list):
print_b(each_item,indent,level+1,fn)
else:
if indent:
for tab_stop in range(level):
print("\t",end='',file=fn)
print(each_item,file=fn)
利用indent的值控制面对list中的list是否缩进,
每逢一个tab_stop则 在level范围里增加多少个tab间隔,
关于pickle模块里dump和load的使用:
直接使用dump:
import pickle
try:
with open('man_data.txt','wb') as man_file,open('other_data.txt','wb') as other_file :
pickle.dump(man,man_file,1)
pickle.dump(other,other_file,1)
except IOError as err:
print('file error'+str(err))
except pickle.PickleError as err:
print('file error'+str(err))
打开文件,则会出现一些乱码。是因为它是有独特的储存方式,
由rb(二进制读取)命令读取到新的文件中,如
with open('man_data.txt','rb') as man_file:
new_man=pickle.load(man_file)
再将其由print输出于shell中,可以看出没有差别,无影响。