Pipenv – Python Package Manager and Virtual environment manager
Venv – Virtual environment manager
Virtualenv – Virtual environment manager
Installing Python Runtime Versions via Pyenv
In order to test different Python Runtime versions, I have installed some versions.
$ pyenv install 3.10.2
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.10.2.tar.xz...
-> https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz
Installing Python-3.10.2...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.10.2 to /Users/kenanhancer/.pyenv/versions/3.10.2
I have 4 Python runtime versions(3.10.2, 3.10.3, 3.10.4, 3.10.5) in my machine.
$ pyenv versions
system
3.10.2
3.10.3
3.10.4
* 3.10.5 (set by /Users/kenanhancer/.pyenv/version)
Below two code blocks are doing same job and the only difference is below second code block uses variadic tuple. Check the below links for more details.
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
const sendRequest = (url: string, method: HttpMethod) => {
switch (method) {
case 'DELETE':
break;
case 'GET':
break;
case 'POST':
break;
case 'PUT':
break;
default:
const exhaustiveCheck: never = method; // ✅ no error
throw new Error(`Unhandled case: ${exhaustiveCheck}`);
}
};
type Fruit = 'banana' | 'orange' | 'mango';
function exhaustiveCheck(param: never): never {
throw new Error('should not reach here')
}
function makeDessert(fruit: Fruit) {
switch (fruit) {
case 'banana': return 'Banana Shake'
case 'orange': return 'Orange Juice'
}
exhaustiveCheck(fruit) // 🚫 ERROR! `mango` is not assignable
}
Exhaustiveness checking is a good feature when you use switch block. Assume that you need to check a value of variable which data type is union type as shown below screenshot.
Shape is a discriminatedunion which consists of three types named Circle, Square and Triangle.
kind field is shared in Circle, Square and Triangle types so that if developer forgets to use any of kind field value in switch block, TypeScript will error in coding-time.
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let big: bigint = 100n;
String
let color: string = "blue";
let fullName: string = 'Bob Bobbington';
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.
I'll be ${age + 1} years old next month.`;
Arrays
let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];