python json传参数可以传对象吗_pkl让你代码也可以见得不人

pkl让你代码也可以见得不人

   在写代码过程中,总有希望别人不知道代码怎么写的时候,那有些时候可以用api,以吐api给别人,别人给你的api传参数,那么你吐结果别人,这样子也可以,但是api就涉及要把ip放到公网,至少是局域的公网,那么就很麻烦了,这时候pkl就可以帮到你,pkl号称,一切皆可打包。    首先先跟大家介绍一下pkl是什么东西: pickle模块详解 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。 “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。pickle模块对于错误或恶意构造的数据是不安全的。 pickle协议和JSON(JavaScript Object Notation)的区别 : 1. JSON是一种文本序列化格式(它输出unicode文本,虽然大部分时间它被编码utf-8),而pickle是二进制序列化格式; 2. JSON是人类可读的,而pickle则不是; 3. JSON是可互操作的,并且在Python生态系统之外广泛使用,而pickle是特定于Python的; 默认情况下,JSON只能表示Python内置类型的子集,而不能表示自定义类; pickle可以表示极其庞大的Python类型(其中许多是自动的,通过巧妙地使用Python的内省工具;复杂的案例可以通过实现特定的对象API来解决)。 pickle 数据格式是特定于Python的。它的优点是没有外部标准强加的限制,例如JSON或XDR(不能代表指针共享); 但是这意味着非Python程序可能无法重建pickled Python对象。

默认情况下,pickle数据格式使用相对紧凑的二进制表示。如果您需要最佳尺寸特征,则可以有效地压缩数据。

你对上面pkl的详解,看不懂,没关系的,因为我没看懂,但是我们会用就可以了是吧,上面这段话总结起来就是pkl有局限于python的打开,但是json是可以游走在各个软件之间的。

这篇的文章的分享,还是从代码介绍一下pkl,让大家了解多一些pkl的用处,会有以下几项用处:

1、打包dataframe:

import pickleimport pandas as pdimport osos.chdir(r"\test_data")import pandas as pdgg=pd.read_csv('test_data1.csv')with open(r'.\test_data1.pkl', 'wb') as f:    pickle.dump(gg, f)with open(r'.\test_data1.pkl','rb') as f:    loaded_obj = pickle.load(f)

6bc0e2a20fec398b748f61c92dddd482.png

2、打包list&dict

import pandas as pda = ['Name', 'Age', 'Gender']b = ['Ali', '19', 'China']data = pd.DataFrame(zip(a, b), columns=['project', 'attribute'])dict_country = data.set_index('project').T.to_dict('list')with open(r'.\dict_country.pkl', 'wb') as f:    pickle.dump(dict_country, f)with open(r'.\dict_country.pkl','rb') as f:loaded_obj = pickle.load(f)

61e8300bd0b5af86aecd55b546354dbf.png

3、打包模型

import numpy as npfrom sklearn import datasetsfrom utils.data_manipulation import make_diagonal, normalize, train_test_splitfrom utils.data_operation import accuracy_scoredata = datasets.load_iris()X = data.data[data.target != 0]y = data.target[data.target != 0]y[y == 1] = 0y[y == 2] = 1X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, seed=1)clf = LogisticRegression()clf.fit(X_train, y_train)with open(r'.\clf.pkl', 'wb') as f:    pickle.dump(clf, f)with open(r'.\dict_country.pkl','rb') as f:    loaded_obj = pickle.load(f)

4、打包代码

import  pickle   class gg():    def test():        print('跑数成功了吗')with open('D:/python_code/mypickle.pickle', 'wb') as f:    pickle.dump(gg, f)with open('D:/python_code/mypickle.pickle','rb') as f:    loaded_obj = pickle.load(f)loaded_obj.test()

a9a919c4599f32364b347ca43bec6aaa.png

   其实数据这些打包就是为了方便发送或者为了保证数据的好保存,其实其他方式也可以,映射关系这种放在python文件里面也可以,重点就是打包代码这块,打包的代码是看不到具体的代码的,只能按照参数指示输入参数,得到输出结果,那么在一些反欺诈策略,或者一些模型的组合中不想让别人看到其中的规则,就可以使用pkl打包的形式,把你的东西保密化。

84c148db82ddd7013f6f0d56c7d5311f.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值