Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2018-12-26T17:41:11+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Function en argument - signification de lambda, message #1956992018-12-26T17:41:11+01:00Rockaround/@Rockaroundhttps://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195699<p>Après pas mal de temps (la faute à Noël, dirons-nous), je poste juste pour vous remercier de vos réponses.</p>Function en argument - signification de lambda, message #1955022018-12-23T14:51:22+01:00adri1/@adri1https://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195502<p>Cela dit, construire une fonction partielle en lui passant en fait tous ses arguments ne donne pas un message très clair sur ce qui se passe. Je serais d’avis de conserver <code>lambda</code>, c’est pas du bricolage, ce mot clé existe spécifiquement pour construire des fonctions plutôt simples à la volée. On voit tout de suite ce que <code>lambda: f(x)</code> fait: construire une fonction ne prenant pas d’argument et dont le corps est <code>f(x)</code>. Par contre, avec <code>functools.partial(f, x)</code>, on sait pas trop ce qu’on obtient comme fonction et il faut aller voir <code>f</code> pour savoir quel argument elle attend.</p>Function en argument - signification de lambda, message #1954992018-12-23T14:34:18+01:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195499<p>Tu cherches peut-être <code>functools.partial</code> ?</p>Function en argument - signification de lambda, message #1954972018-12-23T14:09:01+01:00Rockaround/@Rockaroundhttps://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195497<p>Je me permets de reposter. J’ai bien compris l’utilité de <code>lambda</code> dans ce cas précis, mais il me semble que c’est un peu du bricolage : utiliser <code>lambda</code> pour définir une fonction déjà définie par ailleurs. Y a-t-il une autre manière plus "propre" pour indiquer que l’on veut utiliser la fonction avec un argument plutôt que son résultat ?</p>Function en argument - signification de lambda, message #1954702018-12-22T19:46:23+01:00Rockaround/@Rockaroundhttps://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195470<p>Je suis convaincu par ta réponse, merci ! C’est vrai que c’est évident en y pensant sous cet angle, mais je ne l’avais pas, cet angle, donc merci encore.</p>Function en argument - signification de lambda, message #1954662018-12-22T18:41:53+01:00Kanaal/@Kanaalhttps://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195466<p>J’espère ne pas dire de bêtises (je ne code pas trop).</p>
<p>Si tu écris
<code>self.translationOK.clicked.connect(self.onClickedValider(self.translationField))</code>
alors tu es en train d’appeler <code>self.translationOK.clicked.connect</code> avec comme argument le résultat de <code>self.onClickedValider(self.translationField)</code>. Cette dernière fonction ne renvoie sûrement rien, d’où le 'NoneType’.</p>
<p>En ajoutant le lambda, tu passes en argument une fonction dont le code est simplement <code>self.onClickedValider(self.translationField)</code>.</p>
<p>Dans le cas sans argument, je pense que si tu appelles <code>clicked.connect</code> avec <code>btnstate()</code> alors tu as aussi un problème car tu passes en argument le résultat de la fonction (les parenthèses font que la fonction est appelée).</p>
<p>Pour résumer, tu peux faire : </p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span></div><pre><code class="hljs language-py">clicked.connect(btnstate)
<span class="hljs-comment">#ou bien</span>
clicked.connect(<span class="hljs-keyword">lambda</span> : btnstate())
</code></pre></div>Function en argument - signification de lambda, message #1954642018-12-22T18:10:38+01:00Rockaround/@Rockaroundhttps://zestedesavoir.com/forums/sujet/11809/function-en-argument-signification-de-lambda/?page=1#p195464<p>Bonjour,</p>
<p>J’aimerais avoir des éclaircissement sur l’utilité et la signification d’ajouter <code>lambda:</code> quand certaines fonctions sont utilisées en paramètre d’autres fonctions.</p>
<p>Je pense au code trouvé <a href="https://www.tutorialspoint.com/pyqt/pyqt_qpushbutton_widget.htm">ici</a> dans lequel les fonctions <code>whichbtn</code> et <code>btnstate</code> sont très similaires, avec l’exception que l’une d’entre-elles a un paramètre d’entrée. L’appel dans le <code>clicked.connect</code> diffère par un <code>lambda:</code>, et malgré l’explication quelques lignes plus haut, je ne saisis pas bien ce que ca fait et veut dire.</p>
<p>J’ai eu le même soucis dans mon code, avec la même solution que je ne comprends pas.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-py"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AddSentence</span><span class="hljs-params">(Main)</span>:</span>
fieldsY=<span class="hljs-number">100</span>
fieldsX=<span class="hljs-number">100</span>
fieldWidth=<span class="hljs-number">850</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setUI</span><span class="hljs-params">(self)</span>:</span>
super().setUI()
self.translationField=QLineEdit(self)
self.translationField.move(self.fieldsX,self.fieldsY)
self.translationField.resize(self.fieldWidth,<span class="hljs-number">50</span>)
self.translationOK=QPushButton(<span class="hljs-string">"Valider"</span>,self)
self.translationOK.move(self.fieldsX+self.fieldWidth+<span class="hljs-number">50</span>,self.fieldsY)
self.translationOK.resize(<span class="hljs-number">100</span>,<span class="hljs-number">50</span>)
self.translationOK.clicked.connect(<span class="hljs-keyword">lambda</span>: self.onClickedValider(self.translationField))
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setUIList</span><span class="hljs-params">(self)</span>:</span>
<span class="hljs-keyword">pass</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">onClickedValider</span><span class="hljs-params">(self,translationField)</span>:</span>
sentenceList.append(translationField.text())
translationField.setText(<span class="hljs-string">""</span>)
self.setUIList()
self.update()
</code></pre></div>
<p>Sans ce <code>lambda:</code>, je me prends une erreur <code>TypeError: argument 1 has unexpected type 'NoneType'</code>.</p>
<p>J’ai cherché un peu sur mon moteur de recherche préféré, mais je ne trouve que des explications sur comment définir une fonction en utilisant le mot clé lambda, rien qui ne se rapproche de ce cas-ci.</p>
<p>Merci d’avance !</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1344022016-12-08T23:14:39+01:00Nemo/@Nemohttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134402<p>Merci pour le hint sur preparedStatement, je vais regarder ça et m'y atteler.
Ça semble effectivement d'une belle propreté!</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1343882016-12-08T20:49:49+01:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134388<p>Pour ta question générale, je ne pense pas q'une lambda puisse remplacer un opérateur ternaire. En Java en tout cas pas.
Peut-être en python oui.</p>
<p>Sinon pour ton code plus spécifiquement, je plussoie les avis précédents, ce serait déjà beaucoup plus simple si tu utilisais des requêtes préparées, et des objets java.sql.Date dont la conversion est gérée automatiquement (y compris null=>NULL) plutôt qu'une magouille moche et potentiellement dangereuse.
Avec des objets Date tu n'aurais même pas besoin d'utiliser d'opérateur ternaire.</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1343392016-12-08T14:41:23+01:00SpaceFox/@SpaceFoxhttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134339<p>Cela dit, en faisant du Java, la vraie solution est à trouver dans le message de Gawaboumga.</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1343382016-12-08T14:37:19+01:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134338<p>Pour compléter ce que dit Taurre, et sans faire du Java non plus, ton code est pas très lisible et la ligne logique très longue. Rien que le fait que les lignes 5 et 6 soient quasi-identiques fait que tu devrais revoir ça avec une petite fonction ou autre chose.</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1343312016-12-08T12:58:50+01:00Gawaboumga/@Gawaboumgahttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134331<p>Y a-t-il une bonne raison pour ne pas employer les <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html">PreparedStatements</a> ?</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1343302016-12-08T12:47:39+01:00Taurre/@Taurrehttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134330<p>Salut,</p>
<figure><blockquote>
<p>Est-ce que j'aurais pu coder la condition d'une autre manière, peut-être meilleure ou plus simple et/ou efficace?
</p>
</blockquote>
<figcaption><p><a href="https://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134326">Nemo</a></p></figcaption></figure><p>Alors, sans faire de Java, je peux t'assurer que la réponse est oui.</p>Une expression Lambda peut-elle remplacer un opérateur ternair, message #1343262016-12-08T12:21:56+01:00Nemo/@Nemohttps://zestedesavoir.com/forums/sujet/7526/une-expression-lambda-peut-elle-remplacer-un-operateur-ternair/?page=1#p134326<p>Recoucou tout le monde,</p>
<p>Félicitez-moi! Je viens de faire usage de l'opérateur ternaire en Java pour la première fois de moi-même!</p>
<p>Voyez plutôt quel usage j'en ai fait:</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="n">sql</span> <span class="o">=</span> <span class="s">"INSERT INTO FOOD_NAME (FOODID, FOODCODE, FOODGROUPID, FOODSOURCEID, FOODDESCRIPTION, "</span>
<span class="o">+</span> <span class="s">"FOODDESCRIPTIONF, FOODDATEOFENTRY, FOODDATEOFPUBLICATION, COUNTRYCODE, SCIENTIFICNAME)"</span>
<span class="o">+</span> <span class="s">" VALUES("</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">+</span> <span class="s">", "</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="o">+</span> <span class="s">", "</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span> <span class="o">+</span> <span class="s">", "</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span>
<span class="o">+</span> <span class="s">", '"</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">4</span><span class="o">].</span><span class="na">replaceAll</span><span class="o">(</span><span class="s">"\'"</span><span class="o">,</span> <span class="s">"\""</span><span class="o">)</span> <span class="o">+</span> <span class="s">"', '"</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">5</span><span class="o">].</span><span class="na">replaceAll</span><span class="o">(</span><span class="s">"\'"</span><span class="o">,</span> <span class="s">"\""</span><span class="o">)</span> <span class="o">+</span> <span class="s">"', "</span>
<span class="o">+</span> <span class="o">((</span><span class="n">nextLine</span><span class="o">[</span><span class="mi">6</span><span class="o">].</span><span class="na">compareTo</span><span class="o">(</span><span class="s">""</span><span class="o">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">?</span> <span class="o">(</span><span class="s">"PARSEDATETIME('"</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">6</span><span class="o">]</span> <span class="o">+</span> <span class="s">"', 'yyyy-MM-dd'), "</span><span class="o">)</span> <span class="o">:</span> <span class="s">"NULL, "</span><span class="o">)</span>
<span class="o">+</span> <span class="o">((</span><span class="n">nextLine</span><span class="o">[</span><span class="mi">7</span><span class="o">].</span><span class="na">compareTo</span><span class="o">(</span><span class="s">""</span><span class="o">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">?</span> <span class="o">(</span><span class="s">"PARSEDATETIME('"</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">7</span><span class="o">]</span> <span class="o">+</span> <span class="s">"', 'yyyy-MM-dd'), "</span><span class="o">)</span> <span class="o">:</span> <span class="s">"NULL, "</span><span class="o">)</span>
<span class="o">+</span> <span class="o">((</span><span class="n">nextLine</span><span class="o">[</span><span class="mi">8</span><span class="o">].</span><span class="na">compareTo</span><span class="o">(</span><span class="s">""</span><span class="o">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">?</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">8</span><span class="o">]</span> <span class="o">:</span> <span class="s">"NULL"</span><span class="o">)</span>
<span class="o">+</span> <span class="s">", "</span>
<span class="o">+</span> <span class="o">((</span><span class="n">nextLine</span><span class="o">[</span><span class="mi">9</span><span class="o">].</span><span class="na">compareTo</span><span class="o">(</span><span class="s">""</span><span class="o">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">?</span> <span class="o">(</span><span class="s">"'"</span> <span class="o">+</span> <span class="n">nextLine</span><span class="o">[</span><span class="mi">9</span><span class="o">]</span> <span class="o">+</span> <span class="s">"'"</span><span class="o">)</span> <span class="o">:</span> <span class="s">"NULL"</span><span class="o">)</span>
<span class="o">+</span> <span class="s">");"</span><span class="o">;</span>
</pre></div>
</td></tr></table>
<p>Est-ce que j'aurais pu coder la condition d'une autre manière, peut-être meilleure ou plus simple et/ou efficace?</p>
<p>Aussi, aurais-je pu faire usage d'expressions lambdas à la place du ternaire?
Si oui, ça ressemblerait à quoi?</p>
<p>A+
Nemo</p>