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 точно три параметра принимает?