Python 語言使用中遇到的問題彙總

2022-07-29 10:33:13 字數 2851 閱讀 5550

1.

python中的傳值和傳引用

和其他語言不一樣,傳遞引數的時候,python不允許程式設計師選擇採用傳值還是傳引用。python引數傳遞採用的肯定是「傳物件引用」的方式。實際上,這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件(比如字典或者列表)的引用,就能修改物件的原始值--相當於通過「傳引用」來傳遞物件。如果函式收到的是乙個不可變物件(比如數字、字元或者元組)的引用,就不能直接修改原始物件--相當於通過「傳值'來傳遞物件。

python一般內部賦值變數的話,都是傳個引用變數,和c語言的傳位址的概念差不多。可以用 id() 來查詢記憶體位址

如果a=b的話, a和b的位址是相同的;如果只是想拷貝,那麼就得用 a=b[:]。

!!!注意這一點,這可是可以引起重大錯誤的!!!

2.python中簡單的**函式示例(與c中**函式類似):

def

my_callback(input):

print ("

function my_callback was called with %s input

" %(input,))

defcaller(input, func):

func(input)

for i in range(5):

caller(i, my_callback)

輸出:function my_callback was called with 0 input

function my_callback was called with 1input

function my_callback was called with 2input

function my_callback was called with 3input

function my_callback was called with 4 input

3.使用ctypes庫時,在python中定義的函式在動態庫中被**

1

defdfault_rec(acp,arg):

2print("

begin--dfault_rec")

345def

get_cases_from_fmd(adm,uurecp,opt_i):

6print("

begin--get_cases_from_fmd")

78 libs = load_lib("

/usr/lib/fm/libfmd_adm.so")

9if libs ==0:

10print("

error in load_lib")

11return

1213 _fmd_adm_case_iter =libs.fmd_adm_case_iter

14cmpfunc =ctypes.cfunctype(ctypes.c_int, ctypes.pointer(fmd_adm_caseinfo_t), ctypes.c_void_p)

15py_dfault_rec =cmpfunc(dfault_rec)

1617 rt =_fmd_adm_case_iter(adm, none, py_dfault_rec, uurecp)

18if rt !=0 :

19print("

failed to get case list from fmd")

2021

print("

end--get_cases_from_fmd

")

說明:_fmd_adm_case_iter為動態庫函式呼叫,該函式中**了python中定義的dfault_rec函式,主要重點為黃色背景**

4.python語言中沒有指標的概念,如第1條所述,但是我們想要像c一樣能夠傳址而改變值該如何實現?

python與c有乙個很大的不同點就是可以有多個返回值,簡單的示例如下:

def

secondvalue(a,b):

c = a +b

return

(a,b,c)

x,y,z = secondvalue(1,2)

print ('

x:',x,'

y:',y,'z:'

,z)輸出: x: 1 y: 2 z: 3

在專案中,我利用返回值再賦值給原來的變數即可改傳入的引數值

c語言中:

extract_record_info(nva[i],

&class, &fru, &serial, &resource, &asru, &

dummy_fru, ba[i])

... ...

python中:

class_t, fru, serial, resource, asru, dummy_fru

=extract_record_info(nva[i], class_t, fru, serial, resource, asru, dummy_fru.value, ba[i])

defextract_record_info(nvl, class_p, fru_p, serial_p, resource_p, asru_p, dummy_fru, status):

return (class_p, fru_p, serial_p, resource_p, asru_p, dummy_fru)

上述**中,在c中,傳入的是&class, &fru, &serial, &resource, &asru, &dummy_fru,這些值被改變

在python中,傳入的是class_t, fru, serial, resource, asru, dummy_fru.value,但又將他們作為返回值賦給變數,這些值也被改變

elasticsearch使用中遇到的問題(二)

1 在實際需求中需要同乙個字段實現精確和模糊檢索,而且需要對檢索的關鍵字不進行分詞的搜尋,如 子龍 這個關鍵詞,不能拆分成子和龍這兩個關鍵字,要以乙個整體去檢索,檢索的結果必須是 子龍 或者 子龍 或者 子龍 或者 子龍 這樣需要設定同乙個字段具有多個屬性,而且要自定檢索期分詞器和索引器的分詞器 此...

使用NodeJS GruntCLI遇到的問題

執行環境cmd nodejs版本v0.8.4 node version 需求 需要用到grunt的js編譯功能,各位別笑我。使用 安裝完grunt cli報錯 grunt grunt cli the grunt command line inte ce.v0.1.13 fatal error una...

使用camare GPUImage遇到的問題

1 拍照角度不正確 parameters params mcamera.getparameters params.setrotation 90 mcamera.setparameters params 2 切換前置 預覽圖變小 parameters.setpreviewsize 720,480 si...