Kurs języka Python. Wykład 13. Marcin Młotkowski. 18 stycznia Rozszerzenia Pythona w C Python/C API. 2 Osadzanie Pythona w C

Podobne dokumenty
Kurs rozszerzony języka Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

Wykład 4: Klasy i Metody

Kurs rozszerzony języka Python

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1 Atrybuty i metody klasowe

Podział programu na moduły

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Programowanie obiektowe

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

JAVA W SUPER EXPRESOWEJ PIGUŁCE

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Języki i metody programowania Java. Wykład 2 (część 2)

Wstęp do programowania

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Aplikacje RMI

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Microsoft IT Academy kurs programowania

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Programowanie obiektowe

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Szablony klas, zastosowanie szablonów w programach

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Metaprogramowanie w Ruby

C-struktury wykład. Dorota Pylak

Programowanie Obiektowe i C++

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

Programowanie obiektowe

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

PARADYGMATY PROGRAMOWANIA Wykład 4

Metody Metody, parametry, zwracanie wartości

Podstawy języka Java. przygotował:

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Zaawansowany kurs języka Python

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Programowanie obiektowe

Wykład 1

Programowanie strukturalne i obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Zaawansowany kurs języka Python

Programowanie Komputerów

Wstęp do programowania

Kurs rozszerzony języka Python

PROGRAMOWANIE w C prolog

Funkcja (podprogram) void

Podstawy programowania skrót z wykładów:

Programowanie obiektowe

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie w Internecie. Java

Qt sygnały i designer

Programowanie niskopoziomowe

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Kompilator języka C na procesor 8051 RC51 implementacja

Projektowanie klas c.d. Projektowanie klas przykład

Podstawy programowania w języku C++

Oracle PL/SQL. Paweł Rajba.

Dokumentacja do API Javy.

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wykład 2: Podstawy Języka

Operacje wejścia/wyjścia odsłona pierwsza

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Metody dostępu do danych

Python wstęp do programowania dla użytkowników WCSS

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Zaawansowany kurs języka Python

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

I - Microsoft Visual Studio C++

Tworzenie aplikacji w języku Java

Język ludzki kod maszynowy

Podstawy programowania w języku C++

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Kurs WWW. Paweł Rajba.

Programowanie obiektowe zastosowanie języka Java SE

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Podstawy programowania obiektowego

Programowanie obiektowe

Kurs rozszerzony języka Python

Programowanie w języku C++

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Sposoby przekazywania parametrów w metodach.

Co nie powinno być umieszczane w plikach nagłówkowych:

Transkrypt:

Wykład 13. 18 stycznia 2010 1 Rozszerzenia Pythona w C Python/C API 2 3

Problemy łączenia dwóch języków Zagadnienia problemy z różnymi typami danych (listy, kolekcje, napisy); przekazywanie argumentów i zwracanie wartości; tworzenie nowych wartości; obsługa wyjątków; zarządzanie pamięcią.

Dodanie do Pythona nowej funkcji Zadanie Moduł z funkcją obliczającą średnią arytmetyczną elementów listy. Elementy implementacji: plik nagłówkowy <Python.h>; implementacja funkcji; odwzorowanie funkcji w C na nazwę udostępnioną w Pythonie; funkcja inicjalizująca o nazwie initnazwa_modułu.

Dodanie do Pythona nowej funkcji Zadanie Moduł z funkcją obliczającą średnią arytmetyczną elementów listy. Elementy implementacji: plik nagłówkowy <Python.h>; implementacja funkcji; odwzorowanie funkcji w C na nazwę udostępnioną w Pythonie; funkcja inicjalizująca o nazwie initnazwa_modułu.

Implementacja funkcji extern PyObject * mean(pyobject *, PyObject *); PyObject * mean(pyobject * self, PyObject * args) { int suma = 0, n, i; PyObject * res; PyObject * item; PyObject * lista; lista = PySequence_ITEM(args, 0); if (!PyList_Check(lista)) printf("to nie jest lista!\n"); n = PyList_Size(lista);

Implementacja, cd. cd. funkcji } for (i = 0; i < n; i++) { item = PyList_GetItem(lista, i); if (!PyInt_Check(item)) continue; suma += PyInt_AsLong(item); } res = Py_BuildValue("i", suma/n); Py_INCREF(res); return res;

Opakowanie funkcji #include <python2.4/python.h> extern PyObject * mean(pyobject *, PyObject *); PyObject * mean(pyobject * self, PyObject * args) {... } static PyMethodDef modulik[ ] = { { "mean", mean, METH_VARARGS, "Pierwsza funkcja"}, { NULL, NULL, 0, NULL } }; PyMODINIT_FUNC initmodulik(void) { Py_InitModule("modulik", modulik); }

