我有以下代码:
This.is.a.supper.long.name = This.is.another.supper.long.name
Run Code Online (Sandbox Code Playgroud)
目前,我知道的唯一方法是转义换行符:
This.is.a.supper.long.name = \
This.is.another.supper.long.name
Run Code Online (Sandbox Code Playgroud)
有什么优雅的解决方案吗?
考虑以下代码片段:
name1 = "Nadya"
name2 = "Jim"
def print_string():
string = f"{name1}\n\
{name2}"
print(string)
print_string()
Run Code Online (Sandbox Code Playgroud)
产生
Nadya
Jim
Run Code Online (Sandbox Code Playgroud)
这有效,但string定义第二行缩进中的“中断”看起来很难看。我发现如果我缩进{name2}一行,这个缩进会出现在最后的字符串中。
我正在尝试找到一种方法来在新行上继续 f 字符串并缩进它,而不会在最终字符串中显示缩进。遵循我在普通字符串中看到的类似内容,我尝试过
name1 = "Nadya"
name2 = "Jim"
def print_string():
string = f"{name1}\n"
f"{name2}"
print(string)
print_string()
Run Code Online (Sandbox Code Playgroud)
但这会导致IndentationError: unexpected indent. 我正在尝试以另一种方式可能吗?
假设我有一个返回很多变量的函数:
def func():
return var_a, var_b, var_c, var_d, var_e, var_f, var_g, var_h, var_i,
Run Code Online (Sandbox Code Playgroud)
使用此功能会导致很长的行
var_a, var_b, var_c, var_d, var_e, var_f, var_g, var_h, var_i = func()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想使用断线器\,例如
a = var \
+ var \
+ var \
+ var \
+ var
Run Code Online (Sandbox Code Playgroud)
但是,我认为这对于函数的结果(即解包元组)是不可能的。有没有方法可以做到这一点?或者我应该找到另一种方法来返回更少的变量?您还有其他风格建议吗?
我对python相对较新,并且知道语法很少,但我愿意尽可能多地学习.简单地说,我想使用PIL中的保存功能来保存.png文件的名称是当前的日期和时间.由于我没有直接使用PIL,而是通过Videocapture模块,这可能会很复杂,但我对此表示怀疑.这是我的代码有效
from VideoCapture import Device
cam = Device()
cam.saveSnapshot('C:\Users\Myname\Dropbox\Foldes\image.png', timestamp=3, boldfont=1, textpos='bc')
Run Code Online (Sandbox Code Playgroud)
它的简短,但它确实是我需要的.我意识到需要导入Datetime,但是我无法将数据作为名称而没有错误.是的,我已经尝试过str()命令.任何帮助将不胜感激.
我有以下程序逐字读取文件并将该字再次写入另一个文件但没有第一个文件中的非ascii字符.
import unicodedata
import codecs
infile = codecs.open('d.txt','r',encoding='utf-8',errors='ignore')
outfile = codecs.open('d_parsed.txt','w',encoding='utf-8',errors='ignore')
for line in infile.readlines():
for word in line.split():
outfile.write(word+" ")
outfile.write("\n")
infile.close()
outfile.close()
Run Code Online (Sandbox Code Playgroud)
我面临的唯一问题是,使用此代码时,它不会向第二个文件(d_parsed)打印新行.任何线索?
我想打破这段代码:
ex = func(object) if not self.is_object() else foo()
Run Code Online (Sandbox Code Playgroud)
到多行(pep 8)。最好的方法是什么?我想过这个:
ex = func(object) \
if not self.is_object() \
else foo()
Run Code Online (Sandbox Code Playgroud)
但这似乎有点难看,也不是很整洁。还有其他方法吗?
编辑:这与将一行分成多行不同,因为这是一个特殊的“表达式 if stmnt else stmnt”,而不仅仅是破坏任何 python 代码。
如下面的代码所示,该groupby行应该被注释掉:
lines = fileinput.input(fin) \
| take(300) \
| where(lambda x: not x.strip().endswith(',,,,,')) \
\ # | groupby(lambda x: x[42])
| teeFile(fout,100)
Run Code Online (Sandbox Code Playgroud)
但是上面的语法 - 以及它的几个变体 - 不起作用:
\ # | groupby(lambda x: x[42])
^
SyntaxError: unexpected character after line continuation character
Run Code Online (Sandbox Code Playgroud)
已尝试的另一种变化:
# | groupby(lambda x: x[42]) \
Run Code Online (Sandbox Code Playgroud)
有没有办法评论一个需要延续字符的较长陈述的一部分?或者我们只是运气不好 - 就像python无法(/不愿意)支持内联评论一样?
我在 2.7
更新 此处是对代码段的一个小更新,使其完全自包含.
import sys, pipe, fileinput ; from pipe import *;
lines = fileinput.input(fin) \
| take(300) \
| where(lambda x: not x.strip().endswith(',,,,,,,,')) \
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试在python中将以下Feed解析为ElementTree:" http://smarkets.s3.amazonaws.com/oddsfeed.xml "(警告大文件)
这是我到目前为止所尝试的:
feed = urllib.urlopen("http://smarkets.s3.amazonaws.com/oddsfeed.xml")
# feed is compressed
compressed_data = feed.read()
import StringIO
compressedstream = StringIO.StringIO(compressed_data)
import gzip
gzipper = gzip.GzipFile(fileobj=compressedstream)
data = gzipper.read()
# Parse XML
tree = ET.parse(data)
Run Code Online (Sandbox Code Playgroud)
但似乎只是坚持下去compressed_data = feed.read(),无限可能?(我知道这是一个很大的文件,但与我解析的其他非压缩源相比似乎太长了,而且这一点很大程度上会从gzip压缩中获得任何带宽增益).
接下来我尝试requests了
url = "http://smarkets.s3.amazonaws.com/oddsfeed.xml"
headers = {'accept-encoding': 'gzip, deflate'}
r = requests.get(url, headers=headers, stream=True)
Run Code Online (Sandbox Code Playgroud)
但现在
tree=ET.parse(r.content)
Run Code Online (Sandbox Code Playgroud)
要么
tree=ET.parse(r.text)
Run Code Online (Sandbox Code Playgroud)
但这些提出了例外.
这样做的正确方法是什么?
有很多关于 python 中的行延续的问题,例如这里,这里和这里,大多数指向指南。
连续行应该使用 Python 在括号、方括号和大括号内连接的隐式行垂直对齐包裹的元素,或者使用悬挂缩进
大多数细节都围绕着一个长if语句,如果调用一个函数,它可以使用括号或隐式延续。
这就引出了一个问题,你应该如何处理import陈述?具体来说,我还能做什么
from concurrent.futures import \
ProcessPoolExecutor
Run Code Online (Sandbox Code Playgroud)
行延续是我唯一的选择吗?
我在不同的行上遵循相同的代码:
frame_rate = (float)
( ( ( frames * media_timescale) + \ //WHY???
( media_duration >> 1 ) ) /
media_duration);
Run Code Online (Sandbox Code Playgroud)
我不明白源文件中反斜杠的作用是什么?另外,为了计算帧速率,我们可以做如下:
frame_rate = (float) ( ( frames * media_timescale) / media_duration);
Run Code Online (Sandbox Code Playgroud)
是否有任何特定的意图来编写第一类代码?
python ×9
pep8 ×2
c ×1
datetime ×1
elementtree ×1
encoding ×1
f-string ×1
gzip ×1
hevc ×1
line-breaks ×1
python-2.7 ×1
utf ×1
video ×1
xml ×1