From 74f2ca885783f19ae8b777c7306dde5d342b7b4f Mon Sep 17 00:00:00 2001 From: Alex Browne Date: Sat, 27 Jul 2024 17:56:02 +0100 Subject: [PATCH] Add some teaching explanations --- .gitignore | 1 + .python-version | 1 + Zoom-Discussion.md | 8 ++++++++ example.py | 24 ++++++++++++++++++++++++ img.png | Bin 0 -> 23953 bytes webapp.py | 8 +++++++- 6 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .python-version create mode 100644 Zoom-Discussion.md create mode 100644 example.py create mode 100644 img.png diff --git a/.gitignore b/.gitignore index 71e3b6e..569d333 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea/ .bash_history .env .gitconfig diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..7dea1d1 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +pyenv local 3.10.0 \ No newline at end of file diff --git a/Zoom-Discussion.md b/Zoom-Discussion.md new file mode 100644 index 0000000..9c65b74 --- /dev/null +++ b/Zoom-Discussion.md @@ -0,0 +1,8 @@ +In python project you don't commit dependencies to the project +so typically this would be required: pip install -r requirements.txt + +# TODOs +1. Why does installing packages fail???? +2. Do we need a .python-version file or a pyproject.yaml?? +3. Consistent build process +4. Readme for actions container or fwd? diff --git a/example.py b/example.py new file mode 100644 index 0000000..abfbd9c --- /dev/null +++ b/example.py @@ -0,0 +1,24 @@ +# Strongly vs Dynamic Languages +# Python is STRONGLY typed DYNAMIC language + +# https://www.bairesdev.com/blog/static-vs-dynamic-typing/ + +# STATIC vs DYNAMIC +# For STATIC languages your IDE/build it will complain at COMPILE time if you're doing some +# kind of operand on incompatible types +# for DYNAMIC languages type checking is done at RUNTIME + +# STRONG vs WEAKLY type +# A programing language that is strongly typed can either by dynamic or static +# Weakly-typed languages make conversions between unrelated types implicitly; +# whereas, strongly-typed languages don’t allow implicit conversions between unrelated types. + +# JAVASCRIPT it is weakly typed and dynamic this will run without a single fucking error +# value = 21; +# value = value + "dot"; +# console.log(value); +# 21dot + +myName = "Lou " + 3 # We get a squiggle because we don't allow implicit type conversion + +print(myName) diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca610342abce35bcc7ffa632a5ddd014b431fab GIT binary patch literal 23953 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