Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Tools for Visual Studio

Python Tools for Visual Studio

Presented at Future Decoded 2016, Milan, Italy
Presented live at MSDN TechHeroes Italy

Nicola Iarocci

April 27, 2016
Tweet

More Decks by Nicola Iarocci

Other Decks in Programming

Transcript

  1. Python Tools for Visual Studio Introducing Python to the .NET

    crowd by Nicola Iarocci @nicolaiarocci nicolaiarocci.com
  2. OVERVIEW ➤ Python in 5 minutes ➤ Python from the

    C# perspective ➤ Python Tools for Visual Studio ➤ Demo ➤ Take aways
  3. PYTHON IN A NUTSHELL ➤ High level, open source programming

    language ➤ Object oriented ➤ Interpreted (sometimes JIT compiled) ➤ Strongly typed with dynamic semantics ➤ Syntax emphasizes readability ➤ Supports modules and packages ➤ Cross platform since the beginning ➤ Very mature: 20+ years in the making ➤ Comes with batteries included ➤ Rich ecosystem ➤ Strong, welcoming and passionate community
  4. EMPHASIS ON READABILITY also super easy to write! def hello(name):

    if name == “david bowman”: print(“Hi old friend”) else: print(“Nice to meet you”) print(“My name is HAL9000”) def main(): guest = input(“What is your name?”) hello(guest)
  5. PYTHON SYNTAX ➤ codeblocks are defined with whitespace and colons

    ➤ code blocks start with ‘:’ ➤ whitespace really matters ➤ there are no braces ➤ there are no parentheses ➤ there are no semicolons ➤ spaces over tabs by convention ➤ IDEs and editors follow conventions! def hello(name): if name == “Nicola”: print(“Hi old friend”) else: print(“Nice to meet you”) print(“My name is HAL9000”) def main(): guest = input(“What is your name?”) hello(guest)
  6. EVERYTHING IS AN OBJECT C# class Document : object {

    public void Serialize() { // ... } public override string ToString() { return "I am a document"; } } Python class Document( object ): def serialize(self): # ... def __str__(self): return "I am a document."
  7. int[] numbers = new[] {1, 2, 3, 4, 5, 6};

    foreach (var n in numbers) { Console.Write(n + ","); } C# IENUMERABLE + FOREACH LOOPS Python numbers = [1, 2, 3, 4, 5, 6] for n in numbers: print(n, end=', ')
  8. C# IENUMERABLE + FOREACH LOOPS class ShoppingCart : IEnumerable<Tuple<string,float>> {

    List<Tuple<string, float>> cartItems = new List<Tuple<string, float>>(); public void Add(string name, float price) { cartItems.Add(new Tuple<string,float>(name, price)); } public IEnumerator<Tuple<string, float>> GetEnumerator() { return cartItems.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } Python class ShoppingCart: def __init__(self): self.items = [] def add(self, name, price): self.items.append( (name, price) ) def __iter__(self): return self.items.__iter__()
  9. C# PROPERTIES class ShoppingCart { public float TotalPrice { get

    { float total = 0; foreach (var item in cartItems) { total += item.Item2; } return total; } } } Console.WriteLine("Total price: {0}", cart.TotalPrice); Python class ShoppingCart: @property def total_price(self): total = 0.0 for item in self.items: total += item[1] return total print("Total is {0}".format(cart.total_price))
  10. C# LAMBDA EXPRESSIONS private static IEnumerable<int> FindNumbers(Predicate<int> predicate) { for

    (int i = 0; i < 100; i++) { if (predicate(i)) yield return i; } } IEnumerable<int> nums = FindNumbers(n => n % 11 == 0) // nums =[0, 11, 22, 33, 44, 55, 66, 77, 88, 99] Python def find_numbers(predicate): for i in range(100): if predicate(i): yield i nums = find_numbers(lambda n : n % 11 == 0) # nums = [0, 11, 22, 33, 44, 55, 66, 77, 88, 99]
  11. C# ITERATOR METHODS & YIELD RETURN private static IEnumerable<int> FibonacciGenerator()

    { int current = 1; int next = 1; yield return current; while (true) { int temp = current + next; current = next; next = temp; yield return current; } } Python def fibonacci_generator(): current, nxt = 1, 1 yield current while True: current, nxt = nxt, current + nxt yield current
  12. C# PACKAGE MANAGEMENT PM>Install-Package mongocsharpdriver Installing 'mongocsharpdriver 1.9.1'. Successfully installed

    'mongocsharpdriver 1.9.1'. Adding 'mongocsharpdriver 1.9.1' to YourApp. Successfully added 'mongocsharpdriver 1.9.1' to YourApp around 57,000 packages on NuGet Python c:\>pip install pymongo Downloading/unpacking pymongo Running setup.py egg_info for package pymongo Installing collected packages: pymongo Running setup.py install for pymongo Fixing build\lib.win-amd64-3.4\bson\binary.py... Successfully installed pymongo Cleaning up... around 82,000 packages on PyPI
  13. MORE ON PYTHON ➤ Python: An amazing second language for

    .NET developers, 
 by Michael Kennedy ➤ Learn Python the Hard Way, 
 by Zed Shaw ➤ Python in 10 minuti (Italian), 
 by Nicola Iarocci ➤ The Python Tutorial, 
 python.org ➤ Google
  14. PYTHON AND VISUAL STUDIO Did you know that you can

    do Python with your favourite IDE?
  15. TAKE AWAYS ➤ VS Community Edition + Python = free

    development environment on Windows ➤ Python folks finally have a great development environment on Windows ➤ .NET crowd can build stuff in Python using their favorite IDE and toolset ➤ Python is a great second language for C# developers ➤ Diversity is good. And it matters.