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)

两种情况有什么区别

4

3 回答 3

5

*=是赋值,赋值是 Python 中的语句,而不是表达式。尝试:

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

即使在第二个版本中,我也会收到无效的语法错误;我不知道你是如何让它工作的,但你一定是改变了giveraise功能。在 Python 中,赋值,包括那些使用 mutator 的赋值,*=是语句,而不是表达式;他们没有价值。由于它们没有价值,因此从函数中返回它们是没有意义的,因此会出现错误。

于 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 回答