鱼C论坛

 找回密码
 立即注册
查看: 1968|回复: 7

[技术交流] pickle怎么才能把函数放到.pkl文件里然后再调用

[复制链接]
发表于 2020-8-5 21:20:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[x])
        del lis1[x]

def fx2(list1,list2,list3):
    list3.append('日期:\t\t\t\t姓名:\t\t\t\t分数:\n\n')
    list3.append('一、填空题(共15题,每题4分)\n')
    list0[1](list1,list3,15)
    list3.append('\n二、简答题(共4题,每题10分)\n')
    list0[1](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[2](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=[fx,fx1,fx2,fx3,ed]

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)>

有没有大佬解释一下什么原因 我是初学不太懂,还不知道错在哪里,不是说好的什么都可以往里边装吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-5 21:21:19 | 显示全部楼层
我需要怎么做才能吧函数放到.pkl文件里并且能随意调用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 21:44:25 | 显示全部楼层
噗...为什么要把函数放到.pkl文件里面去呢
你直接放进一个.py文件,然后import不就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:10:56 | 显示全部楼层
有点好笑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:19:14 | 显示全部楼层


不能吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 13:17:48 | 显示全部楼层
pickle只能用来存储python内置数据类型,比如列表和字典。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 14:06:22 | 显示全部楼层
函数怎么放到pickle里面去啊,你可以放函数代码的字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 08:40:09 | 显示全部楼层
2天了,貌似还没有解决....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表