from parent import _mysql
. Можно также просто повторно импортировать _mysql
, это вернет уже импортированный модуль из sys.modules
. В Python у каждого модуля свое пространство имен, модули между собой никак не пересекаются, и это считается feature, а не bug. Импортировать _mysql
даже правильнее, если родительский модуль ничего к нему не добавляет — это явно дает понять, что мы имеем дело с общим _mysql
, а не с тем, что в родительском модуле называется _mysql
. Py_BuildValue
возвращает new reference, то есть объект со счетчиком ссылок, установленным в единицу, которым теперь владеет ваш код. Функция же PyList_Append
не забирает у вас этот объект, а тоже увеличивает счетчик ссылок еще на единицу. Теперь у полученной строки будет два владельца — список и ваш код. Когда вы удалите список, он честно отнимет свою единичку от счетчика ссылок, но ваша-то там останется, поэтому Питон будет думать, что кто-то где-то эту строку еще использует.PyObject *list, *item; /* static, право, ни к чему */
list = PyList_New(0);
item = Py_BuildValue("s"; "test");
PyList_Append(list, item);
Py_DECREF(item);
return list;
PyObject *list;
list = PyList_New(1); /* оставляем место для элемента */
PyList_SET_ITEM(list, Py_BuildValue("s"; "test"));
return list;
PyList_SET_ITEM
, который как раз подходит для заполнения новых списков.) or
вместо ||
помогает не потому, что у or
приоритет ниже, чем у ||
(хотя это так), а потому он ниже, чем у запятой (,
), в то время как у ||
— выше, чем у запятой."$file"
и не отнесет его к ||
. Кстати, наверное, возможен еще один вариант?(open FILE, "$file") || die "Can't open: $! \n";
Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
git actually has a simple design, with stable and reasonably well-documented data structures. In fact, I'm a huge proponent of designing your code around the data, rather than the other way around, and I think it's one of the reasons git has been fairly successful […] I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important.
@8
и т. п. добавляются к функциям, для которых указан формат вызовов stdcall
и означают размер стека. Это зависит от компилятора вообще-то, но и MSVC, и mingw
тут совпадают. Если такую функцию предполагается экспортировать из получившейся DLL, дополнительно создается алиас без суффикса, что мы, собственно, тут и видим:DllCanUnloadNow = @ILT+450(_DllCanUnloadNow@0)
DllMain
— @8
и @12
, правильное, судя по спецификации, @12
— передаются три указателя, но тут один куда-то девается. У вас DllMain
точно три параметра принимает?