当我试图在 stackoverflow 上回答另一个人关于Python=
和+=
Python之间的区别的问题时,我遇到了以下问题:
class Foo:
def __init__(self, value, name="default"):
self.value = value
self.name = name
def __add__(self, that):
return Foo(self.value + that.value)
def __iadd__(self, that):
self.value = self.value + that.value
return self
def __str__(self):
return "name: {}, value: {:d}".format(self.name, self.value)
a = Foo(1, 'alice')
b = Foo(2, 'bob')
print(a+=b)
Run Code Online (Sandbox Code Playgroud)
最后一个print
电话没有成功,给了我这个:
File "<ipython-input-8-0faa82ba9e4a>", line 3
print(a+=b)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这不起作用。也许它与关键字参数传递机制有关?我只是找不到关于这个主题的任何资源,因为重载的__iadd__
方法已经返回了一个Foo
对象。
************** 更新 ******************
如果我__iadd__
像这样更改方法(只需删除return
语句):
... …
Run Code Online (Sandbox Code Playgroud) 我刚开始读这本书:Advanced Programming in Unix Environment并尝试编译第一个示例代码,就像在这个线程中一样。虽然使用命令解决了编译问题:
gcc -o myls myls.c -I SCADDRESS/include/ -L SCADDRESS/lib/ -lapue
我在 GCC 手册中查了一下,找不到 gcc 选项 -lxxx 是什么意思,其中 xxx 代表头文件的基本名称(在这种情况下,它是 apue.h)。根据手册,xxx 应该是一些库文件,要么以 .so 结尾的共享目标文件,要么以 .a 结尾的静态库。
谁能解释一下?提前谢谢:)