2010-04-15 15 views
36
Ben hesaplayan bir Python fonksiyonunu inşa etmek istiyor

,Unicode tanımlayıcıları?

alt text

ve benim toplamıdır fonksiyonu Σ adını vermek istiyoruz. Benzer şekilde, ürün için Π kullanmak ister. Bir python işlevini bu şekilde adlandırmanın bir yolu olup olmadığını merak ediyordum? olduğu

def Σ (..): 
.. 
.. 

, Python destek unicode tanımlayıcıları ve eğer öyleyse, birisi bunun için bir örnek verebilir ki?

Teşekkürler!


Bunun

Orijinal motivasyon oldu ben düşündüm ben benziyor bugün gördüğümüz Clojure kodu parçasıdır, Σ olarak tanımlanan bir makro olduğunu

(defn entropy [X] 
     (* -1 (Σ [i X] (* (p i) (log (p i)))))) 

,

(defmacro Σ 
    ...) 

ve oldukça havalıydı. BTW


, okunabilirlik hakkında yorumlarına bir çift ele almak - gerçekten yararlı olacağını sembollerle işlemleri oluşturmak edememek istatistikler/örneğin ML kodu, bir sürü.) (

φ(z) = ∫(N(x|0,1,1), -∞, z) 

Phi(z) = integral(N(x|0,1,1), -inf, z) 

vs veya lambda için bile sadece lambda karakteri (Özellikle gerçekten karmaşık integraller ve arkadaşları için)!

+6

yakın yazdırılır sürece

bile traceback daha net değil, Python'un toplamıdır fonksiyonu oldukça şık: 'toplamı()' –

+0

katılıyorum. Ben burada integraller, Yunan harfleri ve diğerleri gibi başka şeyler için daha çok şey ifade ettim. – viksit

+2

Girdi kolaylığı için korkunç bir fikir gibi geliyor (muhtemelen $ \ sum $ işe yaramaz, değil mi?) –

cevap

39

(biz meraklılarının olduğumuz anlamına olabildiği gibi, çok hoş serin olduğunu düşünüyorum.) Eğer Python 3'te yukarıda var kodu ile bunu yapmak iyiyiz

(Benim Python 3.1 tercüman çalışır . en az) Bkz:

Ama Python 2'de

+1

… "mektuplar" buradaki "ASCII harfleri" anlamına gelir. – EOL

6

Python 2.x bir tanımlayıcı olarak Σ desteklemediği dolayısıyla unicode tanımlayıcıları destekleyecek ve etmez. Python 3.x , unicode tanımlayıcılarını destekler, ancak kaynak dosyaları düzenlemek zorunda kaldıklarında, örneğin A ve ident (latin A ve yunan sermaye alfa.) Tanımlayıcıları olmak zorundaysa, çoğu kişi çapraz olacaktır. kelime sigma olarak okunabilir değil, bu yüzden neden rahatsız?

+7

Sembollere göre kelimelerin okunabilirliği, içeriğe bağlı olduğunu düşünüyorum. Bir şey okuduğumda, (örneğin, 'x + y') sembollerini bulduğunuz diyelim eşdeğerlerden daha okunabilir buluyorum, örneğin, AppleScript (ör. X ile y arasında ekle). Semboller daha açıcıdır ve genellikle, beynin şekil vermekten daha kolay olduğunu düşündüğüm, sadece şekil tanıma üzerine geçmenize izin verir. Yine de koduma sigma işareti ekleme gereği duymak için yeterince mafya işi yapmıyorum. –

+0

Elbette, sembollerin sözcüklerden daha okunaklı olduğu birçok durum vardır. Veya ASCII olmayan karakterlerin daha iyi ifade ettiği yerler. Çoğunlukla tek sigma oluşan bir tanımlayıcı gerçekten kelimenin 'sigma' :) –

+0

Sadece bunun için de bir düzenleme eklendi üzerinde bir gelişmedir olmadığı gerçeği yorumlarken geldi. Gibi bir şey oluşturmayı deneyin, (lambda x: N/(sigma * (2 * numpy.pi) **. 5) * numpy.e ** (- (x-mu) ** 2/(2 * sigma ** 2))) hehe. – viksit

