python返回指針
『壹』 python byref是指針嗎
handle = ctypes.c_int(0) ret = lib.XF_OpenDev(0, ctypes.byref(handle)) handle作為指針傳進去後如果被改掉,返回的是一個c_int 或者c_long, 你可以通過handle.value來獲得可以在python中靈活運用的真正的python整形
『貳』 python 中readline 和readlines的區別
讀取文件的時候是通過文件指針來實現的,指針掃過位置的數據被讀取。
readline是讀一行數據,就是指針就到第一個"\n"就結束了,所以只能讀一行數據,如果再次調用這個函數,就是下一行,以此類推,readline(n),可以加參數,n是文件指針的位置,返回當前行的指針位置之前的數據;
readlines是把所有數據都讀出來,返回一個列表對象,列表裡是每一行的數據;
『叄』 在python中,變數就是指針,可以這樣理解么
不是。
應該是指向指針的指針,只不過變數本身的地址在python中不提供訪問途徑。也就是只能訪問這個指針所指地址(指針)和此地址里的內容。
比如
python中 a="xyz"
a本身的地址(對應的C運算:&a)python里是沒有辦法看到的。
python的id(a),返回的是"xyz"在內存中的起始地址,而不是存儲a變數本身的地址。
『肆』 python調用dll怎麼傳入一個指針接收結果
dk 可能是調用Create_Data前開辟的一個空間,dkLen傳入該空間大小,以方便函數Create_Data寫入結果到指針指向的空間。
『伍』 python ctypes 怎麼處理函數返回的一般指針
test.c(動態庫源代碼)
[cpp] view plain
// 編譯生成動態庫: gcc -g -fPIC -shared -o libtest.so test.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct StructPointerTest
{
char name[20];
int age;
}StructPointerTest, *StructPointer;
StructPointer test() // 返回結構體指針
{
StructPointer p = (StructPointer)malloc(sizeof(StructPointerTest));
strcpy(p->name, "Joe");
p->age = 20;
return p;
}
編譯:gcc -g -fPIC -shared -o libtest.so test.c
call.py(python調用C語言生成的動態庫):
[python] view plain
#!/bin/env python
# coding=UTF-8
from ctypes import *
#python中結構體定義
class StructPointer(Structure):
_fields_ = [("name", c_char * 20), ("age", c_int)]
if __name__ == "__main__":
lib = cdll.LoadLibrary("./libtest.so")
lib.test.restype = POINTER(StructPointer)
p = lib.test()
print "%s: %d" %(p.contents.name, p.contents.age)
最後運行結果:
[plain] view plain
[zcm@c_py #112]$make clean
rm -f *.o libtest.so
[zcm@c_py #113]$make
gcc -g -fPIC -shared -o libtest.so test.c
[zcm@c_py #114]$./call.py
Joe: 20
[zcm@c_py #115]$
『陸』 python使用C函數返回的指針
manage_new_object返回類的動態對象,要返回簡單的指針,把manage_new_object改為return_xxx_pointer,具體名字記不得了,反正有這個模板,查閱boost文檔吧。
『柒』 python怎麼使用指針
python 不像c, 沒辦法直接使用指針。指針就是內存地址。
python中,最接近指針的就是, id() 返回某個對象的唯一id,類似於地址了。
『捌』 python有沒有指針
如果您曾經使用過C或C ++等低級語言,那麼您可能已經聽說過指針。指針允許您在部分代碼中創建高效率。它們也會給初學者帶來困惑,並且可能導致各種內存管理錯誤,即使對於專家也是如此。那麼在Python中有指針的存在嗎?
指針廣泛用於C和C ++。本質上,它們是保存另一個變數的內存地址的變數。有關指針的更新,可以考慮在C指針上查看此概述。
為什麼Python沒有指針?
實際上指針為何不存在的原因現在還不知道,也許指針違背了Python的禪宗。指針鼓勵隱含的變化而不是明確的變化。但通常情況下,它們很復雜而不是很簡單,特別是對於初學者。更糟糕的是,當他們用指針指向自己的方法,或做一些非常危險的事情,比如從你無法獲取的的一些變數中讀取數據。
Python更傾向於嘗試從用戶那裡抽象出內存地址來實現具體細節,所以Python通常關注可用性而不是速度。因此,Python中的指針並沒有多大意義。但是在有些情況下,Python會為您提供使用指針的一些好處。
想要理解Python中的指針,需要理解Python實現指針功能的具體細節。簡單來說,需要了解這些知識點:
不可變對象和可變對象【Python中的對象】
Python變數/名稱【Python中的變數】
【在Python中模擬實現指針】
『玖』 Python 文件操作
open(filename[,mode,encoding="編碼"]) :第一個參數文件名如果不加路徑,默認在該py文件目錄下(路徑舉例: E:/XXX或E:\xxx ),第二個是模式,默認為 'r' ——只讀,舉例: f = open('E:/abc.txt') ,如果要轉編碼並寫入模式:
f = open('E:/abc.txt','w',encoding='utf-8')
1. 模式
2. 方法
(1) close() : 關閉文件,因為文件寫入時是寫在內存,只有關閉時才寫入硬碟,所以寫完記得關閉
(2) read(size = -1) :讀取文件size個字元,不寫默認是-1,此時讀取所有內容(換行按
來表示,很不好看),並作為字元串返回,一定要注意 讀完以後文件指針將會指向末尾 ,所以下一次在用read方法時會發現讀取不出內容了,所以這個就要用seek移動指針或者關閉文件重新定義
(3) tell() :返回當前文件指針指向的位置
(4) seek(offset,from) :移動文件指針,代表從from參數開始偏移offset個位元組,0代表起始位置,1代表當前位置,2代表文件末尾
(5) readline() :按序列讀取一行內容,默認
為邊界
(6) write() :寫入內容,但必須要有寫入許可權才行,否則報錯,寫完會返回寫入的長度,例如: len1 = f.write('abc') ,此時len1就為3
(7) truncate() :刪除內容,把當前指針以後的內容全刪了,舉例:
註:
1.文件還可以轉化為 list 之類的,例如: list1 = list(f) ,此時文件內容的按
被隔開,然後可以用for語句讀取文件所有內容,舉例:
2.上面輸出文件內容方法相對低效,所以一般都直接用for輸出整個文件,舉例:
通過 fileno 函數,我們可以查看一個文件對應的文件描述符,對應的是程序中打開的文件序號,舉例:
可以看出python在啟動時會先啟動標准流的文件(文件描述符分別為:0/1/2),所以之後打開的文件就從3開始遞增,當釋放一個文件資源時,該描述符序號被釋放,之後打開的文件可以繼續使用該序號的文件描述符
python中的 print 的本質是通過 sys.stdout 來進行內容輸出,而 sys.stdout 的本質是一個"文件",相當於我們所有的輸入輸出的本質都是在對 sys.stdin / sys.stdout / sys.stderr 這些文件來進行讀寫操作,舉例:
open 函數不僅可以打開本地文件,也可以打開文件描述符,而該參數默認為 True ,代表 close 後會將對應的文件資源釋放,而對於一些文件描述符,我們只是希望 close 時將打開文件描述符的對象釋放,而不釋放對應的文件資源,那麼則可以設置 closefd=False ,舉例:
需要使用到 chardet 模塊,按二進制可讀打開文件,然後通過 detect() 方法查看,舉例:
所以就可以根據文件來設置編碼了:
有時候使用文件的編碼解碼也可能會出現無法解析的情況,例如兩種編碼混在同一個文件里的時候,此時可以設置 errors 參數為 ignore 來避免該問題,示例:
可用 os 模塊下的 chmod() 函數,具體參考: http://www.runoob.com/python/os-chmod.html
使用 os 模塊下的 remove() 函數可以實現刪除文件,舉例:
可以使用自帶的 zipfile 模塊來進行操作,舉例:
可以使用自帶的 tarfile 模塊來進行操作,舉例:
https://www.cnblogs.com/lotusto/p/5805543.html