I took these notes while ramping up on Python, to be able to contribute to a few Github projects, deploy AWS Lambdas quicker, and use boto3 for quite a few projects. Plus I find it a very light, frictionless, quick and easy scripting language to have in the arsenal. This information can be particularly useful to anyone who is coming from a Java background, and wants to compare and contrast the two languages’ basic constructs and syntax.

Setup

I recommend using Atom, and installing the Script package. Once done, make sure you download and install Python 3.x. For OSX, this will also install pip3, which is the Python Package Manager. I noticed that on Ubuntu Xenial I had to install pip3 via sudo apt install python3-pip.

There is a (closed) issue logged for Atom to work with Python 3 on OSX, but none of it worked for me except using shebang. Just put #!/usr/local/bin/python3 as the first line in the file which you’ll write code in.

To write code, create a new file in Atom, and you’re good to go. On OSX use ⌘+i to execute.

I’d also recommend checking out the Python Domain on HackerRank for hands-on practice.

That said, lets get started.

Comments

Java

//  This is a comment
/*  
    This is a
    multi line comment
*/

Python

# This is a comment

Variables

Java

String name = "Name";
int age = 42;
boolean completed = false;
char c = 'A';
float f = 0.0034;

//conversions
Integer.parseInt("1234");
Object.toString();
Long.parseLong("1024");
Boolean.parseBoolean("false");
//casting
(int) n;
(float) f;
(long) l;
(Object) o;

Python

name = "Name"
age = 42
completed = False
c = 'A'
f = 0.0034

# casting
int(value)
str(value)
float(value)
bool(value) # Will only return false for an empty string or an int=0
list_of_ints = [int(i) for i in list_of_strings]

Hello World

Java

//With newline
System.out.println("Hello World!");
//Without newline
System.out.print("Hello World!");

Python

# With newline
print("Hello World");
# Without newline
print("Hello World", end='')

Read Input

Java

Scanner scanner = new Scanner(System.in);
System.out.println("Enter name");
String name = scanner.next();
System.out.println("Enter age");
int age = scanner.nextInt();
System.out.println("Name is " + name + " and age is " + age);

Python

name = input("Enter name\n")
age = int(input("Enter age\n"))
print("Name is ", name ," and age is ", age)

Operators

Java

int i = 5;
int j = 3;
System.out.println("Sum : " + i+j);
System.out.println("Diff : " + (i-j));
System.out.println("Product : " + i*j);
System.out.println("Modulo : " + i%j);
System.out.println("Power : " + Math.pow(i,j));
System.out.println("Floor Division : " + i/j);
System.out.println("Float Division : " + (float)i/j);

Python

