涉及 `format()` 点符号时的 Python 格式化

Posted

技术标签:

【中文标题】涉及 `format()` 点符号时的 Python 格式化【英文标题】:Python formatting when `format()` dot notation involved 【发布时间】:2021-09-20 00:28:54 【问题描述】:

我是 Python 新手,正在寻找如何按照 PEP8 标准格式化以下代码:

使用 Python 3.5 所以fstrings 不可用。 有了所有.format(),很难知道在哪里分行。

未格式化:

hist_df = spark.read.format("delta").table("table".format(table=selected_table))
hist_query = hist_df.where(col("status")=='sel_status'.format(sel_status=selected_status)).where(col("cret_dt") < 'last_date'.format(last_date=selected_last_date)).drop("cret_ts", "cret_dt")


file_path = "abfss://cont@acct.dfs.core.windows.net/folder/".format(cont=storage_container, acct=storage_account, folder=selected_folder)

这是我想做的(执行良好):

对我来说,这很好地排列了 hist_query 过滤器参数 还可以很好地排列file_path format() 参数
hist_df = spark.read.format("delta").table("table".format(table=selected_table))
hist_query = (hist_df.
             where(col("status")=='sel_status'.format(sel_status=selected_status)).
             where(col("cret_dt") < 'last_date'.format(last_date=selected_last_date)).
             drop("cret_ts", "cret_dt"))


file_path = ("abfss://cont@acct.dfs.core.windows.net/folder/".
             format(
               cont=storage_container, 
               acct=storage_account, 
               folder=sel_folder
             ))

但是这种格式符合 Python PEP8 标准吗?让. 悬挂在某些行的末尾感觉有悖常理。

【问题讨论】:

如果您是 Python 新手,为什么要使用 Python 3.5?它已经严重过时了。 Databricks 5.5LTS is "stuck" on 3.5。我不愿意团结起来并通过企业国会法案来更新集群:)。您对代码格式有何看法? @Nat Riddle 它还不到 1 岁,已经快 6 岁了! 【参考方案1】:

根据PEP 8 - The official Python style guide,您的代码格式似乎很好。但请记住,有些事情是偏好问题。采用所有建议不如在代码中保持一致重要。您可以使用code formatter 来帮助您。不同的代码格式化程序有不同的默认设置。例如,由 Black 格式化的代码最终会是这样的:

hist_df = spark.read.format("delta").table("table".format(table=selected_table))
hist_query = (
    hist_df.where(col("status") == "sel_status".format(sel_status=selected_status))
    .where(col("cret_dt") < "last_date".format(last_date=selected_last_date))
    .drop("cret_ts", "cret_dt")
)


file_path = "abfss://cont@acct.dfs.core.windows.net/folder/".format(
    cont=storage_container, acct=storage_account, folder=selected_folder
)

这是因为在黑色中,每行的默认最大字符数设置为 88,而 PEP 8 为 79。

【讨论】:

感谢您的资源和健全性检查。我会将代码拉到 VS Code(在 Databricks Notebook 中编写)并查看它的格式。尽管我不喜欢悬空的.,但我喜欢参数对齐。

以上是关于涉及 `format()` 点符号时的 Python 格式化的主要内容,如果未能解决你的问题,请参考以下文章

开发一个Swing功能时的一点总结

UnknownFormatConversionException 是由 String.format() 中的符号“%”引起的

format 填充符号 与 格式化

QImage 格式 Format_ARGB32 数据是有符号还是无符号整数?

String.Format将人民币符号改成美元符号{0:C}

删除文件名含有特殊字符的文件时的意外发现