Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python的关键字参数中输入YAML配置值_Python_Python 3.x_Pyyaml - Fatal编程技术网

在Python的关键字参数中输入YAML配置值

在Python的关键字参数中输入YAML配置值,python,python-3.x,pyyaml,Python,Python 3.x,Pyyaml,我想为Python脚本的某些分析设置提供一个YAML配置文件。YAML文件如下所示: settings: param1: 1 param2: two ... def process(param1=None, param2=None, param3=None): ... 在Python脚本中,我希望将这些值作为关键字参数传递给函数。加载YAML文件会给我一本字典。该函数只有关键字参数,我事先不知道配置文件将包含哪些关键字参数。该函数如下所示: settings: par

我想为Python脚本的某些分析设置提供一个YAML配置文件。YAML文件如下所示:

settings:
  param1: 1
  param2: two
  ...
def process(param1=None, param2=None, param3=None):
    ...
在Python脚本中,我希望将这些值作为关键字参数传递给函数。加载YAML文件会给我一本字典。该函数只有关键字参数,我事先不知道配置文件将包含哪些关键字参数。该函数如下所示:

settings:
  param1: 1
  param2: two
  ...
def process(param1=None, param2=None, param3=None):
    ...
请注意,YAML设置的名称与关键字参数名称相同。该函数有几个可能的关键字参数,配置文件可能只有一个或两个。显然,我想把这些值赋给正确的关键字参数


如何将YAML值(和/或dict)分配给它们的关键字参数分配?

您可以在python中迭代dict中的键,如下所示:

for key in data:
    print(key)
这将允许您通过调用以下命令获取密钥并在函数中使用它:

data[key] # returns value from dict

您可以从
yaml.load()
获取字典,并使用
**
语法将键/值传递到函数中。这样你就不必事先知道钥匙了。例如:

import yaml

with open('path/to/config.yml', 'rb') as f:
    conf = yaml.load(f.read())    # load the config file

def process(**params):    # pass in variable numbers of args
    for key, value in params.items():
        print('%s: %s' % (key, value))

process(**conf)    # pass in your keyword args

用你的代码试试这个,它会让你对如何实现你自己的有足够的洞察力。

所以,我遇到了你的问题,我认为这可能会有所帮助。皮亚姆太棒了!它支持的一件事是直接从python进行类映射

import yaml
class Hero:
    def __init__(self, name, hp, sp):
        self.name = name
        self.hp = hp
        self.sp = sp
    def __repr__(self):
        return "Hero %s has %d Hitpoints" % (self.name, self.hp)


f = "sample.yml"
with open(f, mode='w') as ff:
    ff.write(yaml.dump(Hero(name="Cool Guy", hp=4, sp=10)))

    # saves as !!python/object:__main__.Hero {hp: 4, name: Cool Guy, sp: 10}

    ff.close()
with open(f, mode="r") as fx:
    y = yaml.load(fx)
    print(y)

[out]: Hero Cool Guy has 4 Hitpoints

希望你能像我一样从中找到更多的用处。有关更多信息,请查看投票结果。

为什么要投否决票?这个问题有什么不足之处?