2015-02-02 3 views
-2

У меня есть некоторые сведения о том, как это может работать, но я не знаю точного синтаксиса, как это сделать.Определить тип данных в Python

Пример:

def function(string): 
    string = string + "A" 

Как функция будет знать, что я ввода является строкой? ли это что-то вдоль линий ...

string = type.str 
+4

Это не будет. Операция 'string +" A "' будет успешной, если это возможно, иначе она не будет. ('string' не обязательно должна быть строкой для успеха.) Непонятно, что вы здесь задаете. Почему вы хотите, чтобы функция «знала», что вы передаете в строке? – BrenBarn

ответ

0

Есть несколько способов проверить тип переменной. Во-первых, вы можете проверить, если параметр является экземпляром str:

def isstring(parameter): 
    return isinstance(parameter, str) 

Другой способ мог бы попытаться объединить строку (в данном случае "") с параметром и уловом в конечном итоге исключений (TypeError исключение):

def isstring(parameter): 
    try: 
     parameter += "" 
     return True 
    except TypeError: 
     return False 

Другой способ мог бы использовать type (по аналогии с isinstance, но разница в основном, когда полиморфизм участвует):

def isstr(parameter): 
    return type(parameter) == str 

Вы также можете использовать assert, но если вы хотите просто проверить, имеет ли параметр определенный тип, я бы принял первый случай.

+0

Вы не должны проверять типы, подобные этому; это невероятно бесстрашно. Если вы * должны *, вы должны проверить на 'basestring', а не' str' – sapi

+1

@sapi unpythonic, или, тем не менее, вы хотите определить, что я показываю, отвечает на вопрос OP. Если эти конструкции существуют, я думаю, по какой-то причине. – nbro

+0

@sapi В этом случае проверка на 'str' отлично, или я ошибаюсь? – nbro

0

Нет, вы не могли, питон является динамическим, но не статична, поэтому он не мог знать тип аргумента в «время компиляции», вместо этого, вы можете проверить тип ввода - assert.

def fun(string): 
    assert isinstance(string, basestring) # we usually check if it type is basestring as this works fine for both ASCII string and Unicode. 
    string = string + "A" 
    return string 


if __name__ == '__main__': 
    fun(2) 
Смежные вопросы