Sto esplorando python. Sono curioso di legare il pitone. Qualcuno potrebbe spiegare, come è possibile che tu possa avere accesso alle librerie C da Python.collegamenti Python, come funziona?
risposta
Esistono diversi modi per chiamare il codice scritto in C da Python.
Innanzitutto, c'è il modulo ctypes nella libreria standard. Permette di caricare una libreria a collegamento dinamico (DLL su Windows, librerie condivise .so
su Linux) e chiamare le funzioni da queste librerie, direttamente da Python. Tali librerie sono solitamente scritte in C.
In secondo luogo, nel caso di CPython è presente l'API Python/C. Può essere utilizzato in due modi principali:
Una libreria di collegamento dinamico può essere scritta in C in modo tale che CPython lo tratterà come un modulo (sarà possibile importarlo nei programmi Python). L'API Python/C consente alla libreria di definire funzioni scritte in C ma ancora richiamabili da Python. L'API è molto potente e offre funzioni per manipolare tutti i tipi di dati Python e accedere all'interfaccia dell'interprete.
Il secondo modo di utilizzare l'API C è incorporare Python in un programma scritto in C. approccio alla biblioteca. L'API consente inoltre al programma di eseguire script che possono quindi importare e utilizzare i moduli incorporati. Questo può essere usato per creare un sistema plug-in basato su Python.
"Bindings" sono implementati come una libreria Python pura che utilizza i ctypes o come una libreria a collegamento dinamico che utilizza API Python/C. La seconda opzione viene talvolta utilizzata con strumenti come SWIG che semplificano l'attività avendo cura di generare il codice "boiler-plate" o Boost.Python che fornisce un'API C++ sopra l'API Python/C che semplifica l'interfaccia con il codice C++.
leggere oltre: Foreign Function Interface
La risposta è semplice, l'interprete Python (CPython) è scritto in C e può chiamare dinamicamente altre librerie C, il modulo di estensione C o il codice C incorporato possono essere facilmente richiamati da qualsiasi altro codice C.
CPython consente hook speciali in modo che possa chiamare altro codice C o essere richiamato da un altro codice C. Non ha nemmeno bisogno di essere C, qualsiasi linguaggio che compili al codice nativo e abbia le stesse convenzioni di chiamata.
Per un semplice caso, si consideri creare un programma chiamato mython, che può caricare qualsiasi libreria condivisa e tenta di chiamare una funzione run
ad es.
lib = dlopen("mylib.so", RTLD_LAZY);
func = dlsym(lib, "run");
(*func)();
Quindi, in modo che avete caricato un modulo e chiamato il suo codice, CPython lo fa, ma in modo più complesso, fornendo interfacce e gli oggetti migliori per passare intorno, in più ci sono altre complessità coinvolti di gestione della memoria, gestione dei thread ecc.
Quindi la piattaforma di implementazione Python deve corrispondere al linguaggio in cui viene estesa, ad es. CPython non è estensibile in Java, ma l'implementazione Java di Python chiamata Jython può essere estesa in Java e analogamente l'implementazione .NET IronPython può essere estesa nei linguaggi .Net.
Un sacco di cose è scritto in C. Ma molte cose scritte in C * non sono * estensibili in C. Ciò che rende Python speciale ? –
@Anurag È corretto che python non sia estensibile a, per esempio, Java? – ashim
@ IgnacioVazquez-Abrams vedi modifica –
- 1. Come funziona "Quali collegamenti qui" di Wikipedia?
- 2. Come scaricare PDF da collegamenti raschiati [Python]?
- 3. Python Collegamenti intrecciati e database
- 4. Collegamenti SVN Python per Windows
- 5. Python: come funziona os.fork()?
- 6. Come funziona la chiamata in Python?
- 7. Genera collegamenti Python, quali metodi/programmi usare
- 8. Creazione ricorsiva di collegamenti temporali con python
- 9. Come posso ottenere collegamenti href da HTML usando Python?
- 10. Come installare i collegamenti Python provenienti da un pacchetto apt?
- 11. Python casuale non funziona come
- 12. Come funziona Rounding in Python?
- 13. Come funziona random.Random.seed di python?
- 14. Come funziona questa importazione Python?
- 15. Come funziona esattamente l'importazione Python?
- 16. Come funziona coda in python
- 17. Collegamenti esterni o URL non funziona su PhoneGap
- 18. sostituire i caratteri non funziona in python
- 19. Python sys.stdout.flush() non funziona
- 20. Python: os.remove non funziona
- 21. Python json.loads non funziona
- 22. Come funziona il riferimento a Python?
- 23. Come funziona la funzione "tutto" in Python?
- 24. Come funziona il confronto tupla in Python?
- 25. Come funziona il Twisted Reactor di Python?
- 26. Come funziona mercurial senza Python installato?
- 27. Come funziona l'interprete di Udacity web Python?
- 28. funziona come richiesta e risposta http python
- 29. Python regex non funziona
- 30. Python: timezone.localize() non funziona
Quale parte del [extemb] (http://docs.python.org/extending/index.html) non hai capito? –
Ti suggerisco di fare una ricerca su Google per "Python C binding". – steveha
"Sto esplorando python."Imparare tutto su Python è una grande cosa, ma probabilmente dovresti avere una buona comprensione del modello Python prima di guardare troppo in profondità i binding C. Capirai come l'apparato del servosterzo funzioni molto meglio una volta che sai guidare –