python打包函數(shù) python3打包

qt中如何解包利用python 的struct.pack()函數(shù)打包的數(shù)據(jù)

在Python中使用struct模塊打包數(shù)據(jù)和在C/C++語(yǔ)言中定義一個(gè)結(jié)構(gòu)體(也是把多個(gè)成員打包到一塊)差不多。

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、長(zhǎng)陽(yáng)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

只要客戶端告訴了你打包的數(shù)據(jù)的格式(比如:數(shù)據(jù)包的總長(zhǎng)度、數(shù)據(jù)包中各個(gè)數(shù)據(jù)域的長(zhǎng)度及類型,以及端序——大端還是小端),然后定義一個(gè)等價(jià)的C語(yǔ)言結(jié)構(gòu)體,并把接收到的數(shù)據(jù)放入一個(gè)這樣的結(jié)構(gòu)體變量(對(duì)象)中就完成了解包工作。然后,訪問(wèn)結(jié)構(gòu)體中的特定成員,就是訪問(wèn)傳送過(guò)來(lái)的特定數(shù)據(jù)了。

python zip函數(shù)的用法

定義:zip([iterable,

...])

zip()是Python的一個(gè)內(nèi)建函數(shù),它接受一系列可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)tuple(元組),然后返回由這些

tuples組成的list(列表)。若傳入?yún)?shù)的長(zhǎng)度不等,則返回list的長(zhǎng)度和參數(shù)中長(zhǎng)度最短的對(duì)象相同。利用*號(hào)操作符,可以將list

unzip(解壓),看下面的例子就明白了:

1

2

3

4

5

6

7

8

9

a

=

[1,2,3]

b

=

[4,5,6]

c

=

[4,5,6,7,8]

zipped

=

zip(a,b)

[(1,

4),

(2,

5),

(3,

6)]

zip(a,c)

[(1,

4),

(2,

5),

(3,

6)]

zip(*zipped)

[(1,

2,

3),

(4,

5,

6)]

對(duì)于這個(gè)并不是很常用函數(shù),下面舉幾個(gè)例子說(shuō)明它的用法:

*

二維矩陣變換(矩陣的行列互換)

比如我們有一個(gè)由列表描述的二維矩陣

a

=

[[1,

2,

3],

[4,

5,

6],

[7,

8,

9]]

通過(guò)python列表推導(dǎo)的方法,我們也能輕易完成這個(gè)任務(wù)

1

2

print

[

[row[col]

for

row

in

a]

for

col

in

range(len(a[0]))]

[[1,

4,

7],

[2,

5,

8],

[3,

6,

9]]

另外一種讓人困惑的方法就是利用zip函數(shù):

1

2

3

4

5

a

=

[[1,

2,

3],

[4,

5,

6],

[7,

8,

9]]

zip(*a)

[(1,

4,

7),

(2,

5,

8),

(3,

6,

9)]

map(list,zip(*a))

[[1,

4,

7],

[2,

5,

8],

[3,

6,

9]]

這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們“行列互換”的效果,再通過(guò)對(duì)每個(gè)元素應(yīng)用list()函數(shù),將tuple轉(zhuǎn)換為list

*

以指定概率獲取元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import

random

def

random_pick(seq,probabilities):

x

=

random.uniform(0,

1)

cumulative_probability

=

0.0

for

item,

item_probability

in

zip(seq,

probabilities):

cumulative_probability

+=

item_probability

if

x

cumulative_probability:

break

return

item

for

i

in

range(15):

random_pick("abc",[0.1,0.3,0.6])

'c'

'b'

'c'

'c'

'a'

'b'

'c'

'c'

'c'

'a'

'b'

'b'

'c'

'a'

'c'

這個(gè)函數(shù)有個(gè)限制,指定概率的列表必須和元素一一對(duì)應(yīng),而且和為1,否則這個(gè)函數(shù)可能不能像預(yù)想的那樣工作。

稍微解釋下,先利用random.uniform()函數(shù)生成一個(gè)0-1之間的隨機(jī)數(shù)并復(fù)制給x,利用zip()函數(shù)將元素和他對(duì)應(yīng)的概率打包成tuple,然后將每個(gè)元素的概率進(jìn)行疊加,直到和大于x終止循環(huán)

這樣,”a”被選中的概率就是x取值位于0-0.1的概率,同理”b”為0.1-0.4,”c”為0.4-1.0,假設(shè)x是在0-1之間平均取值的,顯然我們的目的已經(jīng)達(dá)到

將python打包成exe

return 應(yīng)該放在一個(gè)函數(shù)里面的,

將python打包成exe的程序有很多,比如py2exe、PyInstaller等等,但是到目前為止,它們對(duì)python3.1支持的都不好,所以這里我要介紹一下cx_freeze 4.2.2,它還能支持跨平臺(tái),可以在windows和linux運(yùn)行。

cx_freeze的下載網(wǎng)址為 ,要根據(jù)已安裝的python版本進(jìn)行選擇。比如我使用的是python3.1,所以就要下載cx_Freeze-4.2.2.win32-py3.1.msi這個(gè)文件。運(yùn)行這個(gè)安裝包后,相關(guān)程序就會(huì)被拷貝到python的目錄下。主要在兩個(gè)地方,一個(gè)是C:/Python31/Scripts,另一個(gè)是C:/Python31/Lib/site-packages/cx_Freeze

在以前版本的cx_Freeze中,是通過(guò)FreezePython.py這個(gè)腳本將py轉(zhuǎn)換為exe,而在4.2.2這個(gè)版本中,F(xiàn)reezePython.py已經(jīng)不見了,主要的工作交給了C:/Python31/Scripts下的cxfreeze.bat來(lái)完成。

使用cx_Freeze完成python打包exe主要有兩種方法:

第一種,直接運(yùn)行cxfreeze.bat通過(guò):

先進(jìn)入cmd命令行,進(jìn)入C:/Python31/Scripts目錄,然后運(yùn)行cxfreeze.bat -h 就可以看到它的使用說(shuō)明了。我們可以用cx_freeze自己的sample做個(gè)試驗(yàn)。

進(jìn)入到c:/python31/scripts/下,運(yùn)行

cxfreeze C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4/PyQt4app.py --install-dir=d:/123

pytqt4app.py就會(huì)被打包成exe,并且它所用到的庫(kù)文件,也被一并考到了d:/123目錄下。

本文題目:python打包函數(shù) python3打包
標(biāo)題網(wǎng)址:http://muchs.cn/article38/doscesp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)網(wǎng)站導(dǎo)航、ChatGPT網(wǎng)站設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)