問題タブ [argument-unpacking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
529 参照

python - リスト内包表記pythonで文字列を解凍する

次のコードを取得しました。

そのため、 hand は文字列のリストになりました ['6C', '7C', '8C', '9C', 'TC']

それから

ランクは今[6, 7, 8, 9, 10]

目的は、カードのランクに適切な数値を与えてソートできるようにすることです。つまり、「T」->10、「J」->11、「Q」-12、「K」->13、および「A」->14 です。 .

なぜそれが機能するのか理解できません!

  • リストから項目を取得するにはlist[item]
  • 文字列をスライスすることは"string"[0]

ランクリストの理解ではわかりません。

ありがとうございました!

0 投票する
1 に答える
244 参照

c++ - std::pair 割り当てとダウンキャスト

イベント リアクターとプロアクターのタイムアウトについては、イベントの O(log(n)) ランダム アクセス削除も許可するプライオリティ キューを使用します (タイムアウトが発生するのではなく、イベントが通知/完了された場合)。を呼び出すときに効率的な削除を可能にするために、追加するクラスがインデックス (キューを指す) を持っているstd::pair<std::chrono::steady_clock::time_point, Timed *>場所を保存します。タイムアウトに関連付けられたイベント タイプが必要な場合は、. キューのとペアを返します。TimedTimedQ::Remove(Timed *p)TimedTop()Pop()

以前は、次のようなキューを使用するコードがたくさんありました

タイムアウトに関連付けることができる複数の異なるイベント タイプを最終的にサポートする必要があったためTimed *、特定のイベント タイプの代わりにキューで基本クラスを使用する前 (つまり、元々はテンプレート化されたタイプでした) は問題なく機能していました。Timedただし、eventPtr*派生型 (キューによって返される型static_castからTimed *取得できる) であるため、上記のようなコードは機能しなくなります。

これを行うための最良の方法は何だろうと思っています。現在、非常に冗長になっており、一時的な作成などの効率も懸念されています。

私が持っていた他の唯一のアイデアは、派生したイベント クラスによってペアを返す関数をテンプレート化することでしたが、これはコード サイズの観点からは貧弱に思えます。いずれの場合も、格納されるのはポインターです。


編集: これもコンパイルしてみましたが、正しいか効率的かわかりません:

最初の例は次のようになります

0 投票する
5 に答える
5453 参照

python - Python キーワード引数をアンパックして辞書を返す

以下のような関数定義があり、キーワード引数を渡しています。キーワード引数と同じ名前の辞書を返すにはどうすればよいですか?

手動でできること:

しかし、私はそれをしたくありません。実際にdictを入力せずにこれを機能させる方法はありますか?

0 投票する
1 に答える
109 参照

python - argspec でのタプルのアンパック

私はこの機能を知らずに何年も python2 を使用してきましたが、タプルのアンパックは関数定義でサポートされているようです:

デフォルトも許可されていますが、関数定義時ではなく関数呼び出し時にアンパックされているようです。そして、パックされた引数の1つ/任意/すべてを名前で渡す方法がわかりませんでした。おそらく不可能です。

これは明らかに奇妙な実装の詳細だけではありません:文法、特に an を注意深く読むfpdefと、関数定義がタプルのアンパック用に明示的に設計されていることがわかります。

私の質問は、なぜこれが設計上の選択だったのか、それが必要なユースケースの例は何ですか? 私には、python 1、2、3、5、7、9、13、17 の禅に違反する、あいまいでエラーが発生しやすい機能のようです....

0 投票する
1 に答える
364 参照

python - 関数の引数のパッキング/アンパッキングを処理するためのより良い (つまり、より Pythonic な) 方法はありますか?

オブジェクトに「ティックを追加」するメソッドを書いています。(「目盛りを追加する」という意味は私の質問には関係ありません。私のコードサンプルでは「バッチ」変数を無視することもできます。)すべての目盛りは同じ幅と長さになりますが、目盛りの位置は異なります。呼び出しごとに可変数のティックにすることができます。現在、私の方法は次のようになります。

これは、次のように呼び出すとうまく機能します。

しかし、0 から 59 までのすべての整数位置に目盛りを追加したい場合、すべての数字を入力したくありません。現在、私は次のように呼んでいます:

つまり、範囲を作成し、リスト内包表記を介してそれをリストに変換し、呼び出し時にそのリストをアンパックして、メソッドがタプルとしてパックされたリストを受け取ることができるようにします。それは機能しますが、コードを読んでいる他の人にとっては少し面倒で混乱する可能性があります。

私の質問は次のとおりです。

  1. 経験豊富な Python プログラマーは、私のようにその構造につまずくでしょうか?
  2. 同じ効果を達成するためのより良い方法はありますか?
  3. メソッドのシグネチャを変更する必要がありますか? に置き換えることができることはわかっています*tickstickList、それを呼び出すたびに、目盛りの値をリストで囲む必要があり、それは私にはうるさいようです。

(これは Python 2.7 用です)


編集:ユーザーフリークは、 *range(0,60) が機能するという答えをくれました。機能していることはわかりますが、どう説明すればよいかわかりません。「イテレータをアンパック」しましたが、何が得られるのでしょうか? これはリストではなく、タプルでもありません。「イテレータの要素」とだけ言いますか? (Python は問題なくプログラムできますが、話すのが難しいだけです)。


編集:さて、リストに切り替えました(そして、幅と長さのペアの展開を停止しました)。私のメソッドは次のようになりました

これは、次のように呼び出していることを意味します。

range私の最初の本能は、範囲外のリストを作成することですが、リストと同じくらい反復可能であるため、直接渡すことができることに気付くのは Pythonic だと思いますか?

0 投票する
2 に答える
110 参照

f# - for x in seq の x を seq に変換する方法

これは、このSO-postに対するフォローアップの質問です。

このコード ブロックを考えると (csvData1 は .csv ファイルです)。

xシーケンスの各要素をアンパックしたくない場合はどうすればよいでしょうかy。andxを使用できるように、シーケンスに変換するにはどうすればよいですか?Seq.fstSeq.snd

これらの要素を解凍できることはわかっています。x私の質問は、特にそれが System.Tupleであることを考えると、これを行う別の方法を見つけることです。

0 投票する
1 に答える
2354 参照

python - *引数アンパッキング演算子をオーバーロードする方法は?

のようなデータがありますdata = [[t1, t2, ...], [v1, v2, ...]]。これをクラスにラップして、data.tを使用する代わりに呼び出すことができるようにしますdata[0]

私は次のようにしてこれをやろうとしました:

__getitem__andのオーバーロードの理由__setitem__は、下位互換性のためであり、data[0]それでも機能します。これはほとんどの場合に機能しますが、次の呼び出しで問題が発生します。

私が得るエラーは

引数のアンパック演算子を使用してクラスを適切に機能させるにはどうすればよいですか?

0 投票する
2 に答える
457 参照

python - Python アンパック演算子が順序付けされていないコレクションで機能するのはなぜですか?

アンパック演算子 ( ) に関するPython 3 チュートリアル*では、一般的に「リストまたはタプル」について説明していますが、不適切な使用に関するエラー メッセージには、「シーケンス」が必要であることが示されています。

Python 3 の組み込み型のドキュメントには、次のシーケンス型がリストされています。

  • シーケンス タイプ — listtuplerange
  • テキスト シーケンス タイプ —str
  • バイナリ シーケンス タイプ — bytesbytearraymemoryview

クイックテスト:

セット タイプ (setや などfrozenset) とマッピング タイプ ( dict) はここには含まれていないことに注意してください。


私の質問:すべてのイテラブル型 (setまたはを含むdict) がアンパック可能なのはなぜですか? TypeError上記が示唆するように、これらはシーケンス型ではなく、順序付けられていない動作により、位置引数のアンパック時に未定義の結果が発生します。