i = 5;
j = 3;
print("Sum : ", i+j)
print("Diff : " , i-j)
print("Product : " , i*j)
print("Modulo : " , i%j)
print("Floor Division : " , i//j)
print("Float Division : " , i/j)

If-then-else

We use the if-then-else exercise from Hackerrank as an example.


If n  is odd, print Weird
If n is even and in the inclusive range of 2 to 5 , print Not Weird
If n is even and in the inclusive range of 6 to 20, print Weird
If n is even and greater than 20 , print Not Weird

Java

if(n%2==1) System.out.println("Weird");
else if(n%2 == 0 && n >=2 && n <= 5)
  System.out.println("Not Weird");
else if(n%2 == 0 && n >= 6 && n <= 20)
  System.out.println("Weird");
else if(n%2 == 0 && n > 20)
  System.out.println("Not Weird");

Python

if n%2 == 1  :
    print("Weird")
elif n%2==0 and n >=2 and n <=5 :
    print("Not Weird")
elif n%2==0 and n >=6 and n <=20 :
    print("Weird")
elif n%2==0 and n > 20 :
    print("Not Weird")

Switch

Java

switch(dayOfWeek){
    case 0 :
    case 6 :
        System.out.println("Weekend");
        break;
    case 5 :
        System.out.println("TGIF");
        break;
    default:
       System.out.println("Weekday");
}

Python

Python does not really have a switch/case. if/elif/else are used instead.

if n == 0 or n == 6 :
    print("Weekend")
elif n == 5 :
    print("TGIF")
else :
    print("Weekday")

For Loop

Java

for(int i=0;i<5;i++){
  System.out.println(i);
}

for(char c : "Manish".toCharArray()){
    System.out.println(c);
}

Python

for n in range(5) :
    print(n)

for c in "Manish" :
  print(c)

Python also supports Scala style For Comprehensions, which are called Generators. There is a subtle difference though, as you can see below.

def square(n):
    for i in range(n):
        yield i**2

for i in square(10):
    print(i)

While Loop

Java

int n = 0;
while(true){
  ++n;
  System.out.println(n);
  if(n==20) {
    break;
  }
}
System.out.println("Loop Broke with n = " + n);

Python

n = 0
while True :
    n = n + 1
    print(n)
    if n==20 :
        break
print("Loop broke with n = ",n)

Exceptions and Errors

Java

try{
  doSomething();
}catch(SomeException e){
  //do something
}catch(SomeOtherException e){
  //do something else
}finally{
  //always executes
}

Python

try:
    assert(1==2) # This will cause an error
except AssertionError:
    print("Caught Assertion Exception")
except : # catch all exceptions
    print("Caught unknown exception")
else: # happy path
    print("No exceptions raised")
finally: # will execute regardless of exceptions or happy path
    print("Done with the assertion")

Functions

Java

public int add (int x, int y){
  return x+y;
}

System.out.println(add(1,2));

Python

def add(x, y):
    return x+y # If return is skipped, the method returns a None

print(add(1,2))

# Can be called with named arguments

print(add(x=5,y=7)) # Will print 12

# Can take default arguments too
def add(x, y=2):
  return x+y

print(add(5)) # Will return 7

Collections - Lists

There are technically no Arrays in Python, just Lists. Also, they may contain many types of elements, but in practice it is just one type. Python Lists are mutable.

Java

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add(3,"D");
Collections.sort(list); //in place sort
list.remove("C"); //remove the first occurrence of "C"
list.remove(2); //remove object at the index 2
Collections.reverse(list); //reverse the list
int n = list.indexOf("A"); //return the index of first occurrence of "A"
List<String> list1 = new ArrayList<>();
list1.add("E");
list1.add("F");
list.addAll(list1); //add list1 elements to list at the end
int size = list.size(); //size of the list

Python

list = [] # create a new list
list.append("A") # add to the end
list.append("B")
list.append("C")
list.insert(3,"D") # insert at an index
sorted_list = sorted(list) # returns a new, sorted list
list.sort() # in place sort
list.remove("C") # remove first occurrence of "C"
popped = list.pop(2) # return and remove the item at index 2
list.reverse() # reverse the list
a = list.index("A") # return index of "A"
list += ["E","F"] # add a list with E and F to the end of this list
size = len(list) # size of the list

Collections - Sets

Java

 Set<String> set1 = new HashSet<>();
 set1.add("A");
 set1.add("B");
 set1.add("C");
 Set<String> set2 = new HashSet<>();
 set2.add("C");
 set2.add("D");
 set2.add("E");
 //intersection
 Set<String> intersection = new HashSet<>(set1);
 intersection.retainAll(set2);
 //union
 Set<String> union = new HashSet<>(set1);
 union.addAll(set2);

Python

set_of_words1 = set() # create a new set. Note that we do not use {}, as that is for the dict
set_of_words1.add("The") # add values
set_of_words1.add("A")
set_of_words1.add("Boat")
print("Boat" in set_of_words1) # True
set_of_words2 = {"Anchor","A","Coast"} # create another set and populate it
print(set_of_words1.intersection(set_of_words2)) # intersection
print(set_of_words1.union(set_of_words2)) # union
for value in set_of_words2 : # all values
    print(value)

Collections - Tuples

There are no Tuples in Java. A tuple is an immutable collection of values.

Python

words =  ("Good", "Morning") # or words = "Good", "Morning"
print("Good" in words) # True
print(hash(words)) # This is what makes the tuples so special - they are hashable
a,b = words # or a,b = "Good", "Morning"
print(a) # Good
print(b) # Morning
print(len(words)) # 2

Collections - Maps

Maps are called dicts or Dictionaries in Python.

Java

 Map<String,Integer> wordCount = new HashMap<>();
 wordCount.put("anchor",2);
 wordCount.put("dock",3);
 wordCount.put("the",10);
 wordCount.put("a",8);
 wordCount.put("boat",1);
 int the = wordCount.get("the");
 Set<String> keys = wordCount.keySet();
 Collection<Integer> values = wordCount.values();
 boolean exists = wordCount.containsKey("a");
 Set<Map.Entry<String,Integer>> entries = wordCount.entrySet();
 int foo = wordCount.get("foo"); //throws NullPointerException

Python

wordcount_map = {} # create a new, empty dict
wordcount_map = {"anchor":2, "dock":3} # create a new dict and add key-values
wordcount_map["the"] = 10 # add keys and values
wordcount_map["a"] = 8
wordcount_map["boat"] = 1
print(wordcount_map["the"]) # value of a key
print(wordcount_map.keys()) # List of keys
print(wordcount_map.values()) # List of values
print("a" in wordcount_map) # True
print(wordcount_map.items()) #prints tuples of key-value pairs
print(wordcount_map["foo"]) # throws a KeyError

Classes and Objects

Java

public class MyClass{

    List<String> words;

    public MyClass(){
        words = new ArrayList<>();
        words.add("baz");
    }

    public MyClass(List<String> data){
        words = data;
    }

    public int count(){
        return words.size();
    }
  }

//Usage
MyClass myClass = new MyClass();
System.out.println(myClass.count()); // will print 1
List<String> data = new ArrayList<String>();
data.add("foo");
data.add("bar");
myClass = new MyClass(data);
System.out.println(myClass.count()); // will print 2

Python

For more details like member visibility and multiple inheritance, etc., see here

class MyClass:
    words = []

    def __init__(self, data=["baz"]): # think of this as a Constructor in Java
        self.words = data

    def count(self): # think of self as "this" in Java
        return len(self.words)

# Usage
clz = MyClass()
print(clz.count()) # will print 1
print(clz.words) # will print ['baz']
clz = MyClass(["foo","bar"])
print(clz.count()) # will print 2
print(clz.words)  # will print ['foo','bar']

Reading and Writing Files

Java

Here is an example with Apache Commons FileUtils

File file = FileUtils.getFile("/tmp/foo.txt");

//Read line by line
LineIterator it = FileUtils.lineIterator(file);
while (it.hasNext()) {
    System.out.println(it.next());
}

//Read the entire file in memory
String contents = FileUtils.readFileToString(file);

//Write to a file
File file = FileUtils.getFile("/tmp/bar.txt");
FileUtils.write(file,"This is a test", "UTF-8");


Python

# read line by line
f = open("/tmp/foo.txt","r")
for line in f:
  print line
f.close()

# read the entire file in memory
f = open("/tmp/foo.txt","r")
contents = f.read()
print(contents)
f.close()

# write to a file
f = open("/tmp/bar.txt","r+") # open for both read and write
f.write("This is a test")
contents = f.read()
print(contents) # will print "This is a test"

Handling HTTP Communication

Java

Here is an example with okhttp

  OkHttpClient client = new OkHttpClient();
  Request request = new Request.Builder()
        .url("https://lobster1234.github.io")
        .build();
  Response response = client.newCall(request).execute();
  System.out.println(response.body().string());
  //similarly, use response's methods to get other values like status code, etc.

Python

First, install requests using pip3.

pip3 install requests

Then, you’re ready to make HTTP requests

import requests
r = requests.get("https://lobster1234.github.io")
print(r.headers) # headers as a dict
print(r.status_code) # 200
print(r.content) # body
r.close()

Summary

While these notes provide a quick kick-start and a glimpse in Python Programming, I encourage you to visit python.org and check out the documentation. There is a lot more to Python than what is covered here. Please let me know your feedback with a tweet/DM, and thank you for stopping by!