0

いくつかの人物オブジェクトを作成し、それらのオブジェクトにいくつかのメソッドを適用した以下の部分があります。

class Person:
    def __init__(self, name, age, pay=0, job=None):
        self.name = name
        self.age  = age
        self.pay  = pay
        self.job  = job

    def lastname(self):
        return  self.name.split()[-1]

    def giveraise(self,percent):
        return self.pay *= (1.0 + percent)

if __name__ == '__main__':
    bob = Person('Bob Smith', 40, 30000, 'software')
    sue = Person('Sue Jones', 30, 40000, 'hardware')
    people = [bob,sue]
    print(bob.lastname())
    print(sue.giveraise(.10))

このプログラムを実行すると、これが出力になります-

構文エラー:無効な構文

しかし、以下のコードを使用して実行すると、問題はありません。

if __name__ == '__main__':
    bob = Person('Bob Smith', 40, 30000, 'software')
    sue = Person('Sue Jones', 30, 40000, 'hardware')
    people = [bob,sue]
    print(bob.lastname())
    sue.giveraise(.10)
    print(sue.pay)

2つの場合の違いは何ですか

4

3 に答える 3

5

*=は割り当てであり、割り当てはPythonのステートメントであり、式ではありません。試す:

self.pay *= (1.0 + percent)
return self.pay
于 2012-06-03T02:34:15.897 に答える
1

2番目のバージョンでも無効な構文エラーが発生します。どうやって動かしたのかわかりませんが、giveraise機能を変えたに違いありません。Pythonでは、のようなミューテーターを使用するものを含む割り当ては、*=式ではなくステートメントです。それらには価値がありません。それらには値がないため、関数からそれらを返すことは意味がなく、したがってエラーになります。

于 2012-06-03T02:36:50.833 に答える
0

あなたの問題はこの関数です(どちらの場合もエラーが発生します):

def giveraise(self,percent):
    return self.pay *= (1.0 + percent)

これに変更すると、機能します。

def giveraise(self,percent):
    self.pay *= (1.0 + percent)
    return self.pay

Pythonが構文エラーをスローする理由は完全にはわかりませんが、これが機能することはわかっています。

于 2012-06-03T02:34:12.453 に答える