私はPythonを学習している最中で、このpass
ステートメントに関するセクションにたどり着きました。私が使用しているガイドNull
では、プレースホルダーとして一般的に使用されるステートメントであると定義しています。
それがどういう意味かはまだよくわかりません。誰かが私にpass
ステートメントが使用される単純な/基本的な状況を教えてもらえますか、なぜそれが必要なのですか?
pass
、except
ブロックは非常に便利です。
私はPythonを学習している最中で、このpass
ステートメントに関するセクションにたどり着きました。私が使用しているガイドNull
では、プレースホルダーとして一般的に使用されるステートメントであると定義しています。
それがどういう意味かはまだよくわかりません。誰かが私にpass
ステートメントが使用される単純な/基本的な状況を教えてもらえますか、なぜそれが必要なのですか?
pass
、except
ブロックは非常に便利です。
回答:
まだ実装したくないいくつかのメソッドを持つ新しいクラスを設計しているとします。
class MyClass(object):
def meth_a(self):
pass
def meth_b(self):
print "I'm meth_b"
を省略したpass
場合、コードは実行されません。
次に、以下を取得します。
IndentationError: expected an indented block
要約すると、pass
ステートメントは特に何もしませんが、ここに示すように、プレースホルダーとして機能できます。
pass
、それが何をするのかはまだよくわかりません。これを本番コードで使用することはありますか?あなたの例から、私はそれを実装する準備ができるまでそのメソッドを追加しないことを選ぶか、または単にそうするでしょうreturn
。
Pythonは(後にコードブロックこと構文要件有しif
、except
、def
、class
等)は空にすることはできませんが。ただし、空のコードブロックは、以下の例のように、私が見た中で最も頻繁に使用されるさまざまな状況で役立ちます。
したがって、コードブロックで何も起こらないはずの場合は、そのpass
ようなブロックがを生成しないようにするためにa が必要ですIndentationError
。または、任意のステートメント(Ellipsis
リテラル...
や文字列などの評価対象の用語だけを含む、ほとんどの場合はdocstring)を使用できますが、pass
実際には何も起こらないはずであり、実際に評価する必要はなく、 (少なくとも一時的に)メモリに保存されます。
特定のタイプの(すべてまたは)を無視する(Exception
例:)xml
:
try:
self.version = "Expat %d.%d.%d" % expat.version_info
except AttributeError:
pass # unknown
注:から、次の例のように、昇給のすべてのタイプを無視しpandas
、それはまた、おそらく、発信者に渡されるべき例外をキャッチしているため、一般的に、悪い習慣と考えられ、例えば、KeyboardInterrupt
またはSystemExit
(あるいはHardwareIsOnFireError
-どのようにあなたはありません知っています特定のエラーが定義されているカスタムボックスで実行している場合、一部の呼び出し側アプリケーションはこのことについて知りたいと思いますか?)。
try:
os.unlink(filename_larry)
except:
pass
代わりに、except Error:
またはこの場合は少なくとも使用するexcept OSError:
方がはるかに優れたプラクティスと見なされます。インストールしたすべてのpythonモジュールを簡単に分析すると、すべてのexcept ...: pass
ステートメントの10%以上がすべての例外をキャッチしているため、Pythonプログラミングでは依然として頻繁なパターンです。
新しい動作を追加しない例外クラスの派生(例:)scipy
:
class CompileError(Exception):
pass
同様に、抽象基本クラスとして意図されたクラスは、多くの場合__init__
、サブクラスが派生するはずの明示的な空のメソッドまたは他のメソッドを持っています。(例pebl
)
class _BaseSubmittingController(_BaseController):
def submit(self, tasks): pass
def retrieve(self, deferred_results): pass
そのコードをテストすると、(からのmpmath
)結果を気にすることなく、いくつかのテスト値に対して適切に実行されます。
for x, error in MDNewton(mp, f, (1,-2), verbose=0,
norm=lambda x: norm(x, inf)):
pass
クラスまたは関数の定義では、多くの場合、ブロック内の唯一のものとして実行される義務的なステートメントとして、docstringがすでに配置されています。そのような場合、「これは本当に何もしないことを意図している」と言うために、ブロックはdocstring pass
に加えて含むかもしれません。例えばpebl
:
class ParsingError(Exception):
"""Error encountered while parsing an ill-formed datafile."""
pass
いくつかのケースでは、pass
私は個人的に好むが、「このメソッド/クラス/ IF-ブロック/ ...が、まだ実装されていないが、これはそれを行うための場所になります」と言うためのプレースホルダとして使用されるEllipsis
リテラルを...
するために、これと前の例の意図的な「no-op」を厳密に区別してください。(EllipsisリテラルはPython 3でのみ有効な式であることに注意してください)
たとえば、モデルを大まかに書くと、次のようになります。
def update_agent(agent):
...
他の人が持っているかもしれない場所
def update_agent(agent):
pass
前
def time_step(agents):
for agent in agents:
update_agent(agent)
update_agent
後で関数に入力することを思い出させますが、残りのコードが意図したとおりに動作するかどうかを確認するために、いくつかのテストをすでに実行しています。(この場合の3番目のオプションraise NotImplementedError
はです。これは特に次の2つの場合に役立ちます。「この抽象メソッドはすべてのサブクラスで実装する必要があります。この基本クラスで定義する一般的な方法はありません」または「この関数は、この名前は、このリリースではまだ実装されていませんが、これはそのシグネチャがどのようになるかを示しています」)
実装されていない関数のプレースホルダーとしての使用に加えpass
て、if-elseステートメントへの入力に役立ちます(「明示的は暗黙的よりも優れています。」)
def some_silly_transform(n):
# Even numbers should be divided by 2
if n % 2 == 0:
n /= 2
flag = True
# Negative odd numbers should return their absolute value
elif n < 0:
n = -n
flag = True
# Otherwise, number should remain unchanged
else:
pass
もちろん、この場合、おそらくreturn
代入の代わりに使用しますが、変更が必要な場合は、これが最もよく機能します。
ここでの使用は、pass
将来のメンテナ(自分も含む!)に、条件文の外に冗長なステップを置かないよう警告するのに特に役立ちます。上記の例でflag
は、は具体的に言及された2つのケースで設定されていますが、else
- ケースでは設定されていません。を使用しない場合pass
、将来のプログラマーflag = True
は条件の外に移動する可能性があります。したがってflag
、すべての場合で設定になります。
別のケースは、ファイルの下部によく見られるボイラープレート関数です。
if __name__ == "__main__":
pass
一部のファイルでは、pass
後で簡単に編集できるようにそのままにしておき、ファイルを単独で実行しても何も起こらないことを明示することをお勧めします。
最後に、他の回答で述べたように、例外がキャッチされたときに何もしないと便利な場合があります。
try:
n[i] = 0
except IndexError:
pass
flag = False
に、if ... elif
ブロックの前に設定する必要があります。2番目の例に関しては、if __name__ == "__main__": pass
直接実行したときに何もしないPythonファイルの大部分に追加する必要があるのは奇妙なようです(これは、モジュールコードを記述している場合です)。Python> = 3.0では、「後で終了する」ブロックを示す...
代わりに(省略pass
記号)を使用する必要があります。
考えられる最善かつ最も正確な方法pass
は、インタプリタに何もしないように明示的に指示する方法としてです。同様に次のコード:
def foo(x,y):
return x+y
「関数foo(x、y)を呼び出した場合、ラベルxとyが表す2つの数値を合計し、結果を返す」を意味します。
def bar():
pass
「関数bar()を呼び出しても、何もしない」という意味です。
他の答えはかなり正しいですが、プレースホールドを含まないいくつかの事柄にも役立ちます。
たとえば、最近手がけた少しのコードでは、2つの変数を除算する必要があり、除数がゼロになる可能性がありました。
c = a / b
明らかに、bがゼロの場合、ZeroDivisionErrorを生成します。この特定の状況では、bがゼロの場合、cをゼロのままにすることが望ましい動作だったので、次のコードを使用しました。
try:
c = a / b
except ZeroDivisionError:
pass
別の、あまり標準的ではない使用法は、デバッガーにブレークポイントを配置するための便利な場所としてです。たとえば、for ... inステートメントの20回目の反復で、少しコードをデバッガーに割り込ませたいと思っていました。そう:
for t in range(25):
do_a_thing(t)
if t == 20:
pass
パスにブレークポイントを設定します。
def bar(): pass
「絶対に何も」しない。それでもNone
暗黙的にを返します。
「そのまま」使用できる一般的な使用例は、タイプを作成するためにクラスをオーバーライドすることです(それ以外はスーパークラスと同じです)。たとえば、
class Error(Exception):
pass
したがって、Error
例外を発生させてキャッチすることができます。ここで重要なのは、内容ではなく、例外のタイプです。
pass
Pythonでは基本的に何もしませんが、コメントとは異なり、インタプリタによって無視されません。したがって、プレースホルダーにすることで、多くの場所でそれを利用できます。
1:クラスで使用可能
class TestClass:
pass
2:ループおよび条件付きステートメントで使用できます。
if (something == true): # used in conditional statement
pass
while (some condition is true): # user is not sure about the body of the loop
pass
3:関数で使用できます:
def testFunction(args): # programmer wants to implement the body of the function later
pass
pass
プログラマーが現時点で実装を望まないが、後で使用できる特定のクラス/関数/条件ステートメントを作成したい場合に主に使用されます。Pythonインタプリタは空白または実装されていないクラス/関数/条件ステートメントを許可しないため、エラーが発生します。
IndentationError:インデントされたブロックが期待されます
pass
このようなシナリオで使用できます。
パスはNOP(No Operation)操作を意味すると言うことができます。この例の後で、明確な画像が得られます:-
Cプログラム
#include<stdio.h>
void main()
{
int age = 12;
if( age < 18 )
{
printf("You are not adult, so you can't do that task ");
}
else if( age >= 18 && age < 60)
{
// I will add more code later inside it
}
else
{
printf("You are too old to do anything , sorry ");
}
}
これをPythonでどのように記述するか:-
age = 12
if age < 18:
print "You are not adult, so you can't do that task"
elif age >= 18 and age < 60:
else:
print "You are too old to do anything , sorry "
しかし、elifの後にインデントされたブロックが必要なため、コードはエラーになります。passキーワードの役割は次のとおりです。
age = 12
if age < 18:
print "You are not adult, so you can't do that task"
elif age >= 18 and age < 60:
pass
else:
print "You are too old to do anything , sorry "
さて、あなたにはそれが明らかだと思います。
&&
オペレータは、Pythonには存在しません
私はテストをスタブするときにそれを使いたいです。何をテストしたいかはよく知っていますが、その方法がよくわかりません。テストの例は、sebastian_oeが示唆したように見えます
class TestFunctions(unittest.TestCase):
def test_some_feature(self):
pass
def test_some_other_feature(self):
pass
assert False
またはassert 0
この方法あなたは常にあなたが実装を追加する必要があり注目されるであろう:)
正直なところ、公式のPythonドキュメントはそれを非常によく説明し、いくつかの例を提供していると思います:
パス文は何もしません。文が構文的に必要であるがプログラムはアクションを必要としない場合に使用できます。例えば:
>>> while True: ... pass # Busy-wait for keyboard interrupt (Ctrl+C) ...
これは通常、最小限のクラスを作成するために使用されます。
>>> class MyEmptyClass: ... pass ...
新しいコードで作業しているときの関数または条件付きボディのプレースホルダーとして使用できる別の場所パスは、より抽象的なレベルで考え続けることができるようにします。パスは黙って無視されます。
>>> def initlog(*args): ... pass # Remember to implement this! ...
本が言ったように、私はこれを一時的なプレースホルダーとしてのみ使用します、すなわち、
# code that does something to to a variable, var
if var == 2000:
pass
else:
var += 1
後でシナリオに記入します var == 2000
Passは、ignoreを参照します。...単純です....指定された条件がtrueで次のステートメントがpassの場合、その値または反復を無視して、次の行に進みます.....例
For i in range (1,100):
If i%2==0:
Pass
Else:
Print(i)
出力:1から100までのすべての奇数を出力します
これは、偶数の係数がゼロに等しいため、その数を無視して次の数に進むためです。奇数の係数はゼロに等しくないため、ループのその他の部分が実行され、その出力が出力されます。
SyntaxError
。また、これはpass
単に行うことができるので、適切な使用法ではありませんfor i in range(1,100):print(i)if i%2else""
これは、複数のデータタイプ(Rでそれと呼んでいるものですが、命名法が間違っていると申し訳ありません)のリストから特定のデータを抽出し、整数/数値のみを抽出し、文字データは抽出しない例です。 。
データは次のようになりました。
>>> a = ['1', 'env', '2', 'gag', '1.234', 'nef']
>>> data = []
>>> type(a)
<class 'list'>
>>> type(a[1])
<class 'str'>
>>> type(a[0])
<class 'str'>
私はすべてのアルファベット文字を削除したかったので、データをサブセット化してアルファベットデータを「渡す」ことでマシンにそれを実行させました。
a = ['1', 'env', '2', 'gag', '1.234', 'nef']
data = []
for i in range(0, len(a)):
if a[i].isalpha():
pass
else:
data.append(a[i])
print(data)
['1', '2', '1.234']
Pythonのpassステートメントは、ステートメントが構文的に必要であるが、コマンドやコードを実行したくない場合に使用されます。
passステートメントはnull操作です。実行しても何も起こりません。パスは、コードが最終的に行く場所でも役立ちますが、まだ作成されていません(たとえば、スタブなど)。
`例:
#!/usr/bin/python
for letter in 'Python':
if letter == 'h':
pass
print 'This is pass block'
print 'Current Letter :', letter
print "Good bye!"
これにより、次の結果が生成されます。
Current Letter : P
Current Letter : y
Current Letter : t
This is pass block
Current Letter : h
Current Letter : o
Current Letter : n
Good bye!
上記のコードは、letterの値が 'h'の場合、ステートメントまたはコードを実行しません。passステートメントは、コードブロックを作成したときに役立ちますが、不要になりました。
その後、ブロック内のステートメントを削除できますが、コードの他の部分に干渉しないように、ブロックにpassステートメントを残すことができます。
パスは、Pythonのインデントエラーを回避するために使用されます。c、c ++、javaなどの言語を使用する場合、次のような中かっこがあります。
if(i==0)
{}
else
{//some code}
しかし、Pythonでは中括弧の代わりにインデントを使用したため、そのようなエラーを回避するためにpassを使用しています。クイズをプレイしていて、
if(dont_know_the_answer)
pass
プログラム例、
for letter in 'geeksforgeeks':
pass
print 'Last Letter :', letter
pass
、サブクラスのメソッドをオーバーライドして何もしない場合に便利でしょう。