我正在尝试使用NetworkX读取一个Shapefile并使用该函数write_shp()生成将包含节点和边缘的Shapefile(在此示例之后 < - 此链接现在已经死了),但是当我尝试运行它给出的代码时我有以下错误:
Traceback (most recent call last): File
"C:/Users/Felipe/PycharmProjects/untitled/asdf.py", line 4, in
<module>
nx.write_shp(redVial, "shapefiles") File "C:\Python34\lib\site-packages\networkx\readwrite\nx_shp.py", line
192, in write_shp
for key, data in e[2].iteritems(): AttributeError: 'dict' object has no attribute 'iteritems'
Run Code Online (Sandbox Code Playgroud)
我正在使用Python 3.4并通过pip install安装NetworkX.
这个错误之前,它已经给了我另外一个说:"x范围不存在"或类似的东西,所以我看着它,只是改变xrange以range在nx_shp.py文件,这似乎解决它.
根据我的阅读,它可能与Python版本(Python2与Python3)有关.
我想Observable在Python中为几个工作者实现模式,并遇到了这个有用的片段:
class Event(object):
pass
class Observable(object):
def __init__(self):
self.callbacks = []
def subscribe(self, callback):
self.callbacks.append(callback)
def fire(self, **attrs):
e = Event()
e.source = self
for k, v in attrs.iteritems():
setattr(e, k, v)
for fn in self.callbacks:
fn(e)
Run Code Online (Sandbox Code Playgroud)
来源:这里
据我所知,为了这个subscribe,我需要将回调函数传递给将被调用的函数fire.如果调用函数是一个class方法,大概我可以使用self,但在没有这个的情况下 - 我怎么能直接得到一个对该self.callbacks.append(callback)位有用的回调?
python design-patterns functional-programming callback observer-pattern
基本上我是C#开发人员,我知道C#的做法,EventHandler,委托,甚至......
但最好的方法是在Python上实现它.
我希望在 Python 中有一些可观察的集合/序列,让我能够监听更改事件,例如添加新项目或更新项目:
list = ObservableList(['a','b','c'])
list.addChangeListener(lambda new_value: print(new_value))
list.append('a') # => should trigger the attached change listener
data_frame = ObservableDataFrame({'x': [1,2,3], 'y':[10,20,30]})
data_frame.addChangeListener(update_dependent_table_cells) # => allows to only update dependent cells instead of a whole table
Run Code Online (Sandbox Code Playgroud)
答:我发现以下项目提供了可观察集合的实现,并且看起来很有前途:
https://github.com/dimsf/Python-observable-collections
它做了我想要的:
from observablelist import ObservableList
def listHandler(event):
if event.action == 'itemsUpdated':
print event.action + ', old items: ' + str(event.oldItems) + ' new items: ' + str(event.newItems) + ' at index: ' + str(event.index)
elif event.action == 'itemsAdded' or event.action == …Run Code Online (Sandbox Code Playgroud) 在我的async处理程序中,我想等到任务的状态发生变化.现在,我只是在无限循环中检查状态并等待.这是一个例子,wait_until_done函数:
import asyncio
class LongTask:
state = 'PENDING'
my_task = LongTask()
def done():
my_task.state = 'DONE'
async def wait_until_done():
while True:
if my_task.state == 'PENDING':
await asyncio.sleep(2)
else:
break
print("Finally, the task is done")
def main(loop, *args, **kwargs):
asyncio.ensure_future(wait_until_done())
loop.call_later(delay=5, callback=done)
loop = asyncio.get_event_loop()
main(loop)
loop.run_forever()
Run Code Online (Sandbox Code Playgroud)
这样做有更好的方法吗?
我有两个问题:
我正在尝试在Python中实现Observer设计模式.最简单的实现是什么?
我需要它来观察我正在构建的渲染农场中的机器状态.
那里有没有好的Python设计模式书?
我希望能够监视变量并在更改类的实例时调用类中的函数。
class Example:
def __init__(self, content):
self.content = content
example1 = Example('testing')
example1.content = 'testing123'
Run Code Online (Sandbox Code Playgroud)
我希望能够检查是否example1.content已更改/更新,如果已更改,请运行一些代码。
python ×7
callback ×1
class ×1
collections ×1
delegates ×1
dictionary ×1
events ×1
observable ×1
python-3.5 ×1
sequence ×1