如何缩进此行以获得 pep8 兼容性
How to indent this line for pep8 compatibility
如何缩进 for 循环内的行以使其与 pep8 兼容?
for ii in range(len(file_time)):
file_time[ii] = datetime.strptime(str(file_date[ii]) + " " + str(file_time[ii]),'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
我已经尝试了 pep8 文档提供的两个选项:
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
# Hanging indents should add a level.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
但我仍然得到同样的错误:
script.py:36:9:E122 continuation line missing indentation or outdented
悬挂缩进应该可以正常工作:
for ii in range(len(file_time)):
file_time[ii] = datetime.strptime(
str(file_date[ii]) + " " + str(file_time[ii]),
'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
您可以通过避免使用 str()
转换(您肯定已经有了字符串)并使用 zip()
和列表理解来改进这一点:
file_time = [
datetime.strptime('{} {}'.format(fd, ft)
'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
for fd, ft in zip(file_date, file_time)]
您也可以将转换提取到函数中:
def as_dt(datestr, timestr, fmt='%Y/%m/%d %H:%M:%S.%f'):
dt = datetime.strptime('{} {}'.format(fd, ft), fmt)
return dt.replace(microsecond=0)
file_time = [as_dt(fd, ft) for fd, ft in zip(file_date, file_time)]
也许答案不是这两个 - 只是因为它是允许的,并不意味着它是最好的方法。 pep8 的目的是提高可维护性和可读性。为了使其符合 pep8,更不用说更具可读性,也许您应该将其分成多行。
TIME_FORMAT = "%Y/%m/%d %H:%M:%S.%f"
for ii in range(len(file_time)):
date_time = "{} {}".format(file_date[ii], file_time[ii])
file_time[ii] = datetime.strptime(date_time, TIME_FORMAT)
file_time[ii] = file_time[ii].replace(microsecond=0)
pep8 中存在列限制的原因之一是鼓励您将代码分成更易读的部分。为了尽可能提高可读性,请尽量让您的代码每行执行一个操作。
python 中的一般规则是,如果表达式被括号包围,则表达式可以包含换行符,这就是为什么这个...
for ii in range(10):
foo = 1+
2+
3
... 生成语法错误,
虽然这...
for ii in range(10):
foo = (1+
2+
3)
...没有。
此外,由于您提到了缩进错误,请检查您是否始终使用制表符或空格进行标识。
如何缩进 for 循环内的行以使其与 pep8 兼容?
for ii in range(len(file_time)):
file_time[ii] = datetime.strptime(str(file_date[ii]) + " " + str(file_time[ii]),'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
我已经尝试了 pep8 文档提供的两个选项:
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
# Hanging indents should add a level.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
但我仍然得到同样的错误:
script.py:36:9:E122 continuation line missing indentation or outdented
悬挂缩进应该可以正常工作:
for ii in range(len(file_time)):
file_time[ii] = datetime.strptime(
str(file_date[ii]) + " " + str(file_time[ii]),
'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
您可以通过避免使用 str()
转换(您肯定已经有了字符串)并使用 zip()
和列表理解来改进这一点:
file_time = [
datetime.strptime('{} {}'.format(fd, ft)
'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
for fd, ft in zip(file_date, file_time)]
您也可以将转换提取到函数中:
def as_dt(datestr, timestr, fmt='%Y/%m/%d %H:%M:%S.%f'):
dt = datetime.strptime('{} {}'.format(fd, ft), fmt)
return dt.replace(microsecond=0)
file_time = [as_dt(fd, ft) for fd, ft in zip(file_date, file_time)]
也许答案不是这两个 - 只是因为它是允许的,并不意味着它是最好的方法。 pep8 的目的是提高可维护性和可读性。为了使其符合 pep8,更不用说更具可读性,也许您应该将其分成多行。
TIME_FORMAT = "%Y/%m/%d %H:%M:%S.%f"
for ii in range(len(file_time)):
date_time = "{} {}".format(file_date[ii], file_time[ii])
file_time[ii] = datetime.strptime(date_time, TIME_FORMAT)
file_time[ii] = file_time[ii].replace(microsecond=0)
pep8 中存在列限制的原因之一是鼓励您将代码分成更易读的部分。为了尽可能提高可读性,请尽量让您的代码每行执行一个操作。
python 中的一般规则是,如果表达式被括号包围,则表达式可以包含换行符,这就是为什么这个...
for ii in range(10):
foo = 1+
2+
3
... 生成语法错误,
虽然这...
for ii in range(10):
foo = (1+
2+
3)
...没有。
此外,由于您提到了缩进错误,请检查您是否始终使用制表符或空格进行标识。