1、如何embedding python,python文件中有專門一章闡述
2、對於python,沒有除錯庫,可直接將執行庫複製乙份,名稱後面加上_d,就可用,可不能源**除錯而已,同時修改
pyconfig.h
#ifdef _debug
//# define py_debug //將這行注釋掉
#endif
和object.h
#if defined(py_debug) && !defined(py_trace_refs)
// #define py_trace_refs //將這行注釋掉
#endif
3、由於qt中定義了slots作為關鍵了,而python3中有使用slot作為變數,所以有衝突,辦法是:
a、在vs中-屬性-c/c++ -預處理器-預處理器定義-中新增:qt_no_keywords指令,
在dt的專案檔案中.pro檔案中新增 config +=_no_keywords指令,再生成vs的專案檔案,也就自動新增了上面的指令
這種方法是全域性的,同時也取消 forever,foreach的巨集定義,因為很多**使用foreach,所以***大;
typedef struct pytype_spec;
4、在主程式中執行一開始py_initialize(); 時就出現錯誤
解決辦法是:py_setpythonhome((wchar_t*)(l"c:\\python3"));
是因為我安裝python的時候沒有新增pythonhome這個環境變數
在py_initialize()之前呼叫下py_setpythonhome("c:\\python3");就可以了
5、用於匯入sys模組,以供程式使用,這是基本模組
pyrun_******string("import sys");
6、在執行pmodule = pyimport_importmodule("jptest"); 語句匯入自定義模組時,返回對pmodule為null,是由於自定義模組的位置不在python系統搜尋的系統目錄列表內,因此解決辦法是在系統搜尋目錄列表中新增目錄:
注意字元中中"\"必須前面加上「\\",也就是單個"\"是轉意符;而且目錄尾部不能新增多餘的\符;如果不能確認可將它們顯示出來用下面這個語句:pyrun_******string("print(sys.path)");
7、資料轉換,在c/c++與python互動時,都是通過pyobject來傳入和傳出資料的,python提供相關函式對pyobject資料進行轉換,轉換時使用格式字串來控制生成的物件型別,具體可參見官方文件:
a) 將c/c++資料轉換成pyobject:
pyobject *pint=py_buildvalue("i",2003);
pyobject *pstr=py_buildvalue("s","this is a string");
pyobject *ptuples=py_buildvalue("()"); //生成空元組,可作為呼叫不包含任何引數的函式時,傳遞空引數
pyobject *ptuples=py_buildvalue("(s)","this is a string"); //生成乙個元素的元組,可作為呼叫只包含乙個字元引數的函式時,傳遞乙個字元引數
b) 將pyobject資料轉換成c/c++資料:
1) int bb=0; pyarg_parse(pobjcet,"i",&bb); //這裡pobject是包含整數資料的python物件,第二個字串引數"i"指定轉換型別,第三個引數將結果值存入bb變數;
2) char * cc=null; pyarg_parse(pobject,"s",&cc); //這是字串轉換
3) char * cc=null; pyarg_parse(pobject,"(s)",&cc); //這是包含乙個字串元素元組轉換
8、呼叫python模組函式時,傳入引數時,要構造乙個引數元組,如:presult = pyobject_callobject(pfunction, args);這裡args就是乙個元組,作為被呼叫函式的引數列表;
a、如引數為空,則這樣構造:args=py_buildvalues("(si)","abc",10); 表示構造二個引數的元組,乙個是字元型,另乙個是整;多個引數,可參照處;
b、如果引數為空,則需構造乙個包含0個元素元組:args=py_buildvalues("()");
注意以上二種都在格式字串中包含"()",這是指示構造元;作為函式呼叫引數必須傳遞元組,也必須這樣構;
下例是通過可變引數來構造呼叫函式引數元組:
int pythonhandler::pymodulerunfunction(const char *module, const char *function,const char *result_format, void *result, const char *args_format, ...)
...presult = pyobject_callobject(pfunction,args); //呼叫函式
python呼叫requests注意事項
python呼叫requests,預設body傳text時候經常會因為格式報錯。我們可以通過傳josn來避免報錯,一種是json接收字典引數,或者json.loads把文字轉字典。下面是json接收字典 def send data self,msg send url self.get access ...
python 注意事項
from functools import reducereduce 函式會對引數序列中元素進行累積。函式將乙個資料集合 鍊錶,元組等 中的所有資料進行下列操作 用傳給 reduce 中的函式 function 有兩個引數 先對集合中的第 1 2 個元素進行操作,得到的結果再與第三個資料用 func...
python注意事項
編寫python的注意事項 表示式與基本語句的不同 結果相同但複雜的表示式系統可能會提示出錯 如22為表示式 print 22 為語句 字元縮排 python有乙個特點,就是具有強制縮排的功能,而強制縮排一般我們採用tab鍵,如果在編寫過程中採用tab和空格鍵並用,系統極有可能會出錯 注釋 注釋是為...