@@ -252,7 +252,7 @@ On peut le voir si on utilise des parenthèses: | |||||
>>> generator | >>> generator | ||||
<generator object <genexpr> at 0x7f654c272138> | <generator object <genexpr> at 0x7f654c272138> | ||||
>>> list(generator) | >>> list(generator) | ||||
[1, 2, 3] | |||||
[0, 1, 2] | |||||
``` | ``` | ||||
Les générateurs sont "feignants": ils ne calculent leur valeurs que quand | Les générateurs sont "feignants": ils ne calculent leur valeurs que quand | ||||
@@ -263,7 +263,7 @@ c'est demandé | |||||
```python | ```python | ||||
>>> generator = (x for x in range(0, 3)) | >>> generator = (x for x in range(0, 3)) | ||||
>>> list(generator) | >>> list(generator) | ||||
[1, 2, 3] | |||||
[0, 1, 2] | |||||
>>> list(generator) | >>> list(generator) | ||||
[] | [] | ||||
``` | ``` | ||||
@@ -0,0 +1,42 @@ | |||||
import sys | |||||
import os | |||||
def parse_args(args): | |||||
options = Options() | |||||
if "-l" in args: | |||||
options.show_modification_time= True | |||||
return options | |||||
class Options: | |||||
def __init__(self): | |||||
self.show_modification_time = False | |||||
class Entry: | |||||
def __init__(self,name): | |||||
self.name=name | |||||
self.is_directory=False | |||||
self.mtime=0 | |||||
def get_entries(): | |||||
names = os.listdir(".") | |||||
for name in names: | |||||
entry = Entry(name) | |||||
entry.mtime = os.stat(name).st_mtime | |||||
yield entry | |||||
def list_entries(entries,options): | |||||
for entry in entries: | |||||
if options.show_modification_time : | |||||
yield f"{entry.name} {entry.mtime}" | |||||
else: | |||||
yield entry.name | |||||
def main(): | |||||
options=parse_args(sys.argv) | |||||
entries = get_entries() | |||||
lines = list_entries(entries,options) | |||||
for line in lines: | |||||
print(line) | |||||
if __name__=="__main__": | |||||
main() |
@@ -0,0 +1,31 @@ | |||||
import lister | |||||
def test_parse_args_empty_list(): | |||||
options = lister.parse_args([]) | |||||
assert options.show_modification_time is False | |||||
def test_parse_args_dash_l(): | |||||
options = lister.parse_args(["-l"]) | |||||
assert options.show_modification_time is True | |||||
def test_list_empty_entries(): | |||||
options = lister.Options() | |||||
assert list(lister.list_entries([], options)) == [] | |||||
def get_listing(entries, show_modification_time=False): | |||||
options = lister.Options() | |||||
options.show_modification_time = show_modification_time | |||||
return list(lister.list_entries(entries, options)) | |||||
def test_list_names(): | |||||
foo_txt = lister.Entry("foo.txt") | |||||
entries = [foo_txt] | |||||
assert get_listing(entries, show_modification_time=False) == ["foo.txt"] | |||||
def test_list_mtimes(): | |||||
foo_txt = lister.Entry("foo.txt") | |||||
foo_txt.mtime = 1559404640 | |||||
entries = [foo_txt] | |||||
assert get_listing(entries, show_modification_time=True)== ["foo.txt 1559404640"] |