函数 Returns 单个字符而不是字符串

Function Returns Individual Characters Rather than Strings

我的函数 return 是单个字符而不是单词。

#!/usr/bin/env python3
import re


template_variables = '''
### VARIABLE START ###
@HOSTNAME@
### VARIABLE END ###
'''


# Get variable configuration from template
def get_template_vars_test():
        for var_lines in re.findall('### VARIABLE START ###(.*?)### VARIABLE END ###', template_variables, re.DOTALL): # Find content between START and END delimiters
            print(var_lines)
            return var_lines

# Display the function's output as a list
print(list(get_template_vars_test()))

print(var_lines)get_template_vars_test() 中的输出:

@HOSTNAME@

print(list(get_template_vars_test())) 的输出:

['\n', '@', 'H', 'O', 'S', 'T', 'N', 'A' , 'M', 'E', '@', '\n']


我不知道如何 return 这个词,我需要一些帮助。感谢观看。


编辑:

我的原始问题已解决,但提出了一个关于 return 上的 for 循环和生成串联的单词列表的后续问题。

#!/usr/bin/env python3
import re


template_variables = '''
### VARIABLE START ###
@HOSTNAME@
@RADIUS@
### VARIABLE END ###
'''


# Get variable configuration from template
def get_template_vars_test():
        for var_lines in re.findall('### VARIABLE START ###(.*?)### VARIABLE END ###', template_variables, re.DOTALL): # Find content in template_variables between START and END delimiters
            return var_lines


print(get_template_vars_test())

print(get_template_vars_test()) 的输出:

@HOSTNAME@

@RADIUS@

虽然输出循环被破坏了。

for line in get_template_vars_test():
    print(line)

输出:

@
H
O
S
T
N
A
M
E
@


@
R
A
D
I
U
S
@

最终编辑:

我通过将 var_lines 调用到列表中来修复它。

def get_template_vars():
    with open(read_file) as template:
        for var_lines in re.findall('### VARIABLE START ###(.*?)### VARIABLE END ###', template.read(), re.DOTALL):
            var_list = [ var_lines ]
        return var_list

我相信正则表达式会生成一个完整的字符串,这是 re.findall、re.DOTALL 和我的条件组合的影响。 list 的默认行为显然会在 \n.

上打断字符串
def get_template_vars():
    with open(read_file) as template:
        for var_lines in re.findall('### VARIABLE START ###(.*?)### VARIABLE END ###', template.read(), re.DOTALL):
            var_list = [ var_lines ]
        return var_list

将正则表达式拉入列表即可解决。请参阅原文中的编辑 post。