2

テキストのスタイリングに使用するh1andimgや などの関数で満たされた python ファイルがあります。strongこれらの各関数は、次のように定義されています。

def _wrapTag(tag, text, **attributes):
    out = _createTag(tag, **attributes)
    out += text
    out += "</" + tag + ">"
    return out

def _createTag(tag, **attributes):
    out = "<" + tag
    if attributes:
        for attr, value in attributes:
            out += " " + attr + "=\"" + value + "\""
    out += ">"
    return out

def h2(text, **attributes):
    return _wrapTag("h2", text, **attributes)

理想的な世界ではdiv、 classを使用して を作成するには、ただし、制限されたキーワードmodalを呼び出します。に特別なケースを追加せずにこれをバイパスする方法はありますか?div(content, class="modal")class_createTag

4

3 に答える 3

4

末尾にアンダースコアを追加するPEP 8の標準的な処理方法:

  • single_trailing_underscore_: Python キーワードとの競合を避けるために慣例により使用されます。

Tkinter.Toplevel(master, class_='ClassName')

これは一般的な回避策であり、誰も驚かないでしょう。次のようなコードでそれを実装できます。

def _createTag(tag, **attributes):
    out = "<" + tag
    if attributes:
        for attr, value in attributes.items():
            out += " " + attr.rstrip('_') + "=\"" + value + "\""
    out += ">"
    return out

すべての属性から余分なアンダースコアが自動的に削除されるようにします。次に、次のように呼び出すことができます。

>>> h2('contents', class_='myh2tag', id_='contenttag')
'<h2 class="myh2tag" id="contenttag">contents</h2>'

また、2 つの個別の Python 名前空間の競合を、どちらも特別なケースとして扱わずに回避します。

于 2012-11-15T21:06:56.380 に答える
1

いいえ。Python キーワードは識別子として使用できません。それだけです。これらの種類のものの通常の解決策はclass_、名前として使用することです。特別なケーシングが必要ですが、それを回避する方法はありません。

于 2012-11-15T21:01:12.887 に答える
0
_createTag(tag, **{"class": 1})

この構文を使用すると、**attributes に何でも渡すことができます。関数のコード変更は必要ありません。

于 2012-11-15T21:35:40.927 に答える