python3 test.py
or python test.py
(could be using Python 2)
print("Running a Python code.")
chmod +x test.py
./test.py
#!/usr/bin/env python3 print("Executing a Python script.\n\"second line\"")
env
show environment variables env argument
running argument
#! ...
is a
shebang
int, double, boolean, ...
id(var)
: identification
number of content #!/usr/bin/env python3 # id: returns object identification print("***********") print("id checking") print("***********") x0 = 0 # an integer object is created x1 = 1 # idem print(id(x0), x0) print(id(x1), x1, id(x1)-id(x0), "(difference in bits)\n") print("*************") print("type checking") print("*************") print("x0, type :: ", x0, type(x0)) x0 = 'a' # changing type from integer to string print("x0, type :: ", x0, type(x0)) print() print("****************") print("strings as lists") print("****************") x0 = "I am a string" # strings are ordered lists x1 = " | " + x0[2] + x0[3] print(x0, x1)
#!/usr/bin/env python3 from math import sqrt print("Finding Triples a^2 + b^2 == c^2") # ouput - not formatted n = input("Maximum Number? ") # input prompt n = int(n)+1 # casting to int for a in range(1,n): # loop for b in range(a,n): ab_square = a**2 + b**2 c = int(sqrt(ab_square)) if (ab_square==c**2): # a^2 + b^2 == c^2 print(f'{a:3d} {b:3d} | {c:3d}') # formatted output
strings, lists, tuples
are ordered
[]
list comprehensions for compact notationrange(4) → '0,1,2,3'
on the fly;
one by one ('lazy') [0,1,2,3]
is stored ('greedy') ()
tuples are constant collections :=
on-the-fly declaration of a variable
(walrus assignment) #!/usr/bin/env python3 text = "elements of string" print() print(text, " | ", text[9]+text[10]) print() print("*********************") print("iterating over values") print("*********************") ABC = ["A", "B", "C"] # a list print(ABC) for strList in ABC: # iterating over values print(strList + "_" + strList) print() print("**********************") print("iterating over indices") print("**********************") for iList in range(n:=len(ABC)): # walrus assignment (of n) ABC[iList] = 'new_' + ABC[iList] print(ABC) print("length of ABC : ", n) print() print("**********************************") print("iterating over (index,value) pairs") print("**********************************") for index, value in enumerate(ABC): print("(", index, "|", value, ")") print() print("*************************") print("using list comprehensions") print("*************************") [print(strList) for strList in ABC] print() intList = [i for i in range(10)] print(intList) oddList = [value*value for value in intList if value%2==1] print(oddList) print() print("********************") print("tupeles come with ()") print("********************") # tuples are constant collections, viz unchangeable. fruitTuple = ("apple", "banana", "cherry") print(fruitTuple) # would be an erorr # fruitTuple[0] = "changing something constant"
[]
: list are ordered, allowing duplicates
{}
: sets are not ordered, no duplicates {}
: dictionaries are associative sets,
containing (key:value) pairs python3 -V
: version check
#!/usr/bin/env python3 # second apple not stored (automatic duplicate elimination) fruitSet = {"apple", "banana", "cherry", "apple"} print("*********************************") print("no ordering guranteed for sets {}") print("*********************************") print(fruitSet) for fruit in fruitSet: if 'y' in fruit: fruit += " (which I like)" print(fruit) print(fruitSet) print() print("**********************************") print("dictionaries are associative lists") print("**********************************") anticCarDict = { "brand": "Ford", "model": "Mustang", "year": 1964, "colors": ["red", "white", "blue"] } for key in anticCarDict: print(f'{key:7s} ::', anticCarDict[key])
append() | add element at the end |
clear() | remove all elements |
copy() | returns a copy |
count() | returns the number of elements with specified value |
extend() | add elements to the end |
index() | search for given value, returning the index of the first occurance |
insert() | adding element at specified position |
pop() | removes element at given inde |
remove() | removing item with specified value |
reverse() | reverses the order |
sort() | sorting |
id()
not changed when using list operations
#!/usr/bin/env python3 # [-1] : last entry myList = [i for i in range(10,17)] print(myList) print(len(myList), " | ", myList[-1]) myList.append("not any more a list of interges") print(myList) myList.insert(1, "first") print(myList) print() aList = [i for i in range(5)] bList = [i for i in range(5,8)] # myList = aList would make them the idential object myList = aList.copy() # copy entire list print("aList :: ", aList) print("bList :: ", bList) print("myList :: ", myList) print() myList.extend(bList) # extend list print("aList :: ", aList) print("bList :: ", bList) print("myList :: ", myList) myList.sort(reverse = True) # sorting print("myList :: ", myList) print()
return
defines return type
#!/usr/bin/env python3 # pass can be used also in for-loops def nothingToDo(): pass # default argument, call by value def flower(name='Iris'): print("my favorite flower is the ", name) name = "Orchid" # list of arguments of arbitrary length def allArgs(*args): for i in range(n:=len(args)): print(i, args[i]) return n # when using keys, the oder of calling does not matter def keyFlowers(f3, f2, f1): print(f1, f2, f3) print("*************") print("call by value") print("*************") nothingToDo() flower() flower() flower("Rose") print() myFlower = "Lily" flower(myFlower) print(myFlower) print() print("****************************") print("arbirary number of arguments") print("****************************") print("argsLength: ", allArgs("Daffodil", "Dahlia", "Daisy")) print() print("*******************") print("arguments with keys") print("*******************") # order does not matter with keys keyFlowers(f2="Lavender", f1="Aster", f3="Poppy")
id()
unique object identifier
copy.deepcopy()
new object copy.copy()
'shallow copy' #!/usr/bin/env python3 import copy # deep and schallow copy of objects def myFunc(inList): inList.append(3) inList.extend([7,1]) print("id/list in myFunc :", id(inList), inList) inList.remove(7) print("id/list in myFunc :", id(inList), inList) return def newFunc(inList): inList.append(3) inList.extend([7,1]) print("id/list in newFunc :", id(inList), inList) inList = [3, 4, 6] # a new id is asigned print("id/list in newFunc :", id(inList), inList) return def valueFunc(inList): # simulates call by value localList = copy.deepcopy(inList) # deep == recursively localList.extend([77,11]) print("id/list in valueFunc :", id(localList), localList) return print("******************************") print("id not changed within function") print("******************************") myList = [1, 2] print("id/list before calling:", id(myList), myList) myFunc(myList) print("id/list after calling :", id(myList), myList) print("**************************") print("id changed within function") print("**************************") myList = [1] # a new id is asigned print("id/list before calling:", id(myList), myList) newFunc(myList) print("id/list after calling:", id(myList), myList) print("***********************") print("simulated call by value") print("***********************") myList = [11] # a new id is asigned print("id/list before calling:", id(myList), myList) valueFunc(myList) print("id/list after calling:", id(myList), myList)
#!/usr/bin/env python3 # list argument with empty default # the default is however updated at every call def spammer(bag = []): bag.append("spam") return bag # default is None, viz list does not exists # None is an immutable object, the empty list [] not def noProblem(bag = None): if bag is None: # check if list exists bag = [] bag.append("no spam") return bag print("****************") print("using \"bag = []\"") print("****************") print(spammer()) print(spammer()) print(spammer()) myBag = spammer() myBag.clear() print(myBag) myBag = ["no"] print(myBag) spammer(myBag) print(myBag) spammer(myBag) print(myBag) print() print("******************") print("using \"bag = None\"") print("******************") print(noProblem()) print(noProblem()) print(noProblem())
"""...."""
for multiline docstrings
#!/usr/bin/env python3 globalInt = 111 # the first string in a function body is the docstring def hello(): "function hello(): " # the docstring globalInt = 22 # a local variable global helloInt # becomes global helloInt = 33 // 2 # integer dividion (floor) return hello.__doc__ print() print("*************") print("scope testing") print("*************") a = 0 for i in range(4): b = i a += i print(" in loop: ", a, b) print() print("after loop: ", a, b) print() print(" globalInt: ", globalInt ) # helloInt only created if hello called at least once # print(" helloInt: ", helloInt ) print() print("*********") print("docstring") print("*********") print(hello.__doc__ + "The docstring of the function hello ") print(hello())
x, y, z = 1, 2, 3
: process multiple objects
at once#!/usr/bin/env python3 def sum_recursion(n, k=0, result=0): "\sum_{k=0}^n k" if (k <= n): result = k + sum_recursion(n, k+1, result) # print(n, k, result) # for testing return result def fibonacci(n, k=1, kk=0): "sum of previous two numbers" print(n, k, kk) # for testing if (n > 0): n, k, kk = fibonacci(n-1, k+kk, k) return n, k, kk # return 3 variables print("*********") print("recursion") print("*********") N = 4 print(f"evaluate \"\sum_{{k=0}}^{N:d} k\" via recursion:", sum_recursion(N)) print() print("*******************") print("compact asignements") print("*******************") _, resFib, _ = fibonacci(nFib:=8) # with placehoders '_' (and Walrus) print(f'\nthe {nFib:d}-the Fibonacci number is: ', resFib)