我有下面的部分创建了很少的人物对象,并对这些物体应用了一些方法。
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)
两种情况有什么不同
答案 0 :(得分:5)
*=
是一个赋值,赋值是Python中的语句,而不是表达式。尝试:
self.pay *= (1.0 + percent)
return self.pay
答案 1 :(得分:1)
即使在第二个版本中,我也会收到无效的语法错误;我不知道你是如何工作的,但你必须更改giveraise
功能。在Python中,赋值(包括使用*=
等变换器的赋值是语句,而不是表达式;他们没有价值。由于它们没有值,因此从函数返回它们是没有意义的,因此错误。
答案 2 :(得分:0)
你的问题是这个功能(我在两种情况下都会出错):
def giveraise(self,percent):
return self.pay *= (1.0 + percent)
将其改为此状态,它将起作用:
def giveraise(self,percent):
self.pay *= (1.0 + percent)
return self.pay
我不完全确定为什么 Python会引发语法错误,但我知道这会有效。