2016年1月30日 星期六

Python VS Swift

Code Comments

Both languages have comments:
# Python has single line comments 
 
// Swift has single line comments
/* Swift also has multi-line
   comments in C style
*/

Declaring Constants and Variables

Swift has rich support for type inference and constants. Python is dynamic and does not natively support constants.
name = "A string variable in Python"
age = 42 # An integer variable in Python
 
var name = "A string variable in Swift"
var age : Int // An explicit integer variable in Swift
age = 42
 
let pi = 3.14 // Constant in Swift

Integer Bounds

# Python does not have upper bounds for integer numbers (Python 3)
large_nun = 10000000000000000000000000000000000000000000000000000
 
// Swift
var a = Int32.min
var b = Int32.max

Type Inference

Swift is a strongly-typed language which makes heavy use of type-inference although you can declare explicit types. Python is a dynamic language so while there is a type system it is not evident in the syntax.
# Python
name = "Michael" # string variable, but can change
name = 42        # would run
n = 42           # currently an int
d = 42.0         # currently a float
 
// Swift
var name = "Michael" // string
name = 42            // Error
var n = 42           // int
var d = 42.0         // double

String Comparison

Python and Swift both have Unicode strings. Python generally has richer string support than Swift (especially around string formatting).
# python
a = "some text"
b = "some text"
if a == b:
    print("The strings are equal")
 
# swift
var a = "some text"
var b = "some text"
if a == b {
    println("The strings are equal")
}
Both languages have many functions on strings
# python
if a.startswith("some"): 
     print("Starts with some")

if a.endswith("some"):
     print("Ends with some")
 
// swift
if a.hasPrefix("some") {
     println("Starts with some")
 }
 
if a.hasSuffix("some") {
     println("Endss with some")
 }

String Upper or Lower Case

# python
s = "some text"
u = s.upper()
l = s.lower()
 
// swift
var s = "some text"
var u = s.uppercaseString
var l = s.lowercaseString

Declaring Arrays

Neither language has strict array types in the sense of C-based arrays. The arrays in Swift and Python are closer to lists. Python’s lists are not typed (hence can be heterogeneous).
# python
nums = [1,1,3,5,8,13,21]

// swift
var nums = [1,1,3,5,8,13,21]          // int array
var strings = ["one", "two", "three"] // string array

Working with Arrays

# Iteration in python
nums = [1,1,3,5,8,13,21]
for n in nums:
    print(n)
 
# Iteration in Swift:
var nums = [1,1,3,5,8,13,21]
for n in nums {
    println(n)
}
 
# Element access
n = nums[2]      # python, n = 3
var n = nums[2]  # swift,  n = 3
 
# Updating values
nums[2] = 10 # python
nums[2] = 10 # swift
 
# Check for elements
# python
if nums:
    print("Nums is not empty")

// swift
if !nums.isEmpty {
    println("Nums is not empty")
} 
 
# Adding items:
nums.append(7) # python
nums.append(7) # swift
 
# Slicing
nums = [1,1,3,5,8,13,21]
middle     = nums[2:4]       # python, middle = [3, 5]
var middle = nums[2..<4]     // swift, middle = [3,5]

Dictionaries

Dictionaries play important roles in both languages and are fundamental types.
# python
d = dict(name="Michael", state="OR")
d = { "name": "Michael", "state": "OR" }
the_name = d["name"]
 
// swift
var empty_dict = Dictionary<String, String>()
var d = ["name": "Michael", "state": "OR"]
var the_name = d["name"]
 
Adding items is the same in both languages. Removing entries is arguably clearer in Swift.
# add an item
d["hobby"] = "Biking" # python
d["hobby"] = "Biking" // swift
 
# remove an item
del d["hobby"]                # python
d.removeValueForKey("hobby")  // swift
 
Checking for the existence of a key can also be done in both languages.
# python
if "hobby" in d:
    print("Your hobby is " + d["hobby"])
 
// swift
if let theHobby = d["hobby"] {
     println("Your hobby is \(theHobby)")
}

Conditional Statements

Conditional statements are quite similar.
# python
n = 40
m = 2

if n > 40:
    print("n bigger than 40") 
elif m == 2 and n % 2 == 0:
    print("m is 2")
else:
    print("else")
 
# swift
var n = 40
var m = 2

if n > 40 {
    println("n bigger than 40") 
}
else if m == 2 && n % 2 == 0 {
    print("m is 2")
}
else {
    print("else")
}

Switch statements

Swift has them, Python does not.

Functions

Functions are very rich in both languages. They have closures, multiple return values, lambdas, and more. Here is a simple version. Note that this example also leverages tuples and tuple unpacking in both languages.

# python
def get_user(id):
    name = "username"
    email = "email"
    return name,email
 
n, e = get_user(1)
 
// swift
func getUser(id : Int) -> (String, String) {
     var username = "username"
     var email = "email"
     return (username, email)
}
 
var (n, e) = getUser(1) // n = username, e = email

沒有留言:

張貼留言