我想将少量设置导入到我当前的脚本中,该脚本包含一个名为settings.py的外部模块。
目前,我在导入之前手动更改了“动物”变量。
settings.py :
animal='Unicorn' #I want to get rid of this line, and pass the variable during the import.
if animal=='Unicorn':
fur_color='sparkles'
number_of_legs=4
if animal=='Centipede':
fur_color='black'
number_of_legs=100
if animal =='Cat':
fur_color='brown'
number_of_legs=4
我跑步:
from settings import fur_color, number_of_legs
并具有所需的信息。
但是,我现在需要遍历这3种情况。我无法执行此操作,因为在当前设置中,必须在导入之前手动更改“动物”变量。
如何将动物传入设置,以便可以编写类似的内容:
for animal in animals:
from settings import *
print('A' + animal + ' has ' + str(number_of_legs) + ' and is ' + fur_color)
所需的输出为:
A Unicorn has 4 legs and is sparkles
A Centipede has 100 legs and is black
A Cat has 4 legs and is brown.
循环内的“导入”不会更新设置,使用imp.reload(settings)也不会更新设置。我不知所措。显然,实际用例更加复杂。我真的希望我不会以这种方式逐个存储案例变量来让自己陷入困境!
答案 0 :(得分:2)
最好通过在外部模块中调用一个函数来完成此操作。可以这样完成:
settings.py:
def animal_info(animal):
if animal=='Unicorn':
fur_color='sparkles'
number_of_legs=4
elif animal=='Centipede':
fur_color='black'
number_of_legs=100
elif animal =='Cat':
fur_color='brown'
number_of_legs=4
return fur_color, number_of_legs
然后,在您的主模块中或在交互式提示下,您可以使用以下代码:
import settings
for animal in animals:
fur_color, number_of_legs = settings.animal_info(animal)
print('A' + animal + ' has ' + str(number_of_legs) + ' and is ' + fur_color)
如果要处理的数据表大于此数据表,则可能需要考虑使用pandas
数据框。只需将数据存储在逗号分隔或制表符分隔的文本文件中,然后使用df = pandas.read_csv(....)
读取它,根据您的查询列设置索引,然后访问诸如df.loc[animal, “number of legs”]
之类的数据。 / p>
答案 1 :(得分:1)
模块仅导入一次,即使随后再导入同一模块也是如此。这意味着我不希望有一种简单的方法来处理您当前的设置。
我建议在settings
中定义一个函数,该函数将根据其字符串输入生成所需的配置:
def get_animal(kind):
if kind == 'Unicorn':
fur_color = 'sparkles'
number_of_legs = 4
elif kind == 'Centipede':
fur_color = 'black'
number_of_legs = 100
elif kind == 'Cat':
fur_color = 'brown'
number_of_legs = 4
else:
raise ValueError(f'Invalid animal {kind}!')
#return dict(fur_color=fur_color, number_of_legs=number_of_legs)
# or
return fur_color, number_of_legs
然后您可以将相应的字典作为
from settings import get_animal
for animal in animals:
animal_dict = get_animal(animal)
# animal_dict['fur_color'] etc. can be accessed
print('A {animal} has {number_of_legs} legs and is {fur_color}'.format(
animal=animal, **animal_dict))
当然,如果用例不太适合使用dict,则可以使用元组返回值定义函数,然后将其解压缩:
from settings import get_animal
for animal in animals:
fur_color,number_of_legs = get_animal(animal)
# do complicated stuff here