0

私の質問は非常に簡単です。

長いSQLセンチメントを変数に書き込むときは、次の形式を使用します。

sql = """ select a, b, c, d ,e,
          from tables where a=a and b=b and c=c and so on..
      """

しかし、ifステートメントの変数にこの「テクニック」を使用するのは正しいですか?

例1:

if message[0] == """ this is a huge message, and it will
probably break to a second line, ( i told you )
""":
    print "   alfa "
else:
    print "  omega "

例2:

html=i.invoke_server('localhost')

doc = LH.fromstring(html)
LE.strip_tags(doc,'b')
regex ="""
//td[text()='activeThreadCount']
/following-sibling::*/text()
"""

例2では、​​PEP8が使用して言うことを達成できると思います

regex ="""
//td[text()='activeThreadCount']
/following-sibling::*/text()
"""

代わりは

regex ="//td[text()='activeThreadCount']/following-sibling::*/text()"

しかし、それは正しいですか?正規表現、xpath xpressions、またはその他のものをこのように分割しますか?

この質問のほとんどは、1行で最大79文字を使用することに関してPEP8の手順に従っているためです。

これが正しい方法ではない場合、PEP8の適応症に従うために何ができるでしょうか?

4

5 に答える 5

1

""" それは良い方法ですが、時々私はこれがより良いと思います:

customMsg = "****************\n"
customMsg +="* SOME STRING  *\n"
customMsg +="****************\n"

print customMsg

****************
* SOME STRING  *
****************

「\n」の使用法に注意してください。

次のようになります。

customMsg ="****************\n* SOME STRING  *\n****************\n"
print customMsg

****************
* SOME STRING  *
****************

しかし、最初のものは明らかに

""" 例:

customMsg ="""****************
* SOME STRING  *
****************
"""
于 2012-10-31T19:15:02.577 に答える
1

reモジュールに対して明示的に、 re.VERBOSE(またはre.X) を使用する場合、非常に複雑な正規表現には複数行の文字列を使用することをお勧めします。http://docs.python.org/2/library/re.html#re.X (引用)を参照してください。

このフラグを使用すると、見栄えの良い正規表現を記述できます。パターン内の空白は無視されます。ただし、文字クラス内またはエスケープされていないバックスラッシュが前にある場合、および文字クラス内またはエスケープされていないバックスラッシュが前にない「#」が行に含まれている場合は、そのような「#」の左端からすべての文字が無視されます。 ' 行末までは無視されます。

これは、10 進数に一致する次の 2 つの正規表現オブジェクトが機能的に等しいことを意味します。

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")

r"raw string"正規表現パターンを使用する場合の使用法に注意してください。

于 2012-10-31T19:54:38.513 に答える
1

三重引用符で囲まれた構文は、改行が必要な場合に複数行のテキストを埋め込むのに最適です。

message = """\
This is a multi-line message.

 + Source lines match string lines 1:1.
 + No '\\n' noise.
"""

残念ながら、インデントされたコードの途中に置くと、各行の先頭のスペースが文字列の一部になります。 textwrap.dedent()その日を節約します:

def f():
   """Indented docstrings look good.

   If you'll peek at f.__doc__, you'll see leading whitespace here.
   But we don't care because pydoc, doctest and other docstring-parsing
   tools are smart enough to strip it.
   """
   if X:
       print """\
Here I'm writing flush-left to avoid leading whitespace.
But this breaks the visual flow in a horrible way!
"""
   print "where am I now? how did I get here?"
   print textwrap.dedent("""\
       This is much better!  I can have the cake and eat it.
       Unlike docstrings, don't start the first line after quotes.
       """)

しかし、あなたのすべての例では、改行は望ましくありません。
SQL のように、気にしない場合もあります。長い正規表現については、re.VERBOSEオプションをチェックして、意味のない空白やコメントを許可してください。xpathについてはわかりません。

正確な文字列を気にする場合は、三重引用符を使用しないでください。連結を使用します。

xpath = ("//td[text()='activeThreadCount']"
         "/following-sibling::*"
         "/text()")

最後に、80 列のガイドラインにやみくもに従わないでください。周囲のコードや人々と一貫性を保ちますが、場合によっては、長い行が実際には最善であることに注意してください。たとえば、ソースを読んでいる人がクリックまたはコピーして貼り付けると予想される長い URL は、はるかに便利です。

于 2012-10-31T20:01:20.407 に答える
0

新しい行をエスケープできます。試す:

"This is a really long string \
that is going to break lines"

これは、「これは非常に長い文字列であり、行が途切れる」と出力されます。

于 2012-10-31T18:46:29.380 に答える
0

これは、関数が長くなりすぎた場合は分割するという変形だと思います。sqlstrings を作成している場合は、次のように記述してください。

def sqlmap(*arg):
    sql = "select * from TABLE where "
    for a,b in arg[0].items():
        op,val = b
        sql += " ".join([a,op,val])

    print '>> ',sql

conditions = {'A':['=','B']}
sqlmap(conditions) 
#output >>  select * from TABLE where A = B
于 2012-10-31T19:23:06.103 に答える