将用户输入解析到函数以从另一个fi获取

2024-04-26 18:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有两个文件,file1.py和file2.py

我有两张来自file2.py的sam和dan的名单

所以当我从file1.py尝试这个时

AttributeError: 'module' object has no attribute 'myvar'

文件1.py

import file2

f_var=[]
myvar = raw_input("some string")

if myvar == "sam":
    f_var = loopbov("sam")


def loopbov(myvar):
    lst=[]
    for each in file2.myvar:
        te = fet(each):
        lst.append(te)
    return lst

def fet(vpf):
    tmp=[]
    # this gets me an list as an output
    return tmp

文件2.py

sam=["33:89","21:70"]
dan=["34:43","23:56"]

我知道这是一个简单的错误,但是有人能解释如何通过解析一个对象来访问另一个文件吗


Tags: 文件pyreturnvarsamdeffile1file2
2条回答

file2.py中使用字典:

my_vars = {'sam': ["33:89","21:70"], 
           'dan': ["34:43","23:56"]}

现在,在file1.py

import file2

def loopbov(myvar):
    lst=[]
    for each in file2.my_vars[myvar]:
        te = fet(each)
        lst.append(te)
    return lst

def fet(vpf):
    tmp=[]
    # this gets me an list as an output
    return tmp


f_var = loopbov("sam")

所以,在file2.py中定义了两个变量,对吗?samdan。你知道吗

您可以看到,与Python相比,一切都是一个对象:

import file2
print("This is what I found in file2:\n%s" % vars(file2))

您将看到大量的内容,但除此之外,您将看到您的samdan变量。没有myvar名字,对吧?在您的问题中file1.pymyvar将包含您要访问的变量的名称。。。你知道吗

这里是^{}出现的地方:给定一个实例,如果您知道它的名称(如果您将名称存储在一个字符串中),如何获取它的一个字段。像这样:getattr(file2, myvar)

因此您的loopbov函数在myvar参数中传递要迭代的列表的名称将变成:

def loopbov(myvar):
    lst=[]
    for each in getattr(file2, myvar):
        # myvar will be the string `"sam"`
        te = fet(each):
        lst.append(te)
    return lst

正如@madphestics在他的评论中提到的,当它试图通过未定义的名称获取属性时,getattr将做什么可能值得一提:您将得到一个AttributeError异常。试试看。把这个代码放在你的file1.py的某个地方:getattr(file2, "foobar")但是!如果您看到getattr的文档,您将看到它接受一个可选参数:default。可以这样理解,如果我没有找到属性,我不会给你一个错误,但是default参数“。你知道吗

如果您对这个主题感兴趣,也许还值得一读,关于import如何工作以及它创建的名称空间(请参见thisthis

相关问题 更多 >