簡體   English   中英

Python:在 function 中傳入一個元組作為參數

[英]Python: Passing in a tuple as an argument in a function

我正在使用np.select(condition, choices)Pandas DataFrame創建新列。 我想把我的代碼模塊化成一個function來實現,我比較麻煩的方法如下:

def selection(
    df: pd.DataFrame,
    conditions: Optional[List] = None,
    choices: Optional[List] = None,
    column_names: Optional[List] = None,
):
    if conditions is not None:  # if its none, then don't run this, implies choices and column names are none too
        for condition, choice, col_name in zip(conditions, choices, column_names):
            df[col_name] = np.select(condition, choice, default=" ")
    return df

要運行這個 function,我只需這樣做:

conditions = [...]
choices = [...]
column_names = [...]
my_tuple = (conditions, choices, column_names)
df = selection(df, *my_tuple)

我想提高我的編碼技能,我覺得這種方式不是最優的,特別是,我覺得我的 arguments 涉及conditions, choices, column_names可以是一個元組作為參數傳入。 我歡迎任何關於改進此代碼的建議。

如果你真的想將它們作為元組傳遞,是的,你可以:

def selection(
    df: pd.DataFrame,
    cond_choice_col: Optional[Tuple] = None
):
    if cond_choice_col is not None:  # if its none, then don't run this, implies choices and column names are none too

        # unpack the tuple here
        for condition, choice, col_name in zip(*cond_choice_col):
            df[col_name] = np.select(condition, choice, default=" ")
    return df

conditions = [...]
choices = [...]
column_names = [...]
my_tuple = (conditions, choices, column_names)

df = selection(df, cond_choice_col=my_tuple)

但老實說,我確實認為您的 function 比上面的更人性化。

In [53]: def foo(df, conditions=None, choices=None):
    ...:     print(df, conditions, choices)
    ...: 
In [54]: foo('df')
df None None

使用關鍵字,您可以使用字典提供 arguments:

In [55]: adict={'conditions':[1,2,3], 'choices':['yes','no']}
In [56]: foo('df', **adict)
df [1, 2, 3] ['yes', 'no']

或值的元組:

In [57]: foo('df', *adict.values())
df [1, 2, 3] ['yes', 'no']

有關參數語法和解包的更多信息:

https://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions

暫無
暫無

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

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