我正试图用pydicom的一个假自定义密码匿名登录号码:
def an_callback(ds, data_element):
if data_element.tag == Tag(0x00080050):
data_element.value = '0000000000'
ds.walk(an_callback)
我想传递一个自定义值而不是'0000000'给回调函数。我想我可以使用一个全局变量,但是我想避免使用它来减少不必要的bug。有没有其他不使用全局变量的方法?你知道吗
编辑:我以为walk是一个特殊的python函数,但它只是ds的一个方法,下面是代码。您可以在这里更改回调的代码,使其也包含一个可选参数。回调(self,data\u element,replace\u value=None)
def walk(self, callback, recursive=True):
"""Iterate through the DataElements and run `callback` on each.
Visit all DataElements, possibly recursing into sequences and their
datasets. The callback function is called for each DataElement
(including SQ element). Can be used to perform an operation on certain
types of DataElements. E.g., `remove_private_tags`() finds all private
tags and deletes them. DataElement`s will come back in DICOM order (by
increasing tag number within their dataset).
Parameters
----------
callback
A callable that takes two arguments:
* a Dataset
* a DataElement belonging to that Dataset
recursive : bool
Flag to indicate whether to recurse into Sequences.
"""
taglist = sorted(self.keys())
for tag in taglist:
with tag_in_exception(tag):
data_element = self[tag]
callback(self, data_element) # self = this Dataset
# 'tag in self' below needed in case callback deleted
# data_element
if recursive and tag in self and data_element.VR == "SQ":
sequence = data_element.value
for dataset in sequence:
dataset.walk(callback)
全局变量是最简单的解决方案;如果您希望更优雅,那么可以将函数封装在某个类中。您的问题涉及普通Python,因此您可能需要阅读Python Alternatives to Global Variables。你知道吗
相关问题 更多 >
编程相关推荐