yine bir köşeye kendimi eğitimi atma? Görünüşe göre, 'normal' değişkenleri * değişkenleriyle karıştırmamalısınız, ancak bunu onaylamak veya reddetmek için kimseyi bulamıyorum. Bir yerde okudum (ve şu anda elbette bulamıyorum), bazı argüman türlerinin ilk önce gelmesi gerektiğine inanıyorum, bu da benim tartışmamın bir parçası olan veya olmayabilecek anahtar kelime argümanlarına inanıyorum.fonk (* args ** kwargs, x) nedir kural Im burada kırma</p> <pre><code>def superfunction(*args, **kwargs, k): ^ SyntaxError: invalid syntax </code></pre> <p>... geçersiz sözdizimi
cevap
bu deneyin:
def superfunction(k, *args, **kwargs):
**kwargs
değişken anahtar kelime parametresini işlev bildiriminde son parçası olmalıdır. İkinci uçtan, *args
değişken pozisyon parametresi. (Sadece Python 3.x'te, yalnızca *args
ve **kwargs
arasında yalnızca anahtar kelime parametrelerine sahip olabilirsiniz.) Ve ilk yerlerde konumsal parametreler - bu, işlev parametrelerini bildirmenin doğru yoludur. Daha fazla ayrıntı için bu post'a bir göz atın.
Tam referans için, Python 3.x veya Python 2.x'daki İşlev tanımları bölümüne bakın.
böylece adlandırılmamış vars, vars adı, *, ** – jason
Çalışmak için alabildiğim tek sıra def işlevsiz (k, n = 2, * args, **) kwargs): Beni doğru yola koyduğun için teşekkür ederim. – jason
followup: def süperfonu (k, n = 2, * args, * args2, ** kwargs): Çoklu * tür argümanlara sahip olmak da bir yazım hatası verir. Sanırım sadece bir tanesine izin verdi mi? – jason
dizimi böyle olmalı:
def superfunction(k, *args, **kwargs):
Önce tüm pozisyonel sonra argümanları olmayan kelime argümanları ve ardından anahtar kelime argümanlar vermek.
'da mümkündür. Ayrıca, argüman ve parametrelerin yanlış olmasının yanı sıra… anahtar kelime olmayan argümanlar ve konumsal argümanlar da aynı şeydir, bu yüzden kafa karıştırıcı ve yanlıştır. – abarnert
Doğru sıra: konumsal veya anahtar kelime paramları, daha sonra isteğe bağlı olarak * * args' (veya '*', sadece Python 3.x'te), sonra (yalnızca Python 3.x'te) yalnızca anahtar parazitleri, sonra '* * kwargs'. – abarnert
@abarnert Ah! Bu mu? Birkaç ay önce okudum, bu yüzden teknik terimini ve dolayısıyla bir karışımı unutmuşum gibi görünüyor. Bunu işaret ettiğin için teşekkürler. –
- 1. lambda * args ** kwargs: Yok
- 2. <nedir? ve <? php
- 3. Git, <<<<<<< HEAD dosyasına
- 4. Toplamda 1 <= i <j <k <= n'de GLPK
- 5. Nedir? ve << demek?
- 6. Bu def get_bold_lines_from_cell <p></p> çalışan (cellColumn, cellRow) fonk var,
- 7. X {..} <- getYesod notasyonu
- 8. ValueError: num olmalıdır 1 <= num <2 değil, 3
- 9. Yakalanmamış SyntaxError: Beklenmeyen belirteci <in <! DOCTYPE html>
- 10. Ne tür * args ** işlev önbellek için kwargs?
- 11. asp.net <%$ ... %> sözdizimi
- 12. Java, bitshifts kullanırken, neden 1 << 32! = 1 << 31 << 1?
- 13. Eclipse Codan destek</p> <pre><code>void someFunc(std::vector<int> args); </code></pre> <p>Ve olduğu gibi
- 14. EJS: <% = versus <% -
- 15. <: <İş nasıl?
- 16. kwargs
- 17. Bu garip koşullu operatör sözdizimi nedir?</p> <pre><code>bool bRes = (a < b) ? a=b, true : false; </code></pre> <p><code>a < b</code>, o zaman <code>a=b</code> infaz ve <code>bRes</code> doğrudur edilir:
- 18. Mock.assert_called_with() args vs kwargs için agnostic
- 19. Haritadaki değerleri ekleme < K, V >
- 20. css: 2 veya <code><thead></code> yılında <code><tr></code> daha varsa <tr>
- 21. "<%:" ne yapıyor?</p> <pre><code><%: Model.FirstName %> </code></pre> <p>"<%:" Ne vermez: do
- 22. Kanal seç <- <- Kanal
- 23. -><- operatör ne yapar? Bu ne</p> <pre><code>IntPredicate neg = x -> x <- x; </code></pre> <p>, ters çift lambda çeşit:
- 24. PHP ayrıştırma sözdizimi hatası '<'
- 25. Python: Burada <br/>
- 26. <cstdint> vs <stdint.h>
- 27. İçindeki eleman sayısı <5 in <a1 <0</ a1><T>
- 28. X * 2 + 1 hesaplamanın kısa bir yolu var mı? <br> <code>x = x*2;</code><code>x *= 2;</code></p> <p>gibi yazılmış olabilir
- 29. Görev veri bölgesi NO_PREF. Ne zaman kullanılır?</p> <ul> <li>PROCESS_LOCAL HERHANGİ</li> <li>NODE_LOCAL</li> <li>NO_PREF</li> <li>RACK_LOCAL</li> <li></li> </ul> <p>Hepsi oldukça açıktır: doc Spark göre
- 30. std :: set <K, C> :: operatörü <(const std :: <K, C> & set) ... daha az()
Bunun tam olarak niçin yanlış olduğunun ayrıntıları Python 2.x ve 3.x arasında biraz farklıdır; [Keyword Arguments] [Keyword Arguments] (http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments) ve referans bölümü [İşlev tanımları] (http://docs.python.org/ Uygun sürüm için 2/reference/compound_stmts.html # function) detaylara sahip. Ama kısaca, '' 'parametresinden sonra hiçbir şey gelemez. – abarnert
Ayrıca, tüm ayrıntıları açıklayan bir [blog gönderisi] (http://stupidpythonideas.blogspot.com/2013/08/arguments-and-parameters.html) aldım; Hiç acemi dostu olduğunu sanmıyorum… ama umarım referans dokümanları okumaktan en azından biraz daha kolay olur. (Bu, Python 3'e özgüdür, ancak.) – abarnert