Python getattr()方法在HackerRank集合运算题中的作用原理是什么?
原理说明
getattr是Python的内置函数,核心作用是通过字符串形式的属性名,从指定对象中获取对应的属性/方法,你看到的那行代码可以拆成两步理解,效果和你写的if分支完全等价:
- 第一步:根据
command字符串从集合对象A中取出对应方法
# 当command为"symmetric_difference_update"时,下面两行的效果完全一致 target_method = A.symmetric_difference_update target_method = getattr(A, "symmetric_difference_update")
- 第二步:调用取出的方法,传入新集合作为参数
# 下面两行的执行效果完全一致 A.symmetric_difference_update(newSet) target_method(newSet)
和你原有if写法的对应关系
你写的多层if判断,本质是手动做「字符串命令 -> 对应方法调用」的映射:
- 先判断
entry[0]是哪个字符串 - 然后手动写死调用
set_a对应的方法 - 最后传入运算集合作为参数
而getattr(A, command)(newSet)是直接利用Python的动态属性特性,自动完成上面的映射逻辑:只要输入的command字符串确实是Python set类型自带的方法名,就可以直接取出方法并调用,不需要额外写分支判断。
这个写法能成立的前提是:题目给出的操作名(intersection_update、update等)刚好和Python set类的原生方法名完全一致,且参数格式也刚好匹配(只需要传入一个集合参数),所以可以直接复用这个特性简化代码。
内容的提问来源于stack exchange,提问作者dgr
相关产品推荐
相关产品推荐

