我创建了许多函数来帮助我运行当前的程序。在可能的情况下,我试图尽可能多地利用这些自定义元素,以保持其数量相当合理。
重点。
我在下面写过,允许我搜索各种词典,其结果是列表形式,即People = {'IR1':[65,'M',77076],'IR2':[24,' M',77077],....} IR =唯一身份标识符 列表中的第一个位置 - AGE, 名单中的第二位 - 性别, 列表中的第3个位置 - GP练习代码。
获取我正在使用的每个必要值:
def TestCustom1(Search, Source, Offset):
if Search == 'Blank' or Search == 'Missing IRF - MT' or \
Search == 'Missing IRF - source data' or Search is None or \
Search == 'Date out of scope':
CusRet = 'Blank'
elif Source.get(Search) is not None:
CusRet = TestType('CharZ', Source.get(Search)[Offset])
else:
CusRet = 'Missing from look up tbl'
return CusRet
其中: TestType,评估结果(即如果值为Null则返回'Blank')。 Search =查找值,Source = Dictionary的名称,Offset = value position。 我用它来支持大约5种不同的词典。
问题: 我有非常简单的Dictionary = {'AA20':'Intradral Spine Major 1',.....}
在编辑器中使用以下内容时,一切正常:
DictHRG.get('HC08Z')[0:]
u'Intradural Spine Major 1'
但是当试图将[0:]传递给我所做的函数时,出现了错误:
TestCustom1('HC08Z', DictHRG, 0:)
SyntaxError: invalid syntax
和
TestCustom1('HC08Z', DictHRG, [0:])
SyntaxError: invalid syntax
Sollution: 我可以写一个新函数,但正如我所说的那样,我试图保留一定数量的函数 2.我可以在这个特定数据集的代码中使用IF语句,但更喜欢使用TestCustom1(就像空白一样,我需要为所有数据源提供相同的输出):
CusRet = 'Missing from look up tbl'
如果需要的话,更容易在函数中更改它,而不是回到这一组(我有超过50个数据源)
问题: 您是否可能对上述情况表示赞赏,也非常感谢对替代品的建议(我很确定这是我正在做的一些新手错误)。
非常感谢提前。
答案 0 :(得分:0)
您可以在切片中使用偏移量:
CusRet = TestType('CharZ', Source.get(Search)[Offset:])
或传递slice()
object作为偏移量:
TestCustom1('HC08Z', DictHRG, slice(0))
请注意,0
是切片的默认起点。
只需使用成员资格测试测试密钥即可简化您的代码:
def TestCustom1(Search, Source, Offset=0):
if Search is None or Search in (
'Blank', 'Missing IRF - MT', 'Missing IRF - source data',
'Date out of scope'):
return 'Blank'
if Search in Source:
return TestType('CharZ', Source[Search][Offset:])
return 'Missing from look up tbl'
其中假设Offset
是一个整数,默认为0
从一开始就切片。
但请注意,您的函数现在会根据匹配返回两种不同类型;返回字符串或列表。使用例外来代表特殊情况。