我有下面的代码(使用dnspython),它可以工作-但是它使用我不喜欢的globals。我想我可以使用递归函数,但没有明显的目的。你知道吗
有人对如何改进这一点有什么想法吗??你知道吗
import dns.resolver
dns_resolver = dns.resolver.Resolver()
dns_resolver.nameservers = ['1.1.1.1', '1.0.0.1']
resolve_count = 0
def get_spf_count(domain_name):
global resolve_count
for answer in dns_resolver.query(domain_name, 'TXT'):
spf = answer.to_text() if 'v=spf1' in answer.to_text() else None
if spf:
spf_records = [
record
for record in spf.replace('" "', '').replace('"', '').split()
if record not in ['v=spf1', '~all', '-all', '+all', '?all']
]
for record in spf_records:
if 'include:' in record:
check_domain = record.split(':')[1]
get_spf_count(check_domain)
resolve_count += 1
elif record.startswith(('a:', 'mx:', 'ptr:', 'exists:')):
resolve_count += 1
get_spf_count('google.com')
print(resolve_count)
这里是一个稍微清理过的递归函数,带有一个适当的局部变量。你知道吗
请注意函数所需的一切是如何在函数中是本地的,包括
dns.resolver.Resolver()
对象(以及如果需要,如何传入共享解析器对象)。你知道吗为什么不把
resolve_count
作为变量传入,让函数返回更新后的值呢?你知道吗相关问题 更多 >
编程相关推荐