Во-первых, можно также рассмотреть создание процесса получения и проверки входа функция; в той функции можно просто возвратить значение, если его корректные, и продолжают вращаться в в то время как цикл если нет. Это по существу устраняет проблему, которую Вы решили и можете обычно применяться в более общем случае (убегающий из нескольких циклов). Если Вы абсолютно должны сохранить эту структуру в своем коде, и действительно не хотите иметь дело с бухгалтерскими булевскими переменными...
можно также использовать goto следующим образом (использующий модуль Жертв первоапрельской шутки от здесь ):
#import the stuff
from goto import goto, label
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok == "y" or ok == "Y": goto .breakall
if ok == "n" or ok == "N": break
#do more processing with menus and stuff
label .breakall
я знаю, я знаю, "Вы не должны использовать goto" и все это, но он работает хорошо в странных случаях как это.
(a) = (b)
ненадежно. Даже передача двух va_list
is (общедоступная функция будет простой оболочкой), поскольку va_list может быть примерно таким:
typedef __va_list_impl va_list[1];
для которого выполнение va_arg на одном будет изменять другое (я, кажется, помню, что Solaris использовать такие вещи, ах, окна регистров ...). К сожалению, я не знаю верного способа сделать то, что вы хотите.