Как произвести впечатление на разработчиков с помощью IronPython / Python [закрыто]

Мне нужен пример IronPython \ Python, который показал бы разработчикам на C # / VB.NET, какой классный на самом деле этот язык.

Я ищу простой для понимания фрагмент кода или приложение, которое можно использовать для демонстрации возможностей Python.

Какие-нибудь мысли?

10.11.2009 13:49:53
Язык потрясающий. Твердые продажи - хорошая поддержка IDE для Python и .Net вместе.
Ben Robbins 13.11.2009 18:26:35
sharpdevelop.net имеет отличную поддержку IronPython и .NET.
Kim André Sand 1.12.2009 11:21:50
13 ОТВЕТОВ
РЕШЕНИЕ

Я бы сделал небольшую демонстрацию чего-то тривиального (по крайней мере, в 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
...

Это показывает, как выглядят базовые классы списка и словаря, как работают списочные выражения, именованные аргументы, лямбда-выражения, полезность интерактивного интерпретатора, и это выполняет довольно сложную задачу в семи строках кода.

Редактировать:

О, и я бы тогда продемонстрировал, как работает код, если вы установите lettersс помощью выражения генератора:

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

... то есть точно так же.

6
10.11.2009 18:48:55
обидно, collections.Counterчто сделаю всю работу за вас тогда :)
SilentGhost 10.11.2009 19:17:55
Меня удивляет, как часто случается, что я создаю что-то в Python, которое оказывается уже существующим.
Robert Rossney 10.11.2009 20:24:59
ОК, его нет в 2.6. Теперь я чувствую себя немного менее глупым.
Robert Rossney 10.11.2009 22:53:45

Корректор орфографии Питера Норвига в 21 строке Python 2.5.

19
10.11.2009 13:55:55
Это удивительное приложение - но мне нужно многое объяснить аудитории, чтобы понять, что там происходит, мне нужно что-то попроще.
Dror Helper 10.11.2009 14:01:14
FWIW в DevDays London Майкл Спаркс объяснил это довольно подробно за один час, и ИМХО, он сделал отличное введение в Python.
Dominic Rodger 10.11.2009 14:10:13
если объяснение 21-строчной программы занимает час, выберите другую программу!
Steven A. Lowe 10.11.2009 14:26:56
На самом деле, кроме метода edits1 (который создает похожие слова для данного слова), его не так сложно понять.
Rasmus Kaj 10.11.2009 14:38:37
В дополнение к объяснению Python, алгоритм орфографии должен быть объяснен, что не является целью оригинального плаката.
Eric O Lebigot 10.11.2009 15:14:41

Может быть, что-то простое, но классное с генераторами?

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))
3
10.11.2009 14:28:33
Ницца. Понимание списка и генераторы были бы моими отправными точками в демонстрации Python.
mavnn 10.11.2009 14:31:21

Перепишите любое маленькое приложение на C # в IronPython и покажите им, сколько строк кода вам потребовалось. Если это не впечатляет, я не знаю что.

Я имею в виду одно из ваших внутренних приложений.

9
10.11.2009 14:30:50
Дело в том, что я бы взял читабельность за меньшее количество строк в любой день.
RYFN 18.11.2009 15:21:21
Это неизбежно, что количество линий будет значительно уменьшаться. Я почти уверен, что читаемость Python не пострадает.
Geo 18.11.2009 15:26:51

Генераторы, определяющие итератор, простые

http://ttsiodras.googlepages.com/yield.html

2
10.11.2009 14:35:06

Как насчет генератора простых чисел.

>>> 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]
1
10.11.2009 14:39:59

Как насчет демонстрации печати утки? Например, перенаправление StdOut в графический интерфейс.

Или некоторые из исключительно полезных библиотек на чистом питоне (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()
3
10.11.2009 15:30:00

Покажите им пример из поваренной книги IronPython, такой как этот, по пользовательскому форматированию DataGridView . Это не очень кричащее, но это то, с чем все будут знакомы, потому что почти каждый создал приложение с gridview (или хочет сделать это).

Самая важная часть вашей демонстрации - это пошаговое руководство по коду, в котором вы указываете, что вещи менее многословны, чем C #, и более похожи на VB.

Не забудьте изменить пример из поваренной книги, чтобы показать некоторые батареи, включенные в Python. Возможно, используйте osмодуль, чтобы получить список каталогов и заполнить сетку именем файла, размером, датой создания и т. Д.

1
10.11.2009 15:26:32

Вы можете использовать пример helloworld от CherryPy :

import cherrypy

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

cherrypy.quickstart(HelloWorld())
2
10.11.2009 18:44:25

Я должен согласиться с Гео. Покажите приложение на C # или VB рядом с тем же приложением, написанным на IronPython. Когда я закончил свои выступления с IronPython, у меня был большой успех в превращении кода C # в Python. Это делает для очень драматического представления.

Я также большой поклонник демонстрации того, как печатание на клавиатуре делает ваш код более тестируемым.

3
10.11.2009 21:31:38

На самом базовом уровне вы можете показать программу обращения строк в C # и Python.

В C #:

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

В Python:

s[::-1]

Я чувствую, что вы должны продемонстрировать несколько примеров, а не только один. Создайте что-нибудь простое, как показано выше, и перейдите к более сложным.

4
14.11.2009 03:53:46
Для тех, кто не знаком с Python, s [:: - 1], вероятно, выглядит как кошачья типизация.
Nosredna 18.11.2009 15:54:06
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

4
18.11.2009 15:46:50
Не было бы так же легко сделать это с помощью C #?
Dror Helper 18.11.2009 16:03:23
Привет, Дрор, я подозреваю, что C # будет более LOC. Этот пример демонстрирует простоту интеграции .Net и показывает удобочитаемость Python. Согласитесь, что вам, вероятно, понадобится пример материала для ниндзя со списками или словарями в дополнение к этому. Удачи!
daftspaniel 19.11.2009 08:20:26

Возможность сделать это благодаря способности IronPython добавлять новых членов в тип во время выполнения произвела на меня впечатление

http://ironpython-resource.com/post/2008/08/23/IronPython-Dynamically-creating-objects-and-binding-them-to-a-form.aspx

0
27.11.2009 12:23:00