Мне нужен пример IronPython\Python, который продемонстрировал бы разработчикам С#/VB.NET, насколько это замечательно.
Я ищу фрагмент кода легко понятный, который можно использовать для демонстрации возможностей Python.
Любые мысли?
Мне нужен пример IronPython\Python, который продемонстрировал бы разработчикам С#/VB.NET, насколько это замечательно.
Я ищу фрагмент кода легко понятный, который можно использовать для демонстрации возможностей Python.
Любые мысли?
Я бы сделал быструю демонстрацию чего-то тривиального (по крайней мере, на Python), но прохладно в IDLE. Например:
>>> 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
...
Это показывает, как выглядят классы базового списка и словаря, как работают списки, имена, аргументы, лямбда-выражения, полезность интерактивного интерпретатора, и он выполняет довольно сложную задачу в семи строках кода.
Edit:
О, и тогда я расскажу, как работает код, если вы установили letters
с помощью выражения генератора:
letters = (c.lower() for c in text if c.isalpha())
... то есть точно так же.
Питер Норвиг корректор орфографии в 21 строке Python 2.5.
Перепишите любое небольшое приложение С# в IronPython и покажите им, сколько строк кода вам понадобилось. Если это не впечатляет, я не знаю, что есть.
Я имею в виду одно из ваших внутренних приложений.
На самом базовом уровне вы можете показать программу смены строк в С# и Python.
В С#:
public static string ReverseString(string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
В Python:
s[::-1]
Я чувствую, что вам нужно демонстрацию нескольких примеров, а не только одного. Создайте что-то простое, как выше, и перейдите к более сложным.
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)
Говорящий клиент Twitter. Дополнительные примеры http://www.ironpython.info/index.php/Main_Page
Что-то простое, но классное с генераторами, может быть?
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))
Как насчет демонстрации утиного набора? Например, перенаправление StdOut на gui.
Или некоторые из исключительно полезных чистых библиотек python (SqlAlchemy помнит о моей работе, ваш пробег может меняться).
Некоторые из коротких битов синтаксиса также будут хороши, например:
Получите быстрый обзор большого набора данных:
print data[::1000]
Найдите все строки, начинающиеся с 'a':
[s for s in list_of_strings if s.startswith('a')]
Затем покажите им версию генератора:
the_as = (s for s in really_big_list_of_strings if s.startswith('a'))
the_as.next()
Я должен согласиться с Geo. Покажите приложение С# или VB рядом с тем же приложением, написанным на IronPython. Когда я закончил переговоры с IronPython, у меня был большой успех, преобразовывая код С# в Python. Это делает очень драматичную презентацию.
Я также большой поклонник показать, как утиная печать делает ваш код более надежным.
Генераторы, определяющие итератор, простые
Вы можете использовать CherryPy пример helloworld:
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
Как насчет генератора простых чисел.
>>> 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]
Покажите им пример из поваренной книги IronPython, как этот, на DataGridView Custom Formatting. Это не ужасно кричащий, но это то, о чем все будут знать, потому что почти все создали приложение с gridview (или хочет сделать это).
Самая важная часть вашей демонстрации - это прохождение кода, в котором вы указываете, что вещи менее подробные, чем С#, и более похожие на VB.
Обязательно измените пример из кулинарной книги, чтобы отобразить некоторые из батарей, входящих в состав Python. Возможно, используйте модуль os
, чтобы получить список каталогов и заполнить сетку с именем файла, размером, созданной датой и т.д.
Возможность сделать это благодаря способности IronPython добавлять новых членов к типу во время выполнения впечатлила меня