Python 传递和连接全局字符串值

Python passing & concatenating global string values

提问人:J Web 提问时间:10/13/2023 更新时间:10/13/2023 访问量:71

问:

我有 4 个全局变量:mdstring、rxstring、dnstring、vsstring

我已经验证了设置其值返回字符串的函数 (例如 vsstring = “1|视力|~包含在医疗中。

我有一个字典,用于设置字符串的使用顺序:

ordered_back_addreses = {
    #snip
    "5117": ordered_addr_string(mdstring, rxstring, dnstring, vsstring),
    #snip
}

这是调用的函数:

def ordered_addr_string(*addresses):
    global mdstring, rxstring, dnstring, vsstring
    ordered_addreses = ""
    for address in addresses:
        print(address)
        if address != "":
            #ordered_addreses = ordered_addreses + "^" + address
            pass
    return ordered_addreses

注释行是我想做的。这些全局变量可能引用 0 个或多个非空字符串。如果该值不是空字符串,我想按照指定的顺序将其添加到 ^ 分隔的新字符串中。此外,“5117”使用列出的四个全局名称,但另一个键可能使用更多或更少。

print(address) 向我显示“对象。地址处的类对象“,所以我想我以某种方式在我想要值的地方使用名称。

我尝试将变量包装在字典和函数中的 str() 中,并且还添加了“global...”行,虽然我不知道它是否有必要,但它没有帮助。

python 字符串 参数传递

评论

0赞 mkrieger1 10/13/2023
请展示一个最小的可重复示例
0赞 mkrieger1 10/13/2023
行输入是不必要的。global ...ordered_addr_string
3赞 OysterShucker 10/13/2023
如果我明白你在说什么,你基本上可以删除整个功能,然后这样做ordered_addresses = '^'.join(address for address in addresses if address)
1赞 Barmar 10/13/2023
仅当函数赋值给全局变量时,才需要使用。你不需要它只是为了读取变量,在你的函数中,你根本不引用变量,它们在调用者中被引用。global
2赞 deceze 10/13/2023
@OneMad也可以。'^'.join(filter(None, addresses))

答:

1赞 OysterShucker 10/13/2023 #1

引用是不必要的。所有数据都已在 中。如果您要做的只是通过“^”连接它们,那么 python 有一个内置的。以下是满足您的需求所需的全部内容。globaladdresses

def ordered_addr_string(*addresses):
    return '^'.join(address for address in addresses if address)

不过,我在这里看到了一个问题。通过消除空值,它们将不再有序,并且您绝对无法确定哪个值属于哪个变量。最好保留空值。在这种情况下,您可以这样做:

"5117": '^'.join((mdstring, rxstring, dnstring, vsstring)),

如果您不喜欢以此结果结束:"^^something^something_else"

您可以返回函数方法并执行以下操作。如果为空,则将替换为单词“none”。address

def ordered_addr_string(*addresses):
    return '^'.join(address or 'none' for address in addresses)