質問

次のように Python で変数を宣言することは可能ですか?

var

それでNoneに初期化されましたか?Python ではこれが可能のようですが、アクセスするとすぐにクラッシュします。これは可能でしょうか?そうでない場合は、なぜですか?

編集:次のような場合にこれを実行したいと思います。

value

for index in sequence:

   if value == None and conditionMet:
       value = index
       break

重複

関連している

役に立ちましたか?

解決

ちょうどこれをしない理由ます:

var = None

Pythonは動的であるので、あなたは物事を宣言する必要はありません。彼らは、彼らが割り当てられている最初の範囲で自動的に存在します。だから、あなたが必要とするすべては、上記のように定期的に古い代入文です。

あなたが初期化されていない変数で終わることは決してないだろうので、

これは、いいです。しかし、注意してください - これはあなたがの誤っの初期化された変数で終わるしないことを意味するものではありません。あなたがNoneに何かを初期化した場合、それはあなたが本当に欲しいものだことを確認し、そしてできれば、より意味のあるものを代入します。

他のヒント

ぜひ読んでいただくことをお勧めします 他の言語には「変数」があります (関連リンクとして追加しました) – 2 分で、Python には「変数」ではなく「名前」があることがわかります。

val = None
# ...
if val is None:
   val = any_object

私はあなたが何をしようとしてわかりません。 Pythonは非常に動的な言語です。あなたが実際に割り当てるか、またはそれらを使用するつもりまでは通常の変数を宣言する必要はありません。私は何がやりたいことだけだと思います。

foo = None

は変数Noneに値fooが割り当てられます。

EDIT:あなたはを本当にのやりたいように見えるだけで、この次のとおりです。

#note how I don't do *anything* with value here
#we can just start using it right inside the loop

for index in sequence:
   if conditionMet:
       value = index
       break

try:
    doSomething(value)
except NameError:
    print "Didn't find anything"

それはそれは本当にこのような短いコード例から使用する右のスタイルかどう言うには少し難しいですが、それの仕事をするのより「Python的」な方法です。

編集:以下JFSによってコメントがある(コードを表示するためにここに掲載)

:OPの質問に、

関連はありませんが、上記のコードは、のように書き換えることができます
for item in sequence:
    if some_condition(item): 
       found = True
       break
else: # no break or len(sequence) == 0
    found = False

if found:
   do_something(item)

注:some_condition()は、例外が発生した場合、その後foundが結合していないです
。 注:LEN(シーケンス)== 0は、その後、結合していないitemであれば、

上記のコードは得策ではありません。その目的は、「変数」を「定義された」のみこの場合、実行時に決定することができているかどうか、すなわち、どのように動作するかのローカル変数を説明することです。 好ましい方法:

for item in sequence:
    if some_condition(item):
       do_something(item)
       break

または

found = False
for item in sequence:
    if some_condition(item):
       found = True
       break

if found:
   do_something(item)

Pythonではあなたは、このための変数注釈を使用することができ3.6+ます:

https://www.python.org/dev/peps/pep -0526 /#抽象

PEP 484導入型のヒント、別名、型注釈。その主な焦点は、機能注釈でしたが、それはまた、変数に注釈を付けるタイプのコメントの概念を導入します:

# 'captain' is a string (Note: initial value is a problem)
captain = ...  # type: str

PEP 526(クラス変数とインスタンス変数を含む)変数の型に注釈を付けるためのPythonにシンタックスを追加、代わりにコメントを介してそれらを発現することを目的:

captain: str  # Note: no initial value!

あなたが求めていたものとより直接的にラインであると思われる「それだけではPythonの任意の値を割り当てずに変数を宣言することは可能ですか?」

私は通常

のような形を示して何かに変数を初期化
var = ""

または

var = 0

あなたがそれをインスタンス化するまで、それを初期化していない対象になるだろうされている場合:

var = Var()

あなたは変数が定義されているかどうかを確認したいかどうさて、なぜならばその地元の人々()またはグローバル()アレイにチェックしていませんか?あなたのコードの書き換えます:

for index in sequence:
   if 'value' not in globals() and conditionMet:
       value = index
       break
それはあなたが探しているローカル変数の場合は、

その後、地元の人々(とグローバルを()を置き換えます)。

すべての

まず、あなたはもともと求めてきました質問に対する私の回答

Q:変数は自分のコード内のポイントで定義されている場合はどのように発見しない

A:あなたは、その変数が定義されている行が表示されるまで、ソースファイル内の記事を読むまで

しかし、さらに、あなたはかなりニシキヘビであることで、様々な置換が存在することのコード例を与えてくれました。あなたは条件に一致する要素のためのシーケンスをスキャンする方法後にしているので、ここでいくつかのソリューションがあります:

def findFirstMatch(sequence):
    for value in sequence:
        if matchCondition(value):
            return value

    raise LookupError("Could not find match in sequence")

明らかに、この例では、あなたが達成するために何を望むかに応じて、raisereturn Noneを置き換えることができます。

あなたはこれを行うことが条件にマッチしたすべてのものを

たい場合:

def findAllMatches(sequence):
    matches = []
    for value in sequence:
        if matchCondition(value):
            matches.append(value)

    return matches
それが動作する方法に非常に複雑なので

私はあなたを示す気にしないだろうyieldでこれを行うための別の方法は、あります。

また、これを達成する一つの行方法があります:

all_matches = [value for value in sequence if matchCondition(value)]
私は右のあなたの例を理解していた場合は、

、とにかくif文の「価値」を参照する必要はありません。あなたはそれが何に設定することができ次第、ループの外に破壊しています。

value = None
for index in sequence:
   doSomethingHere
   if conditionMet:
       value = index
       break 

あなたはPythonでCを書きしようとしているように見えます。あなたが順序で何かを見つけたい場合は、Pythonは

のように、それを行うための組み込み関数を持っています
value = sequence.index(blarg)

var = Noneが既に値を割り当てているように、それは良い質問と、残念ながら悪い答えで、スクリプトが複数回実行される場合には、毎回Noneで上書きされます。

これは、割り当てなし定義と同じではありません。私はまだこの問題を回避する方法を把握しようとしています。

var_str = str()
var_int = int()
scroll top