Skip to content

Commit 79e1415

Browse files
authored
Merge branch 'master' into langchain
2 parents eb5bb46 + ea367f3 commit 79e1415

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+642
-0
lines changed

duck-typing-python/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Duck Typing in Python: Writing Flexible and Decoupled Code
2+
3+
This folder provides the code examples for the Real Python tutorial [Duck Typing in Python: Writing Flexible and Decoupled Code](https://realpython.com/duck-typing-python/).

duck-typing-python/birds_v1.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Duck:
2+
def swim(self):
3+
print("The duck is swimming")
4+
5+
def fly(self):
6+
print("The duck is flying")
7+
8+
9+
class Swan:
10+
def swim(self):
11+
print("The swan is swimming")
12+
13+
def fly(self):
14+
print("The swan is flying")
15+
16+
17+
class Albatross:
18+
def swim(self):
19+
print("The albatross is swimming")
20+
21+
def fly(self):
22+
print("The albatross is flying")

duck-typing-python/birds_v2.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Duck:
2+
def fly(self):
3+
print("The duck is flying")
4+
5+
def swim(self):
6+
print("The duck is swimming")
7+
8+
9+
class Pigeon:
10+
def fly(self):
11+
print("The pigeon is flying")

duck-typing-python/file.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
name,age,job
2+
John,25,Engineer
3+
Jane,22,Designer

duck-typing-python/file.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"name": "John",
4+
"age": 25,
5+
"job": "Engineer"
6+
},
7+
{
8+
"name": "Jane",
9+
"age": 22,
10+
"job": "Designer"
11+
}
12+
]

duck-typing-python/file.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
John
2+
25
3+
Engineer
4+
Jane
5+
22
6+
Designer

duck-typing-python/iteration.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
numbers = [1, 2, 3]
2+
person = ("Jane", 25, "Python Dev")
3+
letters = "abc"
4+
ordinals = {"one": "first", "two": "second", "three": "third"}
5+
even_digits = {2, 4, 6, 8}
6+
collections = [numbers, person, letters, ordinals, even_digits]
7+
8+
for collection in collections:
9+
for value in collection:
10+
print(value)

duck-typing-python/mean.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from collections.abc import Collection
2+
3+
4+
def mean(grades: Collection) -> float:
5+
return sum(grades) / len(grades)

duck-typing-python/queues.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from collections import deque
2+
3+
4+
class Queue:
5+
def __init__(self):
6+
self._elements = deque()
7+
8+
def enqueue(self, element):
9+
self._elements.append(element)
10+
11+
def dequeue(self):
12+
return self._elements.popleft()
13+
14+
def __iter__(self):
15+
return iter(self._elements)
16+
17+
def __len__(self):
18+
return len(self._elements)
19+
20+
def __reversed__(self):
21+
return reversed(self._elements)
22+
23+
def __contains__(self, element):
24+
return element in self._elements

duck-typing-python/readers.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import csv
2+
import json
3+
from itertools import batched # Python >= 3.12
4+
5+
6+
class TextReader:
7+
def __init__(self, filename):
8+
self.filename = filename
9+
10+
def read(self):
11+
with open(self.filename, encoding="utf-8") as file:
12+
return [
13+
{
14+
"name": batch[0].strip(),
15+
"age": batch[1].strip(),
16+
"job": batch[2].strip(),
17+
}
18+
for batch in batched(file.readlines(), 3)
19+
]
20+
21+
22+
class CSVReader:
23+
def __init__(self, filename):
24+
self.filename = filename
25+
26+
def read(self):
27+
with open(self.filename, encoding="utf-8", newline="") as file:
28+
return list(csv.DictReader(file))
29+
30+
31+
class JSONReader:
32+
def __init__(self, filename):
33+
self.filename = filename
34+
35+
def read(self):
36+
with open(self.filename, encoding="utf-8") as file:
37+
return json.load(file)

0 commit comments

Comments
 (0)