Operatörün ** Python'da nasıl uygulandığını göstermek için kaynağı nerede bulacağımı merak ediyorum. Birisi bana doğru yönde işaret edebilir mi?** Python'da nasıl uygulanır?
cevap
(ayrıştırıcı pgen kullanılarak üretilen edildiği) piton dilbilgisi tanımı, 'güç' için bak: 'ast_for_power' arayın Gramar/Gramar
piton ast: Python/ast.c
piton Eval döngü, Python/ceval.c
PyNumber_Power çağırır (Objects/abstract.c uygulanan):
PyObject *
PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
{
return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
}
'BINARY_POWER' aramaya
Esasen, pow yuvasını çağırın. Uzun nesneler (3.0 tek varsayılan tamsayı türü) için bu, sen long_pow içine kazmak Eğer int_pow fonksiyonu Object/intobject.c
uygulanan (2.x dallarında) int nesneler için, long_pow fonksiyonu Objects/longobject.c uygulanan keyfi hassasiyet için verimli üs alma algoritmaları açıklanır Handbook of Applied Cryptography arasında Chapter 14.6 tartışılan algoritmalar kullanır
if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
/* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
/* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
for (i = Py_SIZE(b) - 1; i >= 0; --i) {
digit bi = b->ob_digit[i];
for (j = 1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
MULT(z, z, z)
if (bi & j)
MULT(z, a, z)
}
}
}
else {
/* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
Py_INCREF(z); /* still holds 1L */
table[0] = z;
for (i = 1; i < 32; ++i)
MULT(table[i-1], a, table[i])
for (i = Py_SIZE(b) - 1; i >= 0; --i) {
const digit bi = b->ob_digit[i];
for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
const int index = (bi >> j) & 0x1f;
for (k = 0; k < 5; ++k)
MULT(z, z, z)
if (index)
MULT(z, table[index], z)
}
}
}
: Eğer argümanları inceleme ve kurmak biraz yaptıktan sonra, üs kalbi burada göremiyor olabilir görebilirsiniz aritmetik.
Bu operatör
python.org doc - Power operator
Düzenleme güç var: Ah, dang, kod, doğru. Umarım bağlantı hala yardımcı olur. Özensiz parçamdan okudu
Biri int (3.0'da uzun) nesneler ve bir kayan nesneler için bir tane olmak üzere iki farklı uygulama vardır.
Float pow, Python kaynak kodunun Objects/floatobject.c dosyasında tanımlanan float_pow (PyObject * v, PyObject * w, PyObject * z) işlevidir. Bu işlev, Ctrllib'in math.h
'dan gelen çağrıları çağırır. Int pow'in kendi uygulaması vardır, Objects/intobject.c'de tanımlanan int_pow (PyIntObject * v, PyIntObject * w, PyIntObject * z) işlevidir (longobject). Python kaynak kodunun 3.0.
Sanırım caseysrandomthoughts, fonksiyon tanımında yıldız işaretleri soruyor.
Bu Python doc sayfasından cevap bulabiliriz: http://docs.python.org/tutorial/controlflow.html#more-on-defining-functions
formun nihai biçimsel parametre ** isim, resmi bir parametreye karşılık gelen dışındaki tüm anahtar kelime argümanları içeren bir sözlük mevcut görevlileri tarafından yapılıyor.
Bu şeyin python belgesinde başka bir yerde tarifini açıklıyorum ama hatırlayamıyorum.
- 1. Nümerik dizi veya pandalarla pythonda rutini sadeleştirme
- 2. schema.org includesIn nasıl uygulanır?
- 3. Set.toString() nasıl uygulanır?
- 4. LowPass Filtresi nasıl uygulanır?
- 5. AngularFireAuth nasıl düzgün uygulanır?
- 6. OpenID nasıl uygulanır?
- 7. Zamanlanmış döngü nasıl uygulanır?
- 8. 'Beğen' sistemi nasıl uygulanır
- 9. Bir MPVolumeView nasıl uygulanır?
- 10. string.find, CPython'da nasıl uygulanır?
- 11. BigDecimal nasıl uygulanır?
- 12. Braintree escrow nasıl uygulanır
- 13. teradata sıralaması nasıl uygulanır
- 14. operatörü sil - nasıl uygulanır?
- 15. Django yamaları nasıl uygulanır
- 16. Üye türleri nasıl uygulanır?
- 17. "const" nasıl uygulanır?
- 18. Paralaks kaydırma nasıl uygulanır?
- 19. WPF'nin DependencyObject nasıl uygulanır?
- 20. DAO Scala'da Nasıl Uygulanır?
- 21. MonoTouch'da UISearchBar nasıl uygulanır
- 22. GWT'de HashMap nasıl uygulanır?
- 23. Java'da polimorfizm nasıl uygulanır?
- 24. Symbol.iterator nasıl uygulanır?
- 25. Minimal Denetleyici Nasıl Uygulanır
- 26. BOOST_TYPEOF nasıl uygulanır?
- 27. Neo4j kalıcılığı nasıl uygulanır?
- 28. C++ arayüzleri nasıl uygulanır?
- 29. Doğrulama nasıl uygulanır?
- 30. Java akışı nasıl uygulanır?
Fonksiyon çağrısına/tanımına atıfta bulunulduğunda, ** bir operatör değil, çağrı/tanım sözdiziminin bir parçasıdır (http://docs.python.org/3.0/reference/expressions.html#id7, http: // docs.python.org/3.0/reference/compound_stmts.html#function-definitions) –