2017-03-20 5 views
-5

Ich bin neu in Python. Hier ist meine Datei:Python-Syntaxfehler deklariert Variable

contiguous.py:

def fillArray(len, val): 
    var arr = [], i 
    for i = 0; i < len; i++: 
     arr.append(val) 
    return arr 

Ich versuche auszuführen:

$ python contiguous.py 
    File "contiguous.py", line 2 
    var arr = [], i 
     ^
SyntaxError: invalid syntax 
$ python -V 
Python 3.6.0 

Warum der Fehler? Was vermisse ich?

+4

Weil das nicht python ist ... – TemporalWolf

+2

Nun, da Python keine Variablendeklarationen hat, würde ich hoffen, dass Sie einen Fehler bekommen ... –

+0

Ernsthaft, werfen Sie einen Blick auf das offizielle [Python Tutorial] (https : //docs.python.org/3/tutorial/). Es ist sehr gut, besonders wenn Sie bereits Programmiererfahrung haben. –

Antwort

2

Sie müssen keine Variable deklarieren, um sie in Python zu verwenden. Sie instanziieren Sie einfach. So würden Sie nur arr = [] und nichts für i schreiben wollen. Außerdem ist Ihre Schleifensyntax falsch. Sie sollten for i in range(len) schreiben.

0

Es gibt kein var Schlüsselwort in Python. Einfach das entfernen.

Variablen werden mit:

variable_x = [] 

Auch die Art und Weise Sie mehr als eine Variable pro Zeile in Python gesetzt ist:

variable_x, i = [], 0 

Auch Ihre Schleife falsch aussieht. Es sollte sein:

for i in range(len): 
+0

Geändert, um festzulegen. Vielen Dank! – meyer9

0

Sie brauchen nicht das Schlüsselwort var. Um arr ein Array zu machen, gerade tun:

arr = [] 

Variablen in Python keine Typen haben, werden nur Objekte tun. Der Typ einer Variablen zu einem bestimmten Zeitpunkt ist der Typ des Objekts, auf das sie sich in diesem Moment beziehen. Die obige Zeile initialisiert also arr in eine leere Liste, wodurch eine Liste wird. Außerdem einige andere Überlegungen zu Ihrem Code: Sie versuchen, ein Array mit einem Wert zu füllen. Es gibt eine viel einfacher Weg, es zu tun:

arr = [val] * len 

In diesem Fall brauchen Sie nicht einmal arr=[], Ihre ganze Funktion zu tun oben durch die Linie ersetzt werden.

+0

'[val] * len' ist normalerweise eine schlechte Idee, besonders für neue Programmierer, weil es nur funktioniert, wenn' val' unveränderlich ist. – TemporalWolf

0

In Python müssen Sie nicht sagen, var Variablen zuweisen, da keine Variablendeklaration in Python ist. Sie nur arr = []. Sie sollten auch nicht , i nach der Zuweisung an die Variable sagen, weil i Referenzieren einer Variablen wäre nicht vorhanden. Da Sie später i zuweisen, müssen Sie das eigentlich gar nicht tun. Verwenden Sie auch for i in range(len).

+2

** es gibt keine Variablen-Deklarationen in Python ** –

+0

@ juanpa.arrivillaga ** das ist wörtlich, was ich sagte ** –

+0

Nein, das ist * nicht * wörtlich was du gesagt hast. Du hast dir geschrieben, dass du "Var" nicht brauchen musst, um Variablen zu deklarieren ", und du hast" geschrieben, da du 'i' später erklärst ..." beide Aussagen, die implizieren, dass eine Variable "deklariert" wurde. Aber ** es gibt keine Variablendeklaration in Python **. Namen entstehen, wenn sie zugewiesen werden. –

1

Ok, Ihre Funktion in Python ist:

def fillArray(len, val): 
    arr = [] 
    for _ in range(len): 
     arr.append(val) 
    return arr 

, die gleich ist:

def fillArray(len, val): 
    return [val] * len 

Welche beide gefährlich sind, wenn valmutable ist: Python pass by assignment ist, also, wenn Sie versuchen, zu machen ein Array von leeren Listen, über fillArray(len, []), werden Sie einen schlechten Tag haben.

+1

Ich bevorzuge den Begriff "call by sharing" ... weil Sharing fürsorglich ist! –

+0

@ juanpa.arrivillaga Vielleicht sollte das der offizielle Begriff werden. Fredrik Lundhs Effbot-Artikel [Call by object] (http://effbot.org/zone/call-by-object.htm) erwähnt den Aufruf durch Teilen als Synonym ... letztendlich könnte das eine bessere Quelle für jemanden sein, der sein könnte verwirrt durch das Thema. – TemporalWolf

+1

Nun, es ist der Begriff von Barbara Liskov, als sie ihn für [CLU] (https://en.wikipedia.org/wiki/CLU_ (Programmiersprache)) erfand. Aber es ist ein ziemlich unbenutzter Begriff. In Java sagen sie nur Call-by-Value! Andere Dinge, die in dieser Sprache eingeführt werden, sind Iteratoren und Konstruktoren! –

Verwandte Themen