3

コンピューター サイエンス クラスの紹介では、名前空間について学習しています。そして、数学のようなモジュールをインポートするときの概念を理解しています。次に、名前空間とその名前空間の下のクラス属性をインポートしていますが、プロセスの実行は非常に混乱しています。これは、実行を開始する方法がわからない質問の1つです。

name_add(a,b)例外処理 (単純なtry/exceptステートメント) を使用して 2 つのオブジェクト a と b を追加し、結果を返す関数 を作成します。ユーザーが定義されていない型で関数を呼び出した場合、関数は、 and+ operatorの間の加算演算子が定義されていないことを示すメッセージを出力する必要があります(それらの型が何であれ)......ltype(a)type(b)

この関数がどのように見えるべきか、または彼らが初心者の言葉で何を求めているのかを順を追って説明できる人がいれば、私はそれを非常に感謝しています.

4

3 に答える 3

2
>>> foo = 1
>>> 
>>> def bar():
...     global foo
...     foo = 2
... 
>>> bar()
>>> foo
2

グローバル変数を変更しようとしていない場合は、単に次を使用します。

# Inside yourfuncs.py
def adder(a, b):
    """
    Returns the sum of a and b, or raises an exception.
    """
    try:
        return a + b
    except TypeError:
        print 'Oops'
        raise

それで:

>>> import yourfuncs
>>> x = adder(1, 2)
>>> x
3
>>> addr({}, 1)
Oops
# traceback omitted
TypeError: unsupported operand type(s) for +: 'dict' and 'int'

エラーの伝播を止めていないことに注意してください。機能する場合は合計を返さず、機能しない場合はエラー文字列を返します。それは悪い設計です。独自の例外を発生させたい場合は、それは良い考えです。

于 2013-05-22T20:20:39.163 に答える
2

関数の外で宣言された変数を変更するには、関数でglobalキーワードを使用する必要があります。

a = 1
def mod(b):
    global a
    a = b

mod(2)
print a
#prints 2

注:これは不変型 (文字列、数値、ブール値、タプル) に適用されますが、リストには次のように適用されます。

a = [1,2]
def mod(b):
    a[0] = b

mod(2)
print a
#prints [2,2]

質問の本文で言及した問題 (タイトルとはまったく異なる) については、Ronald Smith の回答をお勧めします。

于 2013-05-22T20:20:47.113 に答える