pythoncast
『壹』 python 中split的用法,如何分解多字元串的數據
split('|')
『貳』 python cast是什麼意思
Python的投
『叄』 python 字典調用C++函數
使用Python的ctypes,我們可以直接調用由C直接編譯出來的函數。其實就是調用動態鏈接庫中的函數。為什麼我們需要這樣做呢,因為有些時候,我們可能需要一個性能上比較講究的演算法,有些時候,我們可以在Python中使用已經有了的現成的被封閉在動態鏈接庫中的函數。下面是如何調用的示例。
首先,我們用一個乘法來表示一個演算法功能。下面是C的程序:
intmultiply(intnum1,intnum2){
returnnum1*num2;
}
如果在Windows下,你可能需要寫成下面這個樣子:
#include<windows.h>
BOOLAPIENTRYDll
Main(HANDLEhMole,DWORDdwReason,LPVOIDlpReserved){
returnTRUE;
}
__declspec(dllexport)
intmultiply(intnum1,intnum2){
returnnum1*num2;
}
然後,自然是把這個C文件編成動態鏈接庫:
Linux下的編譯:
gcc-c-fPIClibtest.c
gcc-sharedlibtest.o-olibtest.so
Windows下的編譯:
cl-LDlibtest.c-libtest.dll
於是在我們的Python中可以這樣使用:
(其中的libtest.so在Windows下改成libtest.dll即可)
>>>fromctypesimport*
>>>importos
>>>libtest=cdll.LoadLibrary(os.getcwd()+'/libtest.so')
>>>printlibtest.multiply(2,2)4
注意:上面的Python腳本中需要把動態鏈接庫放到當前目錄中。
『肆』 python可視化神器——pyecharts庫
無意中從今日頭條中看到的一篇文章,可以生成簡單的圖表。據說一些大數據開發們也是經常用類似的圖表庫,畢竟有現成的,改造下就行,誰會去自己造輪子呢。
pyecharts是什麼?
pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是網路開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒, pyecharts 是為了與 Python 進行對接,方便在 Python 中直接使用數據生成圖 。使用pyecharts可以生成獨立的網頁,也可以在flask、django中集成使用。
安裝很簡單:pip install pyecharts
如需使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可,同時兼容 Python2 和 Python3 的 Jupyter Notebook 環境。所有圖表均可正常顯示,與瀏覽器一致的交互體驗,簡直不要太強大。
參考自pyecharts官方文檔: http://pyecharts.org
首先開始來繪制你的第一個圖表
使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可
add() 主要方法,用於添加圖表的數據和設置各種配置項
render() 默認將會在根目錄下生成一個 render.html 的文件,文件用瀏覽器打開。
使用主題
自 0.5.2+ 起,pyecharts 支持更換主體色系
使用 pyecharts-snapshot 插件
如果想直接將圖片保存為 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用該插件請確保你的系統上已經安裝了 Nodejs 環境。
安裝 phantomjs $ npm install -g phantomjs-prebuilt
安裝 pyecharts-snapshot $ pip install pyecharts-snapshot
調用 render 方法 bar.render(path='snapshot.png') 文件結尾可以為 svg/jpeg/png/pdf/gif。請注意,svg 文件需要你在初始化 bar 的時候設置 renderer='svg'。
圖形繪制過程
基本上所有的圖表類型都是這樣繪制的:
chart_name = Type() 初始化具體類型圖表。
add() 添加數據及配置項。
render() 生成本地文件(html/svg/jpeg/png/pdf/gif)。
add() 數據一般為兩個列表(長度一致)。如果你的數據是字典或者是帶元組的字典。可利用 cast() 方法轉換。
多次顯示圖表
從 v0.4.0+ 開始,pyecharts 重構了渲染的內部邏輯,改善效率。推薦使用以下方式顯示多個圖表。如果使是 Numpy 或者 Pandas,可以參考這個示例
當然你也可以採用更加酷炫的方式,使用 Jupyter Notebook 來展示圖表,matplotlib 有的,pyecharts 也會有的
Note: 從 v0.1.9.2 版本開始,廢棄 render_notebook() 方法,現已採用更加 pythonic 的做法。直接調用本身實例就可以了。
比如這樣
還有這樣
如果使用的是自定義類,直接調用自定義類示例即可
圖表配置
圖形初始化
通用配置項
xyAxis:平面直角坐標系中的 x、y 軸。(Line、Bar、Scatter、EffectScatter、Kline)
dataZoom:dataZoom 組件 用於區域縮放,從而能自由關注細節的數據信息,或者概覽數據整體,或者去除離群點的影響。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)
legend:圖例組件。圖例組件展現了不同系列的標記(symbol),顏色和名字。可以通過點擊圖例控制哪些系列不顯示。
label:圖形上的文本標簽,可用於說明圖形的一些數據信息,比如值,名稱等。
lineStyle:帶線圖形的線的風格選項(Line、Polar、Radar、Graph、Parallel)
grid3D:3D笛卡爾坐標系組配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)
axis3D:3D 笛卡爾坐標系 X,Y,Z 軸配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)
visualMap:是視覺映射組件,用於進行『視覺編碼』,也就是將數據映射到視覺元素(視覺通道)
markLine&markPoint:圖形標記組件,用於標記指定的特殊數據,有標記線和標記點兩種。(Bar、Line、Kline)
tooltip:提示框組件,用於移動或點擊滑鼠時彈出數據內容
toolbox:右側實用工具箱
圖表詳細
Bar(柱狀圖/條形圖)
Bar3D(3D 柱狀圖)
Boxplot(箱形圖)
EffectScatter(帶有漣漪特效動畫的散點圖)
Funnel(漏斗圖)
Gauge(儀表盤)
Geo(地理坐標系)
GeoLines(地理坐標系線圖)
Graph(關系圖)
HeatMap(熱力圖)
Kline/Candlestick(K線圖)
Line(折線/面積圖)
Line3D(3D 折線圖)
Liquid(水球圖)
Map(地圖)
Parallel(平行坐標系)
Pie(餅圖)
Polar(極坐標系)
Radar(雷達圖)
Sankey(桑基圖)
Scatter(散點圖)
Scatter3D(3D 散點圖)
ThemeRiver(主題河流圖)
TreeMap(矩形樹圖)
WordCloud(詞雲圖)
用戶自定義
Grid 類:並行顯示多張圖
Overlap 類:結合不同類型圖表疊加畫在同張圖上
Page 類:同一網頁按順序展示多圖
Timeline 類:提供時間線輪播多張圖
統一風格
註:pyecharts v0.3.2以後,pyecharts 將不再自帶地圖 js 文件。如用戶需要用到地圖圖表,可自行安裝對應的地圖文件包。
地圖文件被分成了三個 Python 包,分別為:
全球國家地圖:
echarts-countries-pypkg
中國省級地圖:
echarts-china-provinces-pypkg
中國市級地圖:
echarts-china-cities-pypkg
直接使用python的pip安裝
但是這里大家一定要注意,安裝完地圖包以後一定要重啟jupyter notebook,不然是無法顯示地圖的。
顯示如下:
總得來說,這是一個非常強大的可視化庫,既可以集成在flask、Django開發中,也可以在做數據分析的時候單獨使用,實在是居家旅行的必備神器啊
『伍』 python為什麼houghlines變換返回值有負數
PostgreSQL的二進制數據類型為bytea,可最多保存2G的數據。在ADO、ODBC等介面,可通過帶參數化的插入SQL語句上傳二進制。
然而在某些介面、SQL語句無法進行參數綁定,或者某些語言沒有二進制的類型,或者介面的不兼容等原因,常無法上傳二進制數據。
碰到這種情況下,必須在客戶端將二進制轉化為一定規則的字元序列,然後插入語句時,來個顯示轉換cast('字元序列' as bytea).
二進制轉化為字元序列的規則:
分析每個位元組,當其ASCII值在0到31,127到255,或為39、92,請將這位元組轉化為3位的八進制字元串,前面加上2個反斜杠,如chr(39)表示為//047. 其他ascii值為可顯示字元,不變,當然你也可全部轉化為八進制,但這樣整個字元串太長,浪費空間。
如二進制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'轉化為字元序列為:
//000ab//351//031c
上傳的時候再來個顯示轉換,如 insert into table1 (aa) values (cast('//000ab//351//031c' as bytea))
如果二進制數據太大,可分次上傳,用||連接符連接起來,如:
insert into table1 (id,aa) values (1,cast('序列1' as bytea))
update table1 set aa=aa||cast('序列2' as bytea) where id=1
『陸』 Python 外部函數調用庫ctypes簡介
一直對不同語言間的交互感興趣,python和c語言又深有淵源,所以對python和c語言交互產生了興趣。
最近了解了python提供的一個外部函數庫 ctypes , 它提供了C語言兼容的幾種數據類型,並且可以允許調用C編譯好的庫。
這里是閱讀相關資料的一個記錄,內容大部分來自 官方文檔 。
ctypes 提供了一些原始的C語言兼容的數據類型,參見下表,其中第一列是在ctypes庫中定義的變數類型,第二列是C語言定義的變數類型,第三列是Python語言在不使用ctypes時定義的變數類型。
創建簡單的ctypes類型如下:
使用 .value 訪問和改變值:
改變指針類型的變數值:
如果需要直接操作內存地址的數據類型:
下面的例子演示了使用C的數組和結構體:
創建指針實例
使用cast()類型轉換
類似於C語言定義函數時,會先定義返回類型,然後具體實現再定義,當遇到下面這種情況時,也需要這么干:
可以簡單地將"so"和"dll"理解成Linux和windows上動態鏈接庫的指代,這里我們以Linux為例。注意,ctypes提供的介面會在不同系統上有出入,比如為了載入動態鏈接庫, 在Linux上提供的是 cdll , 而在Windows上提供的是 windll 和 oledll 。
ctypes會尋找 _as_paramter_ 屬性來用作調用函數的參數傳入,這樣就可以傳入自己定義的類作為參數,示例如下:
用 argtypes 和 restype 來指定調用的函數返回類型。
這里我只是列出了 ctypes 最基礎的部分,還有很多細節請參考官方文檔。
這兩天文章沒有寫,先是早出晚歸出去玩了一整天,然後加班到凌晨3點左右,一天一篇計劃劃水得嚴重啊…
『柒』 python題目,這題怎麼解
為了解決這個問題,我們可以編寫一段核心邏輯判斷代碼,用於篩選出符合張一凡要求的電影。示例代碼如下:
# 定義電影數據
movies = [ {"name": "快樂美男高校", "year": 2022, "type": "動作喜劇", "score": 8.1, "actor": "巨石強森"}, {"name": "致命邀約", "year": 2022, "type": "懸疑犯罪", "score": 7.2, "actor": "李冰冰"}, {"name": "雷神3:諸神黃昏", "year": 2022, "type": "動作冒險", "score": 8.5, "actor": "克里斯·海姆斯沃斯"}, {"name": "波西米亞狂想曲", "year": 2022, "type": "愛情音樂", "score": 9.0, "actor": "安東尼·岡薩雷斯"}, {"name": "小婦人", "year": 2022, "type": "恐怖驚悚", "score": 6.5, "actor": "伊麗莎白·班克斯"},]
# 篩選電影
selected_movies = []
for movie in movies:
if movie["year"] == 2022 and movie["type"] == "動作
『捌』 用python轉換浮點數為16進制怎麼寫比如把34.4536或者-34.4536轉成16進制
#-*-coding:utf8-*-
importctypes
defh2f(s):
cp=ctypes.pointer(ctypes.c_longlong(s))
fp=ctypes.cast(cp,ctypes.POINTER(ctypes.c_double))
returnfp.contents.value
deff2h(s):
fp=ctypes.pointer(ctypes.c_double(s))
cp=ctypes.cast(fp,ctypes.POINTER(ctypes.c_longlong))
returnhex(cp.contents.value)
print(f2h(34.4536))
print(h2f(0x40413a0f9096bb99))
『玖』 如何用python解析獲取C源文件的函數名
class stdata(Structure):
_fields_ = [('pBuf', c_char_p), ('buflen', c_int)]
N=100
buf = create_string_buffer(N)
d = stdata()
d.buflen = N
d.pBuf = cast(buf, c_char_p)
n = CallMyCFunc_GetData(byref(d))
關鍵在於create_string_buffer創建可寫buffer;cast轉換為char*類型。
『拾』 Python怎麼用Qt中static_cast
static_cast是c++的強制類型轉換吧,python的語法應該是不支持的