标签: kwargs

argparse参数顺序

我有一点问题.

argparse用来解析我的论点,而且它运作得很好.

有了args,我这样做:

p_args = parser.parse_args(argv)
args = dict(p_args._get_kwargs())
Run Code Online (Sandbox Code Playgroud)

但问题p_args是我不知道如何通过它们在命令行中的位置来排序这些参数,因为它是一个字典.

那么有没有可能在命令行中按顺序在元组/列表/有序字典中包含参数?

python arguments kwargs argparse

17
推荐指数
3
解决办法
1万
查看次数

在函数调用期间向kwargs添加参数?

有没有办法在函数调用期间将键值对添加到kwargs中?

def f(**kwargs):
    print(kwargs)

# ...

pre_defined_kwargs = {'a': 1, 'b': 2}

f(**pre_defined_kwargs, c=3)
Run Code Online (Sandbox Code Playgroud)

甚至改变现有的论点?

f(**pre_defined_kwargs, b=3)  # replaces the earlier b=2
Run Code Online (Sandbox Code Playgroud)

这两个例子不起作用,因为它们会引起错误

>>> f(**pre_defined_kwargs, c=3)
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

指着论点之间的逗号

python kwargs keyword-argument python-3.x

17
推荐指数
1
解决办法
2万
查看次数

我如何将**kwargs复制到自己?

有没有一种方法可以定义,__init__因此定义的关键字**kwargs被分配给类?

例如,如果我要初始化一个ValidationRuleValidationRule(other='email'),self.other则应将值添加到类中,而不必为每个可能的kwarg明确命名.

class ValidationRule:
    def __init__(self, **kwargs):
        # code to assign **kwargs to .self
Run Code Online (Sandbox Code Playgroud)

python syntax constructor kwargs

16
推荐指数
3
解决办法
6566
查看次数

如何生成`kwargs`列表?

从外部文件我生成以下字典:

mydict = { 'foo' : 123, 'bar' : 456 }
Run Code Online (Sandbox Code Playgroud)

给定一个带**kwargs参数的函数,如何从该字典生成keyword-args?

python kwargs

14
推荐指数
1
解决办法
7892
查看次数

你如何将kwargs传递给boost-python包装函数?

我有一个带有此签名的python函数:

def post_message(self, message, *args, **kwargs):
Run Code Online (Sandbox Code Playgroud)

我想从c ++调用函数并传递给它一些kwargs.调用函数不是问题.知道如何通过kwargs是.这是一个非工作的释义样本:

std::string message("aMessage");
boost::python::list arguments;
arguments.append("1");

boost::python::dict options;
options["source"] = "cpp";

boost::python::object python_func = get_python_func_of_wrapped_object()
python_func(message, arguments, options)
Run Code Online (Sandbox Code Playgroud)

当我运用这段代码时,在pdb中我得到了(这不是我想要的):

messsage = aMessage
args = (['1'], {'source': 'cpp'})
kwargs = {}
Run Code Online (Sandbox Code Playgroud)

你如何在我的例子中传递**kwargs字典中的选项

我看过一篇建议使用**选项语法的帖子(这有多酷!):

python_func(message, arguments, **options)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致了

TypeError: No to_python (by-value) converter found for C++ type: class boost::python::detail::kwds_proxy
Run Code Online (Sandbox Code Playgroud)

感谢您提供任何帮助.

kwargs boost-python

13
推荐指数
1
解决办法
2220
查看次数

python函数*args和**kwargs以及其他指定的关键字参数

我有一个Python类,其方法应该以这种方式接受参数和关键字参数

class plot:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def set_axis(self, *args, xlabel="x", ylabel="y", **kwargs):
        for arg in args:
            <do something>
        for key in kwargs:
             <do somethng else>
Run Code Online (Sandbox Code Playgroud)

打电话时:

plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
Run Code Online (Sandbox Code Playgroud)

我收到错误: TypeError: set_axis() got multiple values for keyword argument 'xlabel'

无论如何,如果我设置我的方法

class plot:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def set_axis(self, xlabel="x", ylabel="y", *args, **kwargs):
        for arg in args:
            <do something>
        for key in kwargs: …
Run Code Online (Sandbox Code Playgroud)

python methods args kwargs python-2.7

13
推荐指数
3
解决办法
8290
查看次数

使用multiprocessing.pool.map传递kwargs

我想通过Pool.map()将关键字参数传递给我的worker-function.在搜索论坛时,我找不到一个明确的例子.

示例代码:

