2024-10-02 02:44:57 发布
网友
我编写了一个“基于链”的pythonapi(类似于jQuery)。所以我可以写:
myObject.doStuff().doMoreStuf().goRed().goBlue().die()
问题是我还没有找到一种方法用长链保持语法的整洁。在JavaScript中我可以简单地
但是Python有缩进限制。。。在
实际上PEP8说:
Long lines can be broken over multiple lines by wrapping expressions in parentheses. These should be used in preference to using a backslash for line continuation. Make sure to indent the continued line appropriately.
所以我想你的代码应该是这样的:
( myOjbect .doStuf() .doMoreStuf() .goRed() .goBlue() .die() )
从语法上看,对于每个方法调用返回的值,有两个可能的选项:
die()
在第一种情况下(返回同一个实例时),将较长的行拆分为多个语句的解决方案是:
真实世界的例子涉及可变对象:
my_stuff = [] my_stuff.append('laptop') # my_stuff == ['laptop'] my_stuff.append('jacket') # my_stuff == ['laptop', 'jacket'] my_stuff.append('apple') # my_stuff == ['laptop', 'jacket', 'apple']
(尽管list.append()不返回任何内容,只是为了保持一致性并明确声明它是可变的)
list.append()
在第二种情况下(返回copy时),执行类似操作的解决方案是:
myObject = myObject.doStuf() myObject = myObject.doMoreStuf() myObject = myObject.goRed() myObject = myObject.goBlue() myObject.die()
真实世界的例子涉及不可变对象:
name = '-Tadek-' name = name.strip('-') # name == 'Tadek' name = name.lower() # name == 'tadek' name = name.replace('k', 'ck') # name == 'tadeck'
虽然我不会称之为“干净”,但可以在括号内打断:
myOjbect.doStuf( ).doMoreStuf(arg1, arg2 ).goRed( ).goBlue( ).die()
但口味各不相同,所以我把它作为完整性的答案。在
myOjbect \ .doStuf() \ .doMoreStuf() \ .goRed() \ .goBlue() \ .die()
(我为myObject感到抱歉。听起来很痛苦。)
myObject
PEP8兼容解决方案:格式化行
实际上PEP8说:
所以我想你的代码应该是这样的:
替代解决方案:拆分成单独的语句
从语法上看,对于每个方法调用返回的值,有两个可能的选项:
die()
,这不是必需的,因为它的结果没有被使用)都返回修改过的实例(调用它的同一个实例)。在die()
不需要这样做)返回调用它的实例的copy。在可变对象的解决方案(方法返回原始实例)
在第一种情况下(返回同一个实例时),将较长的行拆分为多个语句的解决方案是:
^{pr2}$真实世界的例子涉及可变对象:
(尽管
list.append()
不返回任何内容,只是为了保持一致性并明确声明它是可变的)不可变对象的解决方案(方法返回修改后的副本)
在第二种情况下(返回copy时),执行类似操作的解决方案是:
真实世界的例子涉及不可变对象:
虽然我不会称之为“干净”,但可以在括号内打断:
但口味各不相同,所以我把它作为完整性的答案。在
(我为
myObject
感到抱歉。听起来很痛苦。)相关问题 更多 >
编程相关推荐