Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > как понять тип переменных?


Автор: mrgloom 22.5.2012, 12:48
допустим есть у меня функция, вроде бы address строка, а port число, но я не уверен,  а тип переменных нигде не указан.
как возможно определить?
Код
 
def Connect(self, address, port):

Автор: kemiisto 22.5.2012, 12:52
Цитата(mrgloom @  22.5.2012,  11:48 Найти цитируемый пост)
допустим есть у меня функция

Что значит "есть у меня"? Если функция написана не Вами - смотреть документацию, комментарии к коду, если пишете сами - пишите комментарии, документацию. Ещё можно аргументы функций снабжать аннотациями типов, ЕМНИП.

Добавлено через 3 минуты и 26 секунд
Цитата(kemiisto @  22.5.2012,  11:52 Найти цитируемый пост)
Ещё можно аргументы функций снабжать аннотациями типов, ЕМНИП.

http://www.python.org/dev/peps/pep-3107/.

Автор: mrgloom 22.5.2012, 14:11
написана не мной, документации нет.

а в питоне число может трактоваться как стока и наоборот?

Автор: kemiisto 22.5.2012, 15:00
Цитата(mrgloom @  22.5.2012,  13:11 Найти цитируемый пост)
а в питоне число может трактоваться как стока и наоборот?

Если я правильно понял, то нет. Типизация строгая.

Цитата(mrgloom @  22.5.2012,  13:11 Найти цитируемый пост)
написана не мной, документации нет.

Ну, тогда никак. В Python объекты имеют тип, а вот переменные (которые суть есть ссылки на объекты) - нетипизированы.

Автор: Stolzen 22.5.2012, 17:43
http://stackoverflow.com/questions/1549801/differences-between-isinstance-and-type-in-python

Автор: kemiisto 22.5.2012, 18:35
Stolzen, это не то. Ещё раз - можно определить тип объекта (во время исполнения), но нельзя определить, объект какого типа необходимо передать в функции в качестве её аргументов, если не использовались аннотации или комментарии к коду.

Автор: Stolzen 22.5.2012, 22:15
Ну так да, а что вы хотели от динамически типизированного языка? smile 

Автор: mrgloom 23.5.2012, 12:42
ну может все таки по коду как то можно определить?
все таки там исользуются какие то стандартные функции из питона, или там тоже может быть некая неопределенность.

дело в том что я из с++ вызываю функции из питона и мне надо знать что у них на входе и на выходе.

Автор: mrgloom 23.5.2012, 13:42
выглядит все примерно так

Код

PyObject* pArgs = Py_BuildValue("(ss)","127.0.0.1","8000");
//или так 
PyObject* pArgs = Py_BuildValue("(si)","127.0.0.1",8000);

call_python_func("my_test","Connect",pArgs);

Автор: Void 23.5.2012, 14:44
Как уже не раз повторили, только инспекцией кода или методом проб и ошибок.
В данном конкретном случае ожидать строку на месте аргумента с номером порта мог только очень «одарённый» Python-программист.

Автор: Karadul 24.5.2012, 18:20
Чтобы прога не падала, стоит добавить проверку на возвращаемый тип и кидать исключение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)