南月舞 发表于 2020-8-5 21:20:07

pickle怎么才能把函数放到.pkl文件里然后再调用

import random
import os
import time
import easygui as g
import sys
import pickle
def fx(path):   #检测目录正确路径
    if os.path.isdir(path):
      pass
    else:
      os.makedirs(path)
      print("创建文件夹"+path)

def fx1(lis1,lis2,n):   #定义方法实现随机抽取
    for e in range(1,n+1):
      x=random.randint(0,len(lis1)-1)
      lis2.append(str(e)+'. '+lis1)
      del lis1

def fx2(list1,list2,list3):
    list3.append('日期:\t\t\t\t姓名:\t\t\t\t分数:\n\n')
    list3.append('一、填空题(共15题,每题4分)\n')
    list0(list1,list3,15)
    list3.append('\n二、简答题(共4题,每题10分)\n')
    list0(list2,list3,4)

def fx3(str1,str2,list3):
    TK1 = open(path1+str1)#读取
    TK2 = open(path1+str2)      
    list1= TK1.readlines()   #获取TK(题库)内容到lis1
    list2= TK2.readlines()
    list3.append(name+'\n')
    list0(list1,list2,list3)
    ST = open(path2+name+'.txt', 'w') #实现创建
    ST.writelines (list3)   #写入lis2到ST(试题)
    TK1.close()   #以下关闭文件
    TK2.close()
    ST.close()
    sj=time.strftime("\n%Y/%m/%d-%H:%M:%S")   #生成日志
    RZ=open(path3+"rizhi.txt","a")
    RZ.write(sj+"\n")
    RZ.writelines (list3)
    RZ.close()   

def ed():
    a=g.msgbox('程序即将退出\n导致退出的原因可能有以下几点:\n1.你中途退出了程序\n2.输入了不合法的字符\n',title,image='jw1.gif' ,ok_button='确定')
    sys.exit(0)


str1="\\rtk1.txt"
str2="\\rtk2.txt"
str3="\\htk1.txt"
str4="\\htk2.txt"
path1 = os.getcwd()+"\\Bank\\"       #定义路径变量
path2 = os.getcwd()+"\\试卷\\"
path3 = os.getcwd()+"\\日志\\"

list0=

pkf1=open(path3+'myf.pkl','wb')
pickle.dump(list0,pkf1)
pkf1.close()

pkf2=open(path3+'myf.pkl','rb')
mylist=pickle.load(pkf2)
pkf2.close()
print(mylist)

===================== RESTART: D:\python_example\pickle2.py ====================
[<function fx at 0x0000012EC336D0D0>, <function fx1 at 0x0000012EC336D1F0>, <function fx2 at 0x0000012EC33C01F0>, <function fx3 at 0x0000012EC33C0280>, <function ed at 0x0000012EC33C0310>]
运行正常

但是我新建一个.py文件后就报错

import random
import os
import time
import easygui as g
import sys
import pickle
path3 = os.getcwd()+"\\日志\\"
pkf2=open(path3+'myf.pkl','rb')
mylist=pickle.load(pkf2)
pkf2.close()
print(mylist)

===================== RESTART: D:\python_example\pickle1.py ====================
Traceback (most recent call last):
File "D:\python_example\pickle1.py", line 9, in <module>
    mylist=pickle.load(pkf2)
AttributeError: Can't get attribute 'fx' on <module '__main__' (built-in)>

有没有大佬解释一下什么原因 我是初学不太懂,还不知道错在哪里,不是说好的什么都可以往里边装吗?

南月舞 发表于 2020-8-5 21:21:19

我需要怎么做才能吧函数放到.pkl文件里并且能随意调用呢?

qiuyouzhi 发表于 2020-8-5 21:44:25

噗...为什么要把函数放到.pkl文件里面去呢
你直接放进一个.py文件,然后import不就好了

suchocolate 发表于 2020-8-5 22:10:56

有点好笑

Twilight6 发表于 2020-8-5 22:19:14



不能吧

nahongyan1997 发表于 2020-8-6 13:17:48

pickle只能用来存储python内置数据类型,比如列表和字典。

陈尚涵 发表于 2020-8-7 14:06:22

函数怎么放到pickle里面去啊,你可以放函数代码的字符串

陈尚涵 发表于 2020-8-9 08:40:09

2天了,貌似还没有解决....
页: [1]
查看完整版本: pickle怎么才能把函数放到.pkl文件里然后再调用