簡體   English   中英

如何在需要一個arg和kwarg的同時允許args和kwarg; 蟒蛇

[英]how to allow args and kwargs while requiring one arg and kwarg; python

我有一個功能:

def get_results(datasource, attribute='all_results', *args, **kwargs):
    """gets results for basic datasource format"""
    print(args, kwargs)
    ds = datasource(*args, **kwargs)
    ds.get()
    results = getattr(ds, attribute)
    return results

叫像

results = get_results(ThisDataSource, 'somestringID')

給args / kwargs

(), {}

它正在作為

def get_results(datasource, *args, **kwargs):
    """gets results for basic datasource format"""
    print(args, kwargs)
    ds = datasource(*args, **kwargs)
    ds.get()
    results = ds.all_results()
    return results

給args / kwargs

('somestringID',), {}

這種舊方法不好,因為數據源可能要返回行,列等。

results = get_results(ThisDataSource, 'somestringID')

導致

ds = ThisDataSource('somestringID')

如何在聲明中給它一個默認值,但仍然允許args和kwargs? 我想打電話

results = get_results(ThisDataSource, 'somestringID', attribute='rows') 

並具有args = ('somestringID'), and retain access to attribute ='rows'`的args = ('somestringID'), and retain access to

謝謝

假設第一個位置參數為attribute

    def get_results(datasource, *args, **kwargs):
        """gets results for basic datasource format"""
        attribute = 'all_results'  # default value
        if 'attribute' in kwargs:
            # attribure was given explicitly in keyword params
            attribute = kwargs['attribute']
        else:
            if len(args)>0:
                # args contains at least 1 value - we suppose first value to be an attribute
                # extract and remove it from args
                attribute = args.pop(0)
        print(attribute, args, kwargs)
        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM