Python调用函数与return语句

时间:2012-06-03 02:31:01

标签: python

我有下面的部分创建了很少的人物对象,并对这些物体应用了一些方法。

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)

两种情况有什么不同

3 个答案:

答案 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会引发语法错误,但我知道这会有效。