Opakowanie funkcji #include <python2.4/python.h> extern PyObject * mean(pyobject *, PyObject *); PyObject * mean(pyobject * self, PyObject * args) {... } static PyMethodDef modulik[ ] = { { "mean", mean, METH_VARARGS, "Pierwsza funkcja"}, { NULL, NULL, 0, NULL } }; PyMODINIT_FUNC initmodulik(void) { Py_InitModule("modulik", modulik); }

Kompilacja i instalacja setup.py from distutils.core import setup, Extension module1 = Extension( modulik, sources = [ test.c ]) setup(name = MyPackage, version = 1.0, description = Pakiet demonstracyjny, ext_modules = [module1]) Kompilacja i instalacja $ python setup.py build $ python setup.py install

Typy danych w Pythonie Wszystko w Pythonie jest obiektem

Nowe wartości Tworzenie nowych wartości Pythonowych PyObject* PyInt_FromLong(long ival) PyObject* Py_False PyObject* Py_True PyObject* PyList_New(Py_ssize_t len) PyObject* PyString_FromString(const char *v) PyObject *Py_BuildValue(char *format,...); Py_BuildValue() None Py_BuildValue("ss", "hello", "world") ( hello, world ) Py_BuildValue("[i,i]", 123, 456) [123, 456] Py_BuildValue("{s:i,s:i}", { abc : 123, def : 456} "abc", 123, "def", 456)

Listy dostęp do list PyObject* PyList_GetItem(PyObject *list, Py_ssize_t index) int PyList_SetItem(PyObject *list, Py_ssize_t index, PyObject *item)

Obiekty Makra dostępu do pól obiektów PyObject* PyObject_GetItem(PyObject *o, PyObject *key) int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)

Standardowe funkcje wieloargumentowe Nagłowek funkcji PyObject * foo(pyobject * self, PyObject * args) Parsowanie argumentów int PyArg_ParseTuple(PyObject *args, const char *format,...) Wpis w tabeli funkcji { "mean", mean, METH_VARARGS, "Pierwsza funkcja"},

Zarządzanie pamięcią Mechanizm zarządzania pamięcią Każdy obiekt ma licznik odwołań zwiększany za każdym przypisaniem. Jeśli licznik jest równy zero obiekt jest usuwany z pamięci. W programach w C trzeba dbać o aktualizację licznika.

Zmiana licznika odwołań Zwiększenie licznika void Py_INCREF(PyObject *o) Zmniejszenie licznika void Py_DECREF(PyObject *o) Przypomnienie res = Py_BuildValue("i", suma/n); Py_INCREF(res); return res;

Zmiana licznika odwołań Zwiększenie licznika void Py_INCREF(PyObject *o) Zmniejszenie licznika void Py_DECREF(PyObject *o) Przypomnienie res = Py_BuildValue("i", suma/n); Py_INCREF(res); return res;

Trochę łatwiej Bibioteka Boost: + łączenie Pythona z C++ + łatwiejsza od C API - czasem nie da się ominąć C API, ale obiecują...

Wykonanie programów Pythonowych Py_Initialize(); PyRun_SimpleString("i = 2"); PyRun_SimpleString("i = i*i\nprint i"); Py_Finalize();

Wykonanie programów w pliku Py_Initialize(); FILE * f = fopen("test.py", "r"); PyRun_SimpleFile(f, "test.py"); Py_Finalize();

Kompilacja gcc -lpython2.4 test.c

Bezpośrednie wywoływanie funkcji Pythonowych Deklaracja zmiennych PyObject *pname, *pmodule, *pargs, *pfunc, *pvalue; Import modułu Pythonowego Py_Initialize(); pname = PyString_FromString("modulik"); pmodule = PyImport_Import(pName); Pobranie funkcji z modułu pfunc = PyObject_GetAttrString(pModule, "foo"); Wywołanie funkcji pvalue = PyObject_CallObject(pFunc, pargs);

Jython Cechy Jythona implementacja Pythona na maszynę wirtualną Javy; kompilacja do plików.class; dostęp do bibliotek Javy; pełna zgodność z językiem Python (te same testy regresyjne).

IronPython Implementacja Pythona w środowisku Mono częściowo zgodny z Pythonem 2.4

Python for S60 Implementacja Nokii na tefony komórkowe z systemem Symbian 60 implementuje Python 2.2.2; dostęp do sprzętu (SMS y, siła sygnału, nagrywanie video, wykonywanie i odbieranie połączeń); wsparcie dla GPRS i Bluetooth; dostęp do 2D API i OpenGL.