12. Python + C = ВНЛ

12. Python + C = ВНЛ

12. Python + C = ВНЛ

18 април 2016

Вградените работи на Python

>>> def f(): pass
...
>>> f
<function f at 0x7f2d565b8f28>

>>> print
<built-in function print>

Защо тези работи са такива?

Това не се отнася само за функции

>>> class MyClass(): pass
...
>>> MyClass
<class '__main__.MyClass'>
>>> MyClass.x = 1

>>> int
<class 'int'>
>>> int.x = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'int'

За кои става дума?

Искате да видите код?

Код!

Специални функции в С кода

Забелязахте ли pattern-а в имената на функциите в С кода?

Примери за функции, тип

Какво за Бога?!

Защо?

Защо по * трябва да ползвам C?

Python + C > Python

Две е повече от едно

Какво представлява една С библиотека

Машинен код + header

Какво съдържа един DLL/so

Demo

Python/C API

В началото бе Python.h …

C и Python са от две планети

Marshalling към Python

Py_BuildValue("s", "spam") -> 'spam'
Py_BuildValue("i", 42) -> 42
Py_BuildValue("(sii)", 42, "hi", 8) -> (42, 'hi', 8)
Py_BuildValue("{is,is}", 1, "one", 2, "two") -> {1: 'one', 2: 'two'}
Py_BuildValue("") -> None

Marshalling към C

const char* string;
int number;
PyArg_ParseTuple(args, "si:string_peek", &string, &number)

За какво все пак ми е всичко това?

Още въпроси?

Още интересни неща на

Real programmers write in FORTRAN

The Story of Mel

Истинският програмист: http://www.pbm.com/~lindahl/mel.html

Въпроси?