2009-11-10 15 views
10

Ho bisogno di un esempio di IronPython \ Python che mostri agli sviluppatori C#/VB.NET quanto sia fantastico questo linguaggio.Come impressionare gli sviluppatori con IronPython/Python

Sto cercando uno snippet di codice o un'applicazione che posso utilizzare per dimostrare le funzionalità di Python.

Qualche idea?

+1

Il linguaggio è impressionante. L'hard sell è un buon supporto IDE per Python e .Net insieme. –

+0

sharpdevelop.net ha un eccellente supporto per IronPython e .NET. –

risposta

6

Farei una rapida demo di qualcosa di banale (in Python, almeno) ma interessante in IDLE.Per esempio:

>>> text = # some nice long text, e.g. the Gettysburg Address 
>>> letters = [c.lower() for c in text if c.isalpha()] 
>>> letters 
    ['f', 'o', 'u', 'r', 's', 'c', 'o', 'r', 'e', 'a', 'n', 'd', 's', 'e', 'v', 'e', 
    ... 
>>> freq = {} 
>>> for c in letters: 
     freq[c] = freq.get(c, 0) + 1 

>>> freq 
    {'a': 102, 'c': 31, 'b': 14, 'e': 165, 'd': 58, 'g': 28, 'f': 27, 'i': 68, 'h': 80, 
    ... 
>>> for c in sorted(freq.keys(), key=lambda x: freq[x], reverse=True): 
     print c, freq[c] 

e 165 
t 126 
a 102 
... 

Questa mostra fuori quello che la lista di base e le classi del dizionario assomigliano, come list comprehension lavoro, argomenti con nome, espressioni lambda, l'utilità di un interprete interattivo, e si compia un compito abbastanza complicato in sette linee di codice.

Edit:

Oh, e mi piacerebbe poi in mostra come il codice funziona se si imposta letters utilizzando un generatore di espressione:

letters = (c.lower() for c in text if c.isalpha()) 

... vale a dire, esattamente lo stesso.

+1

è un peccato che ['collections.Counter'] (http://docs.python.org/3.1/library/collections.html#collections.Counter) farebbe tutto il lavoro per te allora :) – SilentGhost

+5

Mi stupisce come spesso succede che io costruisca qualcosa in Python che risulta esistere già. –

+2

OK, non esiste in 2.6. Mi sento leggermente meno stupido ora. –

19

Peter Norvig's spelling corrector in 21 linee di Python 2.5.

+2

È un'applicazione fantastica, ma dovrei spiegare molto al pubblico per capire cosa sta succedendo lì, ho bisogno di qualcosa di più semplice. –

+2

FWIW, a DevDays London Michael Sparks l'ha spiegato in modo abbastanza completo in un'ora, e IMHO ha fatto un'ottima introduzione a Python. –

+6

se ci vuole un'ora per spiegare un programma a 21 linee, scegli un programma diverso! –

3

Qualcosa di semplice ma interessante con i generatori, forse?

def isprime(n): 
    return all(n%x!=0 for x in range(2, int(n**0.5)+1)) 

def containsPrime(start, limit): 
    return any(isPrime(x) for x in xrange(start, limit)) 
+0

Bello. La comprensione delle liste e i generatori sarebbero alcuni dei miei punti di partenza per mostrare Python. – mavnn

9

Riscrive ogni piccolo C# applicazione in IronPython, e mostrare loro come molte righe di codice che ti hanno preso. Se non è impressionante, non so cosa sia.

Mi riferisco a una delle tue app interne.

+0

la cosa è che prenderei la leggibilità su meno linee ogni giorno. – RYFN

+3

È inevitabile che il numero di linee diminuisca notevolmente. Sono abbastanza sicuro che la leggibilità di Python non dovrà soffrire. – Geo

1

ne dite di un generatore di numeri primi.

>>> def sieve(x): 
... if x: return [ x[0] ] + sieve([ y for y in x if y % x[0] > 0 ]) 
... return [] 
... 
>>> sieve(range(2,100)) 
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 
3

Che ne dici di una dimostrazione della digitazione anatra? Reindirizzamento di StdOut a una GUI, ad esempio.

O alcune delle librerie di python pure eccezionalmente utili là fuori (SqlAlchemy mi viene in mente nella mia linea di lavoro, il tuo chilometraggio può variare).

alcuni dei bit taglio corto di sintassi sarebbe bene così, per esempio:

avere una rapida visione di un grande insieme di dati:

print data[::1000] 

Trova tutte le stringhe che iniziano con 'un ':

[s for s in list_of_strings if s.startswith('a')] 

Poi mostrare loro la versione generatore:

the_as = (s for s in really_big_list_of_strings if s.startswith('a')) 
the_as.next() 
1

Mostra loro un esempio dal ricettario IronPython come questo su DataGridView Custom Formatting. Non è terribilmente appariscente, ma è qualcosa che tutti conoscono perché quasi tutti hanno costruito un'app con una gridview (o vuole farlo).

La parte più importante della demo è la procedura dettagliata del codice in cui si evidenzia come le cose siano meno dettagliate di C# e più simili a VB.

Assicurati di cambiare l'esempio dal ricettario per mostrare alcune delle batterie incluse da Python. Forse usa il modulo os per ottenere un elenco di directory e compilare la griglia con nomefile, dimensione, data di creazione, ecc.

2

Si potrebbe utilizzare CherryPy s' HelloWorld esempio:

import cherrypy 

class HelloWorld(object): 
    def index(self): 
     return "Hello World!" 
    index.exposed = True 

cherrypy.quickstart(HelloWorld()) 
3

Sono d'accordo Geo. Mostra un'app C# o VB accanto alla stessa app scritta in IronPython. Quando ho fatto i miei discorsi IronPython, ho avuto un sacco di successi nella conversione del codice C# in Python. È una presentazione molto drammatica.

Sono anche un grande fan di mostrare come la digitazione anatra rende il codice più verificabile.

4

Al livello di base è possibile visualizzare un programma di inversione di stringhe in C# e Python.

In C#:

public static string ReverseString(string s) 
{ 
    char[] arr = s.ToCharArray(); 
    Array.Reverse(arr); 
    return new string(arr); 
} 

In Python:

s[::-1] 

ritengo che si dovrebbe demo molteplici esempi, piuttosto che uno solo. Costruisci da qualcosa di semplice, come quello sopra, e vai a quelli più complessi.

+0

Per chi non ha familiarità con Python, s [:: - 1] probabilmente sembra una digitazione tipo gatto. – Nosredna

4
import clr 
clr.AddReference('System.Speech') 
clr.AddReference('System.Xml') 

from System.Speech.Synthesis import SpeechSynthesizer 
from System.Net import WebClient 
from System.Xml import XmlDocument, XmlTextReader 


content = WebClient().DownloadString("http://twitter.com/statuses/public_timeline.xml") 
xmlDoc = XmlDocument() 
spk = SpeechSynthesizer() 

xmlDoc.LoadXml(content) 
statusesNode = xmlDoc.SelectSingleNode("statuses") 
for status in statusesNode: 
    s = "<?xml version=\"1.0\"?><speak version=\"1.0\" xml:lang=\"en-US\"><break/>" 
    s = s + status.SelectSingleNode("text").InnerText + "</speak>" 
    spk.SpeakSsml(s) 

Un client Twitter parlante. Per ulteriori esempi http://www.ironpython.info/index.php/Main_Page

+0

Non sarebbe altrettanto facile farlo usando C#? –

+0

Ciao Dror, sospetto che il C# sarebbe più LOC. Questo esempio dimostra la facilità di integrazione .Net e mostra la leggibilità di Python. Concordo sul fatto che probabilmente vorrai un esempio di materiale ninja con elenchi o dizionari oltre a questo. In bocca al lupo! – daftspaniel

Problemi correlati