2017-03-20 5 views
-5

私はPythonの初心者です。ここに私のファイルがあります:変数を宣言するPythonの構文エラー

contiguous.py:

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

私が実行しよう:

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

なぜエラー?私は何が欠けていますか?

+4

これはPythonではないので... – TemporalWolf

+2

Pythonには変数宣言がないので、エラーが発生していると思います... –

+0

真剣に、公式の[Pythonチュートリアル](https ://docs.python.org/3/tutorial/)。これは非常に優れています。特にプログラミング経験がある場合は特にそうです。 –

答えて

2

Pythonで変数を宣言する必要はありません。インスタンス化するだけです。したがって、arr = []と書くだけで、iは何も書いてはいけません。さらに、ループ構文が正しくありません。 for i in range(len)と記述してください。

0

pythonにはvarキーワードはありません。単にそれを削除します。

変数はで設定されています

variable_x = [] 

また、あなたがpythonで行ごとに複数の変数を設定する方法は次のとおりです。

variable_x, i = [], 0 

また、あなたのループが間違って見えます。それは次のようになります。

for i in range(len): 
+0

設定が変更されました。ありがとう! – meyer9

0

キーワードvarは不要です。 arr配列を作るには、単に実行します。Pythonで

arr = [] 

変数の型を持っていない、唯一のオブジェクトが行います。任意の時点での変数のタイプは、その時点で参照するオブジェクトのタイプです。したがって、上記の行はarrを空のリストに初期化し、効果的にarrをリストにします。また、あなたのコードについてのいくつかの他の考慮事項:配列を値で埋めることを試みています。それを行うにはずっと簡単な方法があります:この場合

arr = [val] * len 

あなたもarr=[]をする必要はありません、あなたの全体の機能は、上記の行で置き換えることができます。

+0

'[val] * len'は、特に新しいプログラマーにとっては悪い考えです。なぜなら、' val'が不変である場合にのみ機能するからです。 – TemporalWolf

0

Pythonで変数が宣言されているため、Pythonではvarと言う必要はありません。あなたはただarr = []です。 iが変数を参照しているため、変数に代入した後に, iと言ってはいけません。 iを後で割り当てるので、実際にはこれを行う必要はありません。 for i in range(len)も使用してください。

+2

** Pythonで変数宣言がありません** –

+0

@ juanpa.arrivillaga **それは私が言ったことです** –

+0

いいえ、それは文字通りあなたが言ったことではありません。あなたは "変数を宣言するために' var'を言う必要はないと書いています。そして、あなたは '後に'私は 'を宣言してから..."と書いています。しかし** Python **には変数宣言はありません。名前は、割り当てられた時点で存在します。 –

1

[OK]を、Pythonであなたの関数は次のとおりです。

と同等です
def fillArray(len, val): 
    arr = [] 
    for _ in range(len): 
     arr.append(val) 
    return arr 

:Pythonはpass by assignmentあるので、あなたが作るしようとした場合:valmutableであれば、両方の危険な

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

空リストの配列は、fillArray(len, [])を介して、あなたは悪い一日になります。

+1

私は「共有によって呼び出す」という用語を好んでいます...共有は気にしているからです! –

+0

@ juanpa.arrivillagaそれは公式の用語になるはずです。 Fredrik Lundhのエフェット記事[オブジェクトによる呼び出し](http://effbot.org/zone/call-by-object.htm)は、シノニムとして共有することで言及しています...最終的には、誰かのためのよりよい情報源かもしれませんトピックで混乱している。 – TemporalWolf

+1

Barbara Liskovが[CLU](https://en.wikipedia.org/wiki/CLU_(programming_language))用に発明した言葉です。しかし、それはむしろ未使用の用語です。確かに、Javaでは、彼らは値打ちを言います!その言語で導入された他のものはイテレータとコンストラクタです! –

関連する問題