向函数传入多个pandas DataFrame时如何取变量名作为保存文件名
解决方案
你遇到的问题核心是Python默认不会把变量名本身作为值传递给函数,你可以用两种方案实现需求:
方案1:关键字参数传参(最稳妥)
直接修改函数接收关键字参数,显式把变量名作为键传入,逻辑完全可控没有副作用:
def write_df_to_disk(**df_kwargs): for df_name, df in df_kwargs.items(): save_path = f"/transformed/{df_name}.table" df.to_csv(save_path, sep="\t") # 调用时指定关键字参数即可 write_df_to_disk(k562=k562, hepg2=hepg2, hoel=hoel)
方案2:自动提取调用时的变量名(无需修改调用代码)
如果你不想改动原有调用逻辑,可以通过inspect模块读取调用栈的代码上下文,自动提取传入的变量名:
import inspect def write_df_to_disk(*args): # 获取函数调用处的上下文代码 caller_ctx = inspect.getframeinfo(inspect.currentframe().f_back).code_context[0] # 解析得到调用时传入的参数名列表 arg_names = [i.strip() for i in caller_ctx.split("(")[1].rsplit(")", 1)[0].split(",")] for df_name, df in zip(arg_names, args): save_path = f"/transformed/{df_name}.table" df.to_csv(save_path, sep="\t") # 调用方式和你原有代码完全一致 write_df_to_disk(k562, hepg2, hoel)
注意:该方案仅适合调用时直接传入变量名的场景,如果调用时传入的是表达式、函数返回值等非变量名内容,会得到错误的文件名,优先推荐使用方案1。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