13

is it bad'a göre, bazı unicode karakterlerini kullanabilirsiniz, ancak hepsi değil: Harf olarak tanımlanan karakterlerle kısıtlısınız.

>>> α = 3 
>>> Σ = sum 
>>> import math 
>>> √ = math.sqrt 
  File "<stdin>", line 1 
    √ = 3 
      ^ 
SyntaxError: invalid character in identifier 

Ayrıca: Ben tanımlayıcı olarak unicode kullanmak edebilmek için çok serin olduğunu düşünüyorum - ve ben tümünü kullanabilir isterdim.

αβχδεφγψιθκλνοπφστ [& ωξυζ
∀⇐ℂΔ∃ΦΓΨ∫Λ⇔Σ∈ℚℝ∂⊂√∩Ξ

+3

Ayrıca, genellikle Yunan harfleri de olan karakterlerin farklı sürümleri vardır. Örneğin, Yunan sermaye sigma U + 03A3 iken, matematik sigma stiline bağlı olarak U + 1D6BA, U + 1D6F4, U + 1D72E, U + 1D768 veya U + 1D7A2'dir. Benzer şekilde, Yunan başkenti omega U + 03A9, matematik omegası U + 1D6C0'da başlar ve Ohm sembolü U + 2126'dır. –

+1

Çoğu sembolün girilmesinin bir başka güzel yolu, örn. Windows üzerinde [WinCompose] (https://github.com/SamHocevar/wincompose) –

14

:

ekstra katmanlarında beni Yunan ve matematik sembolleri veren neo keyboard layout kullanmak Python 3 'un'un Unicode tanımlayıcılarını desteklediğini ancak yalnızca harf veya sayı gibi sembollere izin verdiğini belirtmek gerekir (tüm ayrıntılar için bkz. http://docs.python.org/3.3/reference/lexical_analysis.html#identifiers). Bu yüzden Σ çalışır (sadece bir matematik sembolü değil, bir Yunan harfinin olduğunu unutmayın), ama √ yapmaz.

11

@ Mike-DeSimone söz Unicode belirleyicilere

ilave gotcha ((bu yanıt küçük bir ek olup tam bir yanıt için ifade edilmektedir) ve bu serin iplik olduğunu düşünmüş edildiğinde hızlı bir şekilde tespit edilmiş ve açık onunla oynamak için bir terminale), her bir glifin birden fazla versiyonu, her platformda her bir glifinize nasıl ulaştığınıza ilişkin olarak eşdeğer değildir. Örnek Σ için (diğer adıyla Yunan harfi sigma, diğer adıyla U + 03A3, [doğrudan yağmurluk giriş yöntemi mümkün değil]) gayet iyi, ama diğer adıyla da bilinir N-aril toplamı, diğer adıyla U +, 2211, ne yazık ki Σ (Mac OS X kullanılarak opt/alt-w geçerli bir tanıtıcı değil.

>>> Σ = 20 
>>> Σ 
20 

ama Σ özellikle (ve muhtemelen genel olarak unicode karakter) bir tanımlayıcı olarak kodunuzda katkıda çoklu platformlarda birden fazla geliştirici varsa bazı çok sert hataları teşhis etmek oluşturabilir kullanma

>>> ∑ = 20 
File "<input>", line 1 
    ∑ = 20 
^
SyntaxError: invalid character in identifier 

, örneğin, ayıklama bu görsel:

∑ looks very similar to Σ, depending on the typeface selected

iki glifleri üzerinde ayırt etmek kolaydır Bu sayfa, ancak kullanılan yazı tipine bağlı olarak, durum böyle olmayabilir. Σ olarak serin olmasa da Σ

File "~/Dev/play_python33/identifiers.py", line 12 
    print(∑([2, 2, 2, 2, 2])) 
      ^
SyntaxError: invalid character in identifier 
+1

Başka bir getka, * eşittir * birden fazla glif vardır. 'Φ = 5''i tanımlayın, sonra' ϕ φ' → True – endolith