#!/usr/bin/env python3
import argparse
def main() -> None:
# Instantiate the parser
parser = argparse.ArgumentParser(description='Optional app description')
# Required positional argument
parser.add_argument('pos_arg', type=int,
help='A required integer positional argument')
# Optional positional argument
parser.add_argument('opt_pos_arg', type=int, nargs='?', default=2,
help='An optional integer positional argument')
# Optional argument
parser.add_argument('--opt_arg', type=int,
help='An optional integer argument')
# Switch
parser.add_argument('--switch', action='store_true',
help='A boolean switch')
args = parser.parse_args()
print("Argument values:")
print(args.pos_arg)
print(args.opt_pos_arg)
print(args.opt_arg)
print(args.switch)
if args.pos_arg > 10:
parser.error("pos_arg cannot be larger than 10")
if __name__ == '__main__':
main()
Source: stackoverflow.com
__ they are private, otherwise they are public.
#!/usr/bin/env python3
class Student():
# private static variables
__student_count = 0
def __init__(self, surname, firstname):
# private class variables
self.__surname = surname
self.__firstname = firstname
self.__student_count = self.__student_count + 1
def name(self):
return self.__firstname + " " + self.__surname
# converts object to string
def __str__(self):
return "Student(" + self.name() + ")"
# similar to __str__()
def __repr__(self):
return self.__str__()
# called by len(obj) method
def __len__(self):
return 192
import sys, traceback
def do_something():
raise IndexError("Index %d not allowed" % -12)
try:
do_something()
except FileNotFoundError as fnfe:
# will print "Error: [Errno 2] No such file or directory: 'myfile.txt'"
print("Error: {}".format(fnfe))
except (RuntimeError, TypeError, NameError):
# will forward the exception to the caller
raise
except Exception as e:
print(f"Caught unexpected exception: {e}")
print("-" * 60)
# prints the stacktrace, the exception type and message (works also for logger)
print(traceback.format_exc())
print("-" * 60)
else:
print("No exception was thrown!")
finally:
close_something()
#!/usr/bin/env python3
#
# Example to create classes to be used with 'async with.."
#
import asyncio
class MyConnection:
# Static constructor method
def connect(name):
return MyConnection.__AsyncContextManager(name)
class __AsyncContextManager:
def __init__(self, name):
self.__name = name;
async def print_name(self):
print("my name is %s" % self.__name);
# Method to be performed on enter - e.g. for connect
async def __aenter__(self):
print('%s: entering context' % self.__name)
return self
# Method to be performed on exit - e.g. to disconnect
async def __aexit__(self, exc_type, exc, tb):
print('%s: exit context' % self.__name)
async def doit():
name = "kkr"
async with MyConnection.connect(name) as obj:
await obj.print_name()
if __name__ == '__main__':
# Need eventloop to perform asynchronous methods
asyncio.get_event_loop().run_until_complete(doit())
import NAME when the file was NAME.py) or folders, which contain python files - mainly classes (then the import syntax changes to from MODULE import NAME, where MODULE is the folder name and the file was NAME.py).
Modules in folders must have at least an empty file __init__.py, which can have the following content:
# To allow 'from MODULE import *', where MODULE is the directory name and the file is called NAME.py __all__ = ["NAME"] # To allow 'import MODULE' from . import NAME
super().
#!/usr/bin/env python3 class Person(): def __init__(self): self.surname = "" self.firstname = "" class Student(Person): def __init__(self): super().__init__() self.semester = 1
import matplotlib.pyplot matplotlib.pyplot.plot(...)When importing a class
matplotlib.pyplot, the whole module and class name must be used every time.
from matplotlib import pyplot pyplot.plot(...)When importing a class
pyplot from module matplotlib, the class name must be unique in your code - but the class can be referenced by its name.
from matplotlib import pyplot as plt plt.plot(...)When importing a class
pyplot from module matplotlib and name it plt, the class can be reference by the name plt.
#!/usr/bin/env python3
import asyncio
# sudo apt install python3-websockets
import websockets
async def hello():
uri = "ws://echo.websocket.org/"
async with websockets.connect(uri) as wsock:
await wsock.send("huhu")
result = await wsock.recv()
print("result is " + result)
asyncio.get_event_loop().run_until_complete(hello())
import json
received = '{"category":"welcome", "values":{"name":"KKR"}}'
json_recv = json.loads(received)
for key in json_recv["values"]:
print(key + "=>" + json_recv["values"][key])
list = { "speed": 12, "position":"Ingolstadt" }
json_list = json.dumps(list)
print(json_list)
The same example with loading and saving to disk:
with open('settings.json') as json_file:
settings = json.load(json_file)
settings['last_changed'] = datetime.strftime("%Y-%m-%d %H:%M:%S")
with open('settings.json', 'w') as outfile:
json.dump(settings, outfile)
graph.png:
#!/usr/bin/env python3
# sudo apt install python3-matplotlib
import matplotlib.pyplot as plt
xs = [x for x in range(-10,10)]
ys = [x*x for x in xs]
plt.plot(xs, ys)
plt.savefig("graph.png")
The following code will plot a histogram into the file histogram.png:
#!/usr/bin/env python3
# sudo apt install python3-matplotlib
import matplotlib.pyplot as plt
data = {-10:1, -9:2, -8:4, -7:12, -6:11, -5:3, -4:0.1, -3:-2, -2:-4, -1:-5,
0:-4, 1:-3, 2:-2, 3:-1, 4:0.2, 5:2, 6:4, 7:6, 8:12, 9:15, 10:25}
plt.title("Example Histogram")
plt.xlabel("Temperature")
plt.ylabel("Hits")
plt.grid(True)
plt.bar(data.keys(), data.values())
plt.savefig("histogram.png")
The following code will plot a logarithmic histogram into the file histogram.png:
#!/usr/bin/env python3
# sudo apt install python3-matplotlib
import matplotlib.pyplot as plt
data = {-10:1, -9:2, -8:4, -7:12, -6:11, -5:3, -4:0.1, -3:-2, -2:-4, -1:-5,
0:-4, 1:-3, 2:-2, 3:-1, 4:0.2, 5:2, 6:4, 7:6, 8:12, 9:15, 10:25}
plt.title("Logarithmic Histogram")
plt.yscale("log")
plt.grid(b=True, which="major", linestyle="-")
plt.grid(b=True, which="minor", linestyle="--")
plt.bar(data.keys(), data.values())
plt.savefig("histogram_log.png")