[英]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.