2

私はいくつかの Web2py コードを見ています。

変数tokensは、ある種の文字列のリストです。より正確には、tokens = form.vars.name.split()whereform.vars.nameは文字列として定義されます。

私の質問は次の指示を扱います:

query = reduce(lambda a,b:a&b,[User.first_name.contains(k)|User.last_name.contains(k) for k in tokens])

ここに私の質問があります:

  1. lambda a,b:a&bの関数を定義していることは知っています。とは?aba&b

  2. contains方法はUser.first_nameWeb2py 特有のものですか?それとも、標準の Python に存在しますか?

  3. この|演算子は何User.first_name.contains(k)|User.last_name.contains(k)ですか?

  4. 関数は何をしreduceますか?

4

3 に答える 3

7
  1. In Web2Py &and| はビットごとの and/or hereではありませんが、データベース クエリを表す特別なオブジェクトを構築するために使用されます! それらは SQL ステートメントに対応しANDORSQL ステートメント内で
  2. containsWeb2Pys DALの一部です
  3. 1を参照してください。
  4. reduce はfoldであり、指定された関数を使用して、本質的にリストを結果に還元する非常に基本的な高階関数です。
于 2011-06-03T16:59:14.043 に答える
0
  1. &ビットごとの and 演算子です。andブール値の場合、結果は同じですが、コードを書いている人はほぼ確実に を意味していました。

  2. .contains()web2pyが提供するメソッドです。a.contains(b)のようによりPython的に書かれていb in aます。

  3. |ビットごとの OR 演算子です。繰り返しますが、彼らはおそらくor.

  4. reduce最初の引数として指定された関数を 2 番目の引数の iterable に適用します。左から右へ、最初の 2 つの要素、次にその計算の結果と 3 番目の要素、というように適用されます。

于 2011-06-03T16:57:42.040 に答える
0
  1. ビット単位と.
  2. そのコンテキストでは、多かれ少なかれへのマッピングが含まれていると思いますが、 Py3k docs__contains__に表示されます。
  3. ビット単位または.
  4. reduceは反復可能なオブジェクト (パラメーター 2) を反復処理し、渡された関数 (パラメーター 1) をすべての要素で呼び出します。集計値を返します。
于 2011-06-03T16:56:53.043 に答える