import multiprocessing as mp

def worker((x,y), **kwargs):
    kwarg_test = kwargs.get('kwarg_test', False)
    print("kwarg_test = {}".format(kwarg_test))     
    if kwarg_test:
        print("Success")
    return x*y

def wrapper_process(**kwargs):
    jobs = []
    pool=mp.Pool(4)
    for i, n in enumerate(range(4)):
        jobs.append((n,i))
    pool.map(worker, jobs) #works
    pool.map(worker, jobs, kwargs) #how to do this?   

def main(**kwargs):
    worker((1,2),kwarg_test=True) #accepts kwargs
    wrapper_process(kwarg_test=True)

if __name__ == "__main__":    
    main()
Run Code Online (Sandbox Code Playgroud)

输出:

kwarg_test = True
Success
kwarg_test = False
kwarg_test = False
kwarg_test = False
kwarg_test = False
TypeError: unsupported operand type(s) for //: 'int' and 'dict' …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing kwargs

13
推荐指数
2
解决办法
7983
查看次数

在Python中,在迭代kwargs时决定顺序的是什么?

在python中,我写了这个函数来教自己如何**kwargs在Python中工作:

def fxn(a1, **kwargs):
    print a1
    for k in kwargs:
        print k, " : ", kwargs[k]
Run Code Online (Sandbox Code Playgroud)

然后我调用了这个函数

fxn(3, a2=2, a3=3, a4=4)
Run Code Online (Sandbox Code Playgroud)

这是我的Python解释器打印的输出:

3
a3  :  3
a2  :  2
a4  :  4
Run Code Online (Sandbox Code Playgroud)

为什么for循环在a2的值之前打印a3的值,即使我先将a2输入到我的函数中?

python parameter-passing kwargs

12
推荐指数
4
解决办法
5536
查看次数

how to pass arguments efficiently (**kwargs in python)

I have a class that inherits from 2 other classes. These are the base classes:

class FirstBase(object):
      def __init__(self, detail_text=desc, backed_object=backed_object,
                   window=window, droppable_zone_obj=droppable_zone_obj,
                   bound_zone_obj=bound_zone_object,
                   on_drag_opacity=on_drag_opacity):
          # bla bla bla

class SecondBase(object):
      def __init__(self, size, texture, desc, backed_object, window):
          # bla bla bla
Run Code Online (Sandbox Code Playgroud)

And this is the child:

class Child(FirstBase, SecondBase):
       """ this contructor doesnt work
       def __init__(self, **kwargs):
          # PROBLEM HERE
          #super(Child, self).__init__(**kwargs)
       """
       #have to do it this TERRIBLE WAY
       def __init__(self, size=(0,0), texture=None, desc="", backed_object=None,
                    window=None, droppable_zone_obj=[], bound_zone_object=[], …
Run Code Online (Sandbox Code Playgroud)

python inheritance kwargs

12
推荐指数
1
解决办法
1万
查看次数

芹菜任务链和访问**kwargs

我有类似于此处概述的情况,除了不是使用多个参数链接任务,我想链接返回具有多个条目的字典的任务.

这是 - 非常松散和抽象 - 我正在努力做的事情:

tasks.py

@task()
def task1(item1=None, item2=None):
  item3 = #do some stuff with item1 and item2 to yield item3
  return_object = dict(item1=item1, item2=item2, item3=item3)
  return return_object

def task2(item1=None, item2=None, item3=None):
  item4 = #do something with item1, item2, item3 to yield item4
  return_object = dict(item1=item1, item2=item2, item3=item3, item4=item4)
  return return_object
Run Code Online (Sandbox Code Playgroud)

从ipython开始,我可以单独和异步地调用task1,没有任何问题.

我也可以单独调用task2,task1返回的结果为双星参数:

>>res1 = task1.s(item1=something, item2=something_else).apply_async()
>>res1.status
'SUCCESS'
>>res2 = task2.s(**res1.result).apply_async()
>>res2.status
'SUCCESS
Run Code Online (Sandbox Code Playgroud)

但是,我最终想要实现的是与上面相同的最终结果,但是通过链,在这里,我无法弄清楚如何将task2实例化而不是使用task1返回的(位置)参数,而是使用task1.result作为**kwargs:

chain_result = (task1.s(item1=something, item2=something_else) | task2.s()).apply_async()  #THIS DOESN'T WORK! …
Run Code Online (Sandbox Code Playgroud)

python kwargs celery chain

12
推荐指数
2
解决办法
5246
查看次数