Вопрос о питоне

1

Я читаю это

http://docs.python.org/dev/library/multiprocessing.html

В частности, это

p = multiprocessing.Process(target=time.sleep, args=(1000,))

Я пробовал то же самое, но если я удалю "," после 1000, это не сработает. Итак, мой вопрос в том, что такое семантика, стоящая за args = (1000,) в этом случае? В чем разница, если я помещаю запятую, а не?

p/s: Я считаю, что это фундаментальная проблема, если это возможно, кто-то может указать мне на какое-то дальнейшее чтение, если это возможно? спасибо.

Спасибо.

С уважением, Энди.

Теги:
tuples

4 ответа

11
Лучший ответ

Если вы просто положили (1000), Python предполагает, что вы просто оцениваете выражение как математику, поэтому оно упрощается до 1000. Подумайте о результате 5 + (1000) + 4.

Как только выражение выше упростится до 1009, вот как выглядит ваша строка, как только вещи были упрощены:

p = multiprocessing.Process(target=time.sleep, args=1000)

Вы можете видеть, что это совсем не то же самое. args должен быть кортежем аргументов, а не одним целым числом.

Если вы поместите (1000,), Python может сказать, что вы ищете кортеж, который содержит только один элемент, поскольку это выражение отличается от простого арифметического выражения, поэтому вы в конечном итоге передаете правильную вещь.

2

Это один кортеж. Это синтаксическая бородавка в Python, но подумайте об этом: как вы могли сказать, что (500) - это кортеж, а не только 500? Поскольку круглые скобки также используются для порядка операций в Python, вам нужно некоторое дифференцирование. Вы должны иметь конечную запятую, если у вас только один элемент в кортеже.

2

Это очень просто - интерпретатор python должен иметь возможность сказать разницу между помещением значения в круглые скобки - (1000) - и поместить его в кортеж: (1000,).

0

(1000) интерпретатору просто означает, что он 1000 в наборе скобок. Он имеет идентичные значения (1000 + 1000), и, как вы можете видеть, это не кортеж.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню