В пример из Зед шо'ы изучать Python трудный путь, одно из упражнений показывает следующий код:
next = raw_input("> ")
if "0" in next or "1" in next:
how_much = int(next)
Я'м, имея трудное время понимание смысла в
в данном заявлении. Я'м привыкли использовать если
заявления, например, в JavaScript, где синтаксис-это что-то вроде:
var = 5;
if (var > 3) {
//code to be executed
}
Это если
/ в
заявление (в Python) то же самое, если()` в JavaScript?
Найти ответ на это было сложно, потому что в такой короткий строк, чтобы сузить ответа через поисковик, и я Дон'т знать правильное название для своей работы.
Это зависит от того, далее.
Если это's в строку (как в вашем примере), то " в " проверяет наличие подстроки.
>>> "in" in "indigo"
True
>>> "in" in "violet"
False
>>> "0" in "10"
True
>>> "1" in "10"
True
Если это'с различного рода повторяемое (список, кортеж, набор, словарь...), потом " в " проверяет членство.
>>> "in" in ["in", "out"]
True
>>> "in" in ["indigo", "violet"]
False
В словаре, членство рассматривается как "один из ключей и":
>>> "in" in {"in": "out"}
True
>>> "in" in {"out": "in"}
False
Используя a в B
просто означает `б.содержит(А), который should вернуться, если б включает в себя или нет.
Но, ваш пример выглядит немного странно, он принимает ввод от пользователя и присваивает его целочисленное значение how_much
переменная если записано в "0"
В и в "1"
в.
Поскольку вы утверждаете, используемые в JavaScript:
Питон ["в"] (http://docs.python.org/3/reference/expressions.html#in) оператор похож на JavaScript ["в"] (оператор https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in).
Здесь's некоторые JavaScript-код:
var d = {1: 2, 3: 4};
if (1 in d) {
alert('true!');
}
И эквивалент в Python:
d = {1: 2, 3: 4}
if 1 in d:
print('true!')
С объектами/предсказывает, они'вновь почти идентичны, обе проверки 1
- это ключ объекта/дикт. Большая разница, конечно, заключается в том, что JavaScript-это расхлябанно-набирается, так что'1' В D
будет так же верно.
С массивами/списками, они'вновь очень разные. Массив JS-это объект, и его индексы ключей, так 1 в [3, 4, 5]
будет истина
. Список Python полностью отличается от dict, а его в
оператор проверяет values, не indexes, который имеет тенденцию быть более полезным. И Python распространяется на такое поведение, чтобы все итераторы.
Со строками, они'вновь еще более разные. Строку в JS это'т объект, так что вы получите ошибку TypeError
. Но питон ул
или Unicode
будет проверить, имеет ли второй операнд substring. (Это означает: 1 в '123'это незаконно, потому что
1может'т быть подстрокой ничего, но
'1' в '123'` Это правда.)
С объекты как объекты в JS есть конечно различия, но в Python, объекты являются экземплярами классов, не предсказывает. Так, в JS, 1 В D
будет справедливо для объекта, если у него есть член или метод с именем'1'
, но в Python, это's вверх, чтобы ваш класс, что это значит—Python будет называть д.__содержит__(1)
, тогда, если это не удается, он пытается использовать свой объект как utterable (называя его __ИТЭР__
, и, если это не удается, пытается индексировать его с целыми числами, начиная с 0
).
Также обратите внимание, что в JS's "в", Потому что это'ов на самом деле проверка на предмет членства, делает обычные JS и способ разрешения-порядок поиска, в то время как Python's "в", Потому что это's проверка на ключи дикт, члены последовательности, и т. д., не так. Так что, технически, это's наверное немного ближе к hasOwnProperty
способ, чем в
оператор.
Это может быть очень поздний ответ. в проверяет оператор для членства. То есть, он проверяет, если левый операнд является членом правого операнда. В данном случае, raw_input() возвращает ул. объект, что предоставленные пользователем на стандартный ввод. Итак, если проверяет состояние ли содержит подстроки с "0" или "1" по. Учитывая типажей (инт()) в следующей строке, если условие, по сути, проверяет, если вход содержит цифр 0 или 1.
Может быть, эти примеры помогут проиллюстрировать то, что " в " не. Это в принципе перевести в этот товар в другой пункт?
listOfNums = [ 1, 2, 3, 4, 5, 6, 45, 'j' ]
>>> 3 in listOfNums:
>>> True
>>> 'j' in listOfNums:
>>> True
>>> 66 in listOfNums:
>>> False
Вы привыкли используя JavaScript если
, и я предполагаю, что вы знаете, как это работает.
"в" - это обновления способ реализации итерации. Это'ы должны быть легче для не программных мыслителей принять, но это иногда может сделать его более трудным для программных мыслителей, как ни странно.
Когда вы говорите если X в y
, вы буквально говорите:
"Если х
в М
", который предполагает, что y
имеет индекс. В том, что если
заявление тогда, каждый объект в каждый индекс на y
, проверяется условие.
Аналогично,
для X в y
проходит через х
'ы на Y
, где Y
является то, что режущие элементы.
Думать о "если" ситуации таким образом (псевдокод):
for i in next:
if i == "0" || i == "1":
how_much = int(next)
Он заботится о итерации "далее" для вас.
Удачи в кодировании!
зарезервированное слово "в" и используется для поиска внутри объекта, которые могут быть итерации.
list_obj = ['a', 'b', 'c']
tuple_obj = ('a', 1, 2.0)
dict_obj = {'a': 1, 'b': 2.0}
obj_to_find = 'c'
if obj_to_find in list_obj:
print('Object {0} is in {1}'.format(obj_to_find, list_obj))
obj_to_find = 2.0
if obj_to_find in tuple_obj:
print('Object {0} is in {1}'.format(obj_to_find, tuple_obj))
obj_to_find = 'b'
if obj_to_find in dict_obj:
print('Object {0} is in {1}'.format(obj_to_find, dict_obj))
Выход:
Object c is in ['a', 'b', 'c']
Object 2.0 is in ('a', 1, 2.0)
Object b is in {'a': 1, 'b': 2.0}
Однако
cannot_iterate_over = 5.5
obj_to_find = 5.5
if obj_to_find in cannot_iterate_over:
print('Object {0} is in {1}'.format(obj_to_find, cannot_iterate_over))
кину
Traceback (most recent call last):
File "/home/jgranger/workspace/sandbox/src/csv_file_creator.py", line 43, in <module>
if obj_to_find in cannot_iterate_over:
TypeError: argument of type 'float' is not iterable
В вашем случае, raw_input(" и> " в) возвращает итерируемый объект или он будет бросать исключение TypeError
Здесь raw_input
это строка
, так что если вы хотели проверить, если var>3, то вы должны конвертировать рядом с двойной, т. е.
поплавок(рядом) и делать как бы вы поступили, если поплавок(далее)>3`:, но в большинстве случаев