2013-09-03 31 views
5

python -mtimeit çalışıyordum, bu yüzden python -mtimeit "n = 0; while n < 10: pass" koydum Sonra geçersiz bir sözdizimi hatası oluştu. noktalı virgülle aynı ve döngü için. Bununla birlikte, noktalı virgül ve döngüleri tek tek denediğimde, ancak. Her ikisi de iyi çalıştı.Python komut satırı bağımsız değişkeni noktalı virgül hatası

python -c "for i in range(10): print(n)" 
python -c "n = 1; n = 2; print(n)" 

Bu neden böyledir ve nasıl sürümüyle gelen timeit iken döngü test edebilirsiniz? Çok teşekkür ederim!

+0

'python -mtimeit -c" n = 1; n = 2; print (n) "'? –

+0

Bu kadar özür dileme gerek yok! –

cevap

9

while, for önce noktalı virgülle olamaz, bunlar tek bir satırda olmak gerekir. Eğer Python grammar baktıysanız:

compound_stmt ::= if_stmt 
        | while_stmt 
        | for_stmt 
        | try_stmt 
        | with_stmt 
        | funcdef 
        | classdef 
        | decorated 
suite   ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT 
statement  ::= stmt_list NEWLINE | compound_stmt 
stmt_list  ::= simple_stmt (";" simple_stmt)* [";"] 

Eğer compound_stmt parçası olan ifadeleri yalnız bire bir hat olması gerektiğini göreceksiniz.

simple_stmt ::= expression_stmt 
       | assert_stmt 
       | assignment_stmt 
       | augmented_assignment_stmt 
       | pass_stmt 
       | del_stmt 
       | print_stmt 
       | return_stmt 
       | yield_stmt 
       | raise_stmt 
       | break_stmt 
       | continue_stmt 
       | import_stmt 
       | global_stmt 
       | exec_stmt 
1

Eğer bir senaryoda yazıyorsanız, neden onu gerçek bir python programında yaptığınız gibi girmiyorsunuz? Şunun gibi:

python -mtimeit " 
n = 0 
while n < 10: 
    pass" 
2

timeit iki parametre alabilir: Kurulum kodu ve zaman kod noktalı virgül ile ayrılabilir tek ifadeleri simple_stmt grubuz.

python -mtimeit "n = 0" "while n < 10: pass" 

Ayrıca, bu passn += 1 olarak değişmelidir veya sonsuz döngüye olacak.

+0

'timeit' bir argüman ile [fine] (http://docs.python.org/2/library/timeit.html#command-line-interface) çalışır. Sorun sözdiziminden biri. – Cairnarvon

+0

@Cairnarvon: Açıkçası, OP'nin verdiği iki argümanla çalışırken, OP'nin verdiği tek argümanla iyi çalışmıyor. İyi iş, problemi çözen tek cevabı aşağı oylama. –

+0

Cevabınız hiçbir şeyi çözmez, çünkü sorunun noktasını kaçırır. Sorun, * zamanın * olmadığını, yani * isteğe bağlı olarak * birden fazla argüman alabileceğinin, hatta ilk etapta “timeit” in bile olabileceğidir. Diğer iki cevap doğru bir çözüm ve gerçek problemin bir açıklamasını verir. – Cairnarvon

0

seçilen cevap süper neden, ama bu herhangi bir işletim sistemi altında çalışılan nasıl soru

cevaptır (windows cmd beri çok hatlı ifadeleri izin vermez) ele: exec

Herhangi bir döngüyü exec ifadesine yerleştirmeniz gerekir.

Örnekler: (Python 2)

python -c "i = 3; while i:print i; i-=1" 

ise

python -c "i = 3; exec 'while i:print i;i-=1'" 

eser doğru bir yazım hatasıdır.

İlgili konular