Я читаю это
http://docs.python.org/dev/library/multiprocessing.html
В частности, это
p = multiprocessing.Process(target=time.sleep, args=(1000,))
Я пробовал то же самое, но если я удалю "," после 1000, это не сработает. Итак, мой вопрос в том, что такое семантика, стоящая за args = (1000,) в этом случае? В чем разница, если я помещаю запятую, а не?
p/s: Я считаю, что это фундаментальная проблема, если это возможно, кто-то может указать мне на какое-то дальнейшее чтение, если это возможно? спасибо.
Спасибо.
С уважением, Энди.
Если вы просто положили (1000)
, Python предполагает, что вы просто оцениваете выражение как математику, поэтому оно упрощается до 1000. Подумайте о результате 5 + (1000) + 4
.
Как только выражение выше упростится до 1009
, вот как выглядит ваша строка, как только вещи были упрощены:
p = multiprocessing.Process(target=time.sleep, args=1000)
Вы можете видеть, что это совсем не то же самое. args
должен быть кортежем аргументов, а не одним целым числом.
Если вы поместите (1000,)
, Python может сказать, что вы ищете кортеж, который содержит только один элемент, поскольку это выражение отличается от простого арифметического выражения, поэтому вы в конечном итоге передаете правильную вещь.
Это один кортеж. Это синтаксическая бородавка в Python, но подумайте об этом: как вы могли сказать, что (500)
- это кортеж, а не только 500? Поскольку круглые скобки также используются для порядка операций в Python, вам нужно некоторое дифференцирование. Вы должны иметь конечную запятую, если у вас только один элемент в кортеже.
Это очень просто - интерпретатор python должен иметь возможность сказать разницу между помещением значения в круглые скобки - (1000)
- и поместить его в кортеж: (1000,)
.
(1000)
интерпретатору просто означает, что он 1000 в наборе скобок. Он имеет идентичные значения (1000 + 1000), и, как вы можете видеть, это не кортеж.