Python 板


LINE

感謝回應 看完之後 這的確是我不知道的觀念… 整理一下心得 原來函式可以這樣寫: SEKSGUI.WMSE(aObj, bObj, cObj, dObj, aInt) 我一直以為只能 函數(一個變數) 還想說怎麼傳變數的方式那麼不人性...orz 幸好有tuple list這些東西 可以讓我把需要的變數包一包 再分裝就好 原來...程式自己會幫忙包好 也就是說...我自己又多包了一層orz... 這問題在python與c之間傳 是看不出來的 因為在 parse函式中 的 ("()",…) 就把我自行包好的消掉了 但作法是多此一舉orz... 但直接在c下使用時 等於是跳過了程式幫忙包裝 解決辨法是 1.對我來說其實根本不用包 至少我的sequence裡沒有其他sequence了 orz... 2.不想對程式變動太大 就自己包 選用2之後 程式就可以跑了 (萬分感謝) 但之後的程式又爆了orz...我再來慢慢debug ※ 引述《sbrhsieh (sbr)》之銘言: : ※ 引述《KSJ (阿真)》之銘言: : : //下面這行本來是看看傳進下面funcB之前 這東西倒底有沒有問題的 : : //return Py_BuildValue("N",pyFUNC_VARIABLEseqTuple); : : //結果是 : : //([1, 1, 2, 2], [1, 2, 1, 2], [5, 4, 6, 3], (8.72, 5.52), 0) : : //所以我認定應該是沒問題 才繼續下面這一行 : : PyObject *value = (*func)(NULL,pyFUNC_VARIABLEseqTuple); : : 於是在這裡的最後一行 程式有誤 : : 想必是進入funcB之後的問題?! : : 於是我在funcB之中加入一些中斷點 來看看是哪裡的問題 : : funcB只秀到有誤的部份: : : //宣告要接的變數 有一個長整數 四個pyobejct : : //長整數就是 最後的那個 0 四個pyobject就是 : : //[1,1,2,2,] [1,2,1,2] [5,4,6,3] (8.72,5.52) 這四個 : : long int func_num; : : PyObject *pylagS,*pylagT,*pyCOV,*pyFitVar; : : PySys_WriteStdout("parse OK");//中斷點1 : : //傳遞參數 : : if (!PyArg_ParseTuple(args, "(OOOOI)",\ : : &pylagS,&pylagT,&pyCOV,&pyFitVar,&func_num)) return NULL; : : PySys_WriteStdout("parse OK");//中斷點2 : : 到中斷點1 印出parse OK 之後 : : 程式就爆了…orz : : 強調一下 如果單單只叫funcB (用手key值) 是沒問題的 : 我後來仔細看看你這一段描述,也對照過你提供的完整 source code,確定你在 : 描述時沒有筆誤。我想我應該找到問題點,但不確定這是否就是你欠缺的觀念。 : 首先 native function WMSE 一開始是如下 parse 傳進來的參數: : if (!PyArg_ParseTuple(args, "(OOOOI)", : &pylagS,&pylagT,&pyCOV,&pyFitVar,&func_num)) return NULL; : 這表示 WMSE export 到 Python module 後被使用時預期 caller pass 單一個 : tuple object,而此 tuple 依序裝著 4 個 object 與 1 個 int。 : # in Python : SEKSGUI.WMSE((a, b, c, e, 0)) : 但是在 native function: PSO 中,程式準備好一個 tuple object(referenced : by 'pyFUNC_VARIABLEseqTuple'),把這個 tuple 輸出到 standard output 是 : ([1, 1, 2, 2], [1, 2, 1, 2], [5, 4, 6, 3], (8.72, 5.52), 0) : 這個 tuple 也是依序持有 4 個 object 與 1 個 int object。 : 然而你不能把這個 tuple(address) 直接 pass 給 WMSE function,而必須要 : 把這個 tuple 裝進另一個 tuple(成為唯一的 element)後,再把 enclosing : tuple pass 給 WMSE function,也就是說要 pass 如下的 object: : (([1, 1, 2, 2], [1, 2, 1, 2], [5, 4, 6, 3], (8.72, 5.52), 0)) : 以目前你的程式裡的做法: : PyObject *value = (*func)(NULL,pyFUNC_VARIABLEseqTuple); : 這相當於在 Python 端執行這樣的 statement: : SEKSGUI.WMSE([1, 1, 2, 2], [1, 2, 1, 2], [5, 4, 6, 3], (8.72, 5.52), 0) : pass 了五個參數而非 pass 一個 tuple 當作參數。 : ------------------------------------------------------------------------- : 以 C 語言來實作 Python function 時,native function 有以下形式的 prototype: : static PyObject * : function_name(PyObject *self, PyObject *args); : static PyObject * : function_name(PyObject *self, PyObject *args, PyObject *kw); : 是分別對應到 Python 中的: : def function_name(*args): ... : def function_name(*args, **kw): ... : 也就是說不管在 Python 端 pass 幾個參數給 native function,native function : 都是收到一個 tuple(此 tuple 依序裝著 pass 過來的參數),反過來說 native : function 的 formal parameter 'args' 收到一個 tuple 不代表 Python 端明白 : pass 一個 tuple 當作 actua argument。 : 我認為當初你本來是打算把 WMSE 設計成如下使用: : SEKSGUI.WMSE(aObj, bObj, cObj, dObj, aInt) : 那麼 WMSE 在 parse 參數時使用 "OOOOI" 當作 format 即可。native function : WMSE 的 formal parameter 'args' 會是收到一個 tuple: : (aObj, bObj, cObj, dObj, aInt) 說實在是完全解決了我的問題 我的疑惑 跟我的無知... 見笑了 請見諒...orz --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.63.180
1F:推 Tiberius:賀 XD 看來我晚了一步 06/09 14:28







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP