2012-11-12 2 views
6

Poiché Python utilizza la spaziatura delle schede per indicare l'ambito (e come tale, non ha end di simboli }), ciò limita la lingua in qualche modo dall'avere una particolare funzionalità?Come lingua, Python è limitato a causa di nessuna istruzione di fine?

Nota: non sto parlando di preferenze personali sullo stile di codifica, sto parlando della limitazione del linguaggio reale come diretta conseguenza del non avere una dichiarazione end?

Per esempio, it appears by a post directly from Guido che la mancanza di multilinea Lamba di causa di Python non avere un end/} simbolo di terminazione?

In tal caso, quali altre limitazioni Python ci sono a causa di questa decisione di progettazione del linguaggio di utilizzare il rientro?


Aggiornamento:

Si prega di notare questa domanda non si tratta di Lambda di e tecnicamente, nemmeno Python per sé. Riguarda la programmazione del linguaggio di progettazione ... e quali limitazioni ha un linguaggio di programmazione quando è progettato per avere un'indentazione (al contrario delle istruzioni finali) rappresentano un ambito di blocco.

+0

http://stackoverflow.com/questions/1233448/no-multiline-lambda-in-python-why-not – dm03514

+1

In linea di principio, un lambda può avere un elenco di espressioni lunghe arbitrarie, quindi non vedo perché è limitativo .... –

+0

Questa domanda non riguarda Lamba, riguarda "quali limitazioni del pitone ci sono a causa della decisione di design del linguaggio di usare il rientro" – nickb

risposta

12

Non mancano end/}: una fine è rappresentata da una "deduzione" alla profondità precedente. Quindi non c'è alcuna limitazione in alcun modo.

Esempio:

x = 123 
while x > 10: 
    if x % 21: 
     print("x") 
    print("y") 
print("z") 

A "inizia" corrisponde all'aumento del livello di indentazione (dopo while, dopo if).

Una "fine" corrisponde alla diminuzione del livello di indentazione (dopo i rispettivi print() s).

Se si omette lo print("y"), si ha una "deduzione" al livello più alto, che corrisponde ad avere due "end" successivi.

+0

Mi picchia. : p – Omnikrys

+0

Guido stesso non è d'accordo con questo approccio. http://www.artima.com/weblogs/viewpost.jsp?thread=147358 – nickb

+0

Esistono alcune limitazioni, ad esempio deve essere una singola espressione e non può contenere alcuna parola chiave. –

0

Uno dei maggiori limiti (se lo si chiamerebbe così) è che non è possibile utilizzare schede e spazi nello stesso programma.

E non dovresti. Mai.

Non ci sono limiti strutturali evidenti, tranne forse durante l'analisi di un file sorgente Python (analisi, non interpretando):

def foo(bar): 
     # If bar contains multiple elements 
    if len(bar) > 1: 
      return bar 

Questo è codice Python perfettamente legale, tuttavia, quando l'analisi del file, si può correre nei guai cercando di capire a quale livello di indentazione appartiene il commento.

2

La risposta a questa domanda varia da qualche parte tra lo zucchero sintattico e lo stile del linguaggio, cioè come esprimere un problema elegante e conforme alla filosofia del linguaggio. Qualsiasi linguaggio completo di turing, anche linguaggio assembly e C - sicuramente privo di qualsiasi supporto lambda - può risolvere qualsiasi problema. Lambda consente solo un diverso (probabilmente più elegante se si guarda dal punto di vista del linguaggio funzionale) fraseggio di materiale anche statico usando la definizione di una funzione standard. Quindi non posso riconoscere una limitazione qui oltre dover codificare in modo diverso.

0

Cosa intendi per "limitazione"? Vuoi dire che ci sono calcoli che Python non può eseguire in altre lingue? In tal caso, la risposta è sicuramente No. Python è turing complete.

Intendi dire che la mancanza di istruzioni finali modifica il modo in cui i calcoli sono espressi in Python? In tal caso, la risposta è "per lo più non". È necessario comprendere che la deduzione di Python è un'istruzione di fine; è una sequenza di byte che l'interprete riconosce come la fine di un blocco.

Tuttavia, come altri hanno menzionato, l'uso del rientro per indicare i blocchi è scomodo quando si tratta di funzioni inline (Python's lambda). Ciò significa che lo stile dei programmi Python potrebbe essere leggermente diverso da quello di JavaScript, ad esempio (dove è comune scrivere grandi funzioni inline).

Detto questo, molte lingue non hanno nemmeno funzioni inline, quindi non definirei questa limitazione.