Expert Python programming: become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7
Gespeichert in:
Hauptverfasser: | , |
---|---|
Format: | Buch |
Sprache: | English |
Veröffentlicht: |
Birmingham
Packt
April 2019
|
Ausgabe: | third edition |
Schlagworte: | |
Online-Zugang: | Inhaltsverzeichnis |
Beschreibung: | xi, 627 Seiten 24 cm |
ISBN: | 9781789808896 |
Internformat
MARC
LEADER | 00000nam a2200000 c 4500 | ||
---|---|---|---|
001 | BV045915124 | ||
003 | DE-604 | ||
005 | 20210909 | ||
007 | t | ||
008 | 190606s2019 |||| 00||| eng d | ||
020 | |a 9781789808896 |9 978-1-78980-889-6 | ||
035 | |a (OCoLC)1110069678 | ||
035 | |a (DE-599)OBVAC15361485 | ||
040 | |a DE-604 |b ger |e rda | ||
041 | 0 | |a eng | |
049 | |a DE-355 |a DE-11 | ||
084 | |a ST 250 |0 (DE-625)143626: |2 rvk | ||
100 | 1 | |a Jaworski, Michał |e Verfasser |0 (DE-588)1213060990 |4 aut | |
245 | 1 | 0 | |a Expert Python programming |b become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 |c Michał Jaworski, Tarek Ziadé |
250 | |a third edition | ||
264 | 1 | |a Birmingham |b Packt |c April 2019 | |
300 | |a xi, 627 Seiten |c 24 cm | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
650 | 0 | 7 | |a Python |g Programmiersprache |0 (DE-588)4434275-5 |2 gnd |9 rswk-swf |
689 | 0 | 0 | |a Python |g Programmiersprache |0 (DE-588)4434275-5 |D s |
689 | 0 | |8 1\p |5 DE-604 | |
700 | 1 | |a Ziadé, Tarek |e Verfasser |0 (DE-588)1193664381 |4 aut | |
776 | 0 | 8 | |i Erscheint auch als |n Online-Ausgabe |z 978-1-78980-677-9 |
856 | 4 | 2 | |m HEBIS Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=031297641&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
999 | |a oai:aleph.bib-bvb.de:BVB01-031297641 | ||
883 | 1 | |8 1\p |a cgwrk |d 20201028 |q DE-101 |u https://d-nb.info/provenance/plan#cgwrk |
Datensatz im Suchindex
_version_ | 1804180090440908800 |
---|---|
adam_text | Table of Contents
Preface______________________________________________________________i
Section 1: Before You Start________________________________________________
Chapter 1: Current Status of Python g
Technical requirements 10
Where are we now and where we are going to? 10
Why and how Python changes 11
Being up-to-date with changes by following PEP documents 11
Python 3 adoption at the time of writing this book 12
The main differences between Python 3 and Python 2 14
Why should I care? 14
The main syntax differences and common pitfalls 14
Syntax changes 15
Changes in the standard library 16
Changes in data types and collections and string literals 17
The popular tools and techniques used for maintaining cross-version
compatibility 17
Not only CPython 21
Why should I care? 21
Stackless Python 22
Jython 23
I ran Python 23
PyPy 24
MicroPython 25
Useful resources 26
Summary 27
Chapter 2: Modern Python Development Environments 29
Technical requirements 30
Installing additional Python packages using pip 30
Isolating the runtime environment 32
Application-level isolation versus system-level isolation 33
Python s venv 34
venv versus virtualenv 36
System-level environment isolation 37
Virtual development environments using Vagrant 39
Virtual environments using Docker 41
Containerization versus virtualization 41
Writing your first Dockerfile 42
Table of Contents
Running containers
Setting up complex environments
Useful Docker recipes for Python
Reducing the size of containers
Addressing services inside of a Compose environment
Communicating between multiple Compose environments
Popular productivity tools
Custom Python shells - ipython, bpython, ptpython, and so on
Setting up the PYTHONSTARTUP environment variable
IPython
bpython
ptpython
Incorporating shells in your own scripts and programs
Interactive debuggers
Summary
Section 2: Python Craftsmanship____________________________________
Chapter 3: Modern Syntax Elements - Below the Class Level
Technical requirements
Python s built-in types
Strings and bytes
Implementation details
String concatenation
Constant folding, the peephole optimizer, and the AST optimizer
String formatting with f-strings
Containers
Lists and tuples
Implementation details
List comprehensions
Other idioms
Dictionaries
Implementation details
Weaknesses and alternatives
Sets
Implementation details
Supplemental data types and containers
Specialized data containers from the collections module
Symbolic enumeration with the enum module
Advanced syntax
Iterators
Generators and yield statements
Decorators
General syntax and possible implementations
As a function
As a class
Parametrizing decorators
Introspection preserving decorators
Usage and useful examples
Argument checking
45
46
47
48
49
50
52
52
54
54
54
55
55
56
57
61
61
62
62
65
65
67
67
69
69
70
71
72
75
76
77
79
80
81
81
82
85
85
88
92
92
93
94
94
95
97
97
[ii]
Table of Contents
Caching gg
Proxy 102
Context provider 103
Context managers - the with statement 104
The general syntax and possible implementations 105
As a class 106
As a function - the contextlib module 108
Functional-style features of Python 109
What is functional programming? no
Lambda functions ill
map(), filter(), and reduce() 112
Partial objects and partial() functions 115
Generator expressions 116
Function and variable annotations 117
The general syntax 117
The possible uses 118
Static type checking with mypy 119
Other syntax elements you may not know of yet 120
The for else statement 120
Keyword-only arguments 121
Summary 123
Chapter 4: Modern Syntax Elements - Above the Class Level 125
Technical requirements 126
The protocols of the Python language - dunder methods and
attributes 126
Reducing boilerplate with data classes 128
Subclassing built-in types 131
MRO and accessing methods from superclasses 134
Old-style classes and super in Python 2 136
Understanding Python s Method Resolution Order 137
Super pitfalls 142
Mixing super and explicit class calls 142
Heterogeneous arguments 143
Best practices 145
Advanced attribute access patterns 145
Descriptors 146
Real-life example - lazily evaluated attributes 149
Properties 152
Slots 155
Summary 156
Chapter 5: Elements of Metaprogramming 157
Technical requirements 157
What is metaprogramming? 158
Decorators - a method of metaprogramming 158
Class decorators 159
----------------------------------- [iii] -------------------------------------
Table of Contents
Using new () for overriding the instance creation process
Metadiises
The general syntax
New Python 3 syntax for metaclasses
Metaclass usage
Metaclass pitfalls
Code generation
exec, eval, and compile
Abstract syntax tree (AST)
Import hooks
Projects that use code generation patterns
Falcon s compiled router
Hy
Summary
Chapter 6: Choosing Good Names
Technical requirements
PEP 8 and naming best practices
Why and when to follow PEP 8?
Beyond PEP 8 - Team-specific style guidelines
Naming styles
Variables
Constants
Naming and usage
Public and private variables
Functions and methods
The private controversy
Special methods
Arguments
Properties
Classes
Modules and packages
The naming guide
Using the has/is prefixes for Boolean elements
Using plurals for variables that are collections
Using explicit names for dictionaries
Avoid generic names and redundancy
Avoiding existing names
Best practices for arguments
Building arguments by iterative design
Trusting the arguments and your tests
Using *args and **kwargs magic arguments carefully
Class names
Module and package names
Useful tools
Pylint
pycodestyle and flake8
161
164
165
168
171
171
172
173
174
176
176
177
178
179
181
182
182
182
183
184
184
184
186
187
189
190
191
192
192
192
193
194
194
194
194
195
196
196
197
197
198
200
201
201
202
203
[iv]
Table of Contents
Summary 204
Chapter 7: Writing a Package 205
Technical requirements 206
Creating a package 206
The confusing state of Python packaging tools 207
The current landscape of Python packaging thanks to PyPA 207
Tool recommendations 208
Project configuration 209
setup py 209
setup, cfg 210
MANIFEST in 211
Most important metadata 212
Trove classifiers 212
Common patterns 214
Automated inclusion of version string from package 215
README file 217
Managing dependencies 218
The custom setup command 219
Working with packages during development 220
setup py install 220
Uninstalling packages 220
setup py develop or pip -e 221
Namespace packages 221
Why is it useful? 222
PEP 420 - implicit namespace packages 224
Namespace packages in previous Python versions 225
Uploading a package 226
PyPI - Python Package Index 226
Uploading to PyPI - or other package index 226
pypirc 228
Source packages versus built packages 229
sdist 229
bdist and wheels 230
Standalone executables 233
When standalone executables useful? 234
Popular tools 235
Pylnstaller 235
cx_Freeze 239
py2exe and py2app 241
Security of Python code in executable packages 242
Making decompilation harder 242
Summary 243
Chapter 8: Deploying the Code 245
Technical requirements 246
The Twelve-Factor App 246
Various approaches to deployment automation 248
----------------------------------- [v] ---------------------------------------
i icinn Fabric for deployment automation
Your own package index or index mirror
PvPI mirroring
Bundling additional resources with your Python package
Common conventions and practices
The filesystem hierarchy
Isolation
Using process supervision tools
Application code running in user space
Using reverse HTTP proxies
Reloading processes gracefully
Code instrumentation and monitoring
Logging errors - Sentry/Raven
Monitoring system and application metrics
Dealing with application logs
Basic low-level log practices
Tools for log processing
Summary
249
253
254
255
264
264
265
265
267
268
269
271
271
274
277
278
280
282
Chapter 9: Python Extensions in Other Languages
Technical requirements
Differentiating between the C and C++ languages
Loading extensions in C or C++
The need to use extensions
Improving the performance in critical code sections
Integrating existing code written in different languages
Integrating third-party dynamic libraries
Creating custom datatypes
Writing extensions
Pure C extensions
A closer look at Python/C API
Calling and binding conventions
Exception handling
Releasing GIL
Reference counting
Writing extensions with Cython
Cython as a source-to-source compiler
Cython as a language
Challenges with using extensions
Additional complexity
Debugging
Interfacing with dynamic libraries without extensions
The ctypes module
Loading libraries
Calling C functions using ctypes
Passing Python functions as C callbacks
283
284
285
285
287
288
289
290
290
290
292
295
300
302
304
306
308
309
311
314
314
315
316
316
316
318
320
- [vi]
Table of Contents
CFFI 323
Summary 325
Section 3: Quality over Quantity_____________________________
Chapter 10: Managing Code 329
Technical requirements 329
Working with a version control system 330
Centralized systems 330
Distributed systems 333
Distributed strategies 334
Centralized or distributed? 335
Use Git if you can 336
GitFlow and GitHub Flow 337
Setting up continuous development processes 341
Continuous integration 342
Testing every commit 343
Merge testing through Cl 344
Matrix testing 345
Continuous delivery 346
Continuous deployment 347
Popular tools for continuous integration 348
Jenkins 348
Buildbot 352
Travis Cl 355
GitLab Cl 357
Choosing the right tool and common pitfalls 357
Problem 1 - Complex build strategies 358
Problem 2 - Long building time 358
Problem 3 - External job definitions 359
Problem 4 - Lack of isolation 360
Summary 36i
Chapter 11: Documenting Your Project 363
Technical requirements 363
The seven rules of technical writing 364
Write in two steps 364
Target the readership 365
Use a simple style 366
Limit the scope of information 367
Use realistic code examples 367
Use a light but sufficient approach 368
Use templates 369
Documentation as code 369
Using Python docstrings 370
Popular markup languages and styles for documentation 372
Popular documentation generators for Python libraries 373
[ vii ]
Tahte of Contents _
SplWorKing with the index pages
Registering module helpers
Adding index markers
Cross-references
Docurnentat on building and continuous integration
Documenting web APIs
Documentation as API prototype with API Blueprint
Self-documenting APIs with Swagger/OpenAPI
Building a well-organized documentation system
Building documentation portfolio
Design
Usage
Recipe
Tutorial
Module helper
Operations
Your very own documentation portfolio
Building a documentation landscape
Producer s layout
Consumer s layout
Summary
373
376
376
377
377
378
378
379
379
381
382
382
383
384
385
387
387
388
389
390
390
391
392
Chapter 12: Test-Driven Development
Technical requirements
I don t test
Three simple steps of test-driven development
Preventing software regression
Improving code quality
Providing the best developer documentation
Producing robust code faster
What kind of tests?
Unit tests
Acceptance tests
Functional tests
Integration tests
Load and performance testing
Code quality testing
Python standard test tools
unittest
doctest
I do test
unittest pitfalls
unittest alternatives
nose
Test runner
Writing tests
Writing test fixtures
393
394
394
394
397
398
398
399
399
399
400
400
401
401
402
402
403
406
408
408
409
409
410
410
411
[ viii]
Table of Contents
Integration with setuptools and plugin system 411
Wrap-up 412
py test 412
Writing test fixtures 413
Disabling test functions and classes 415
Automated distributed tests 416
Wrap-up 417
Testing coverage 417
Fakes and mocks 420
Building a fake 420
Using mocks 425
Testing environment and dependency compatibility 427
Dependency matrix testing 427
Document-driven development 431
Writing a story 431
Summary 433
Section 4: Need for Speed______________________________________________________________
Chapter 13: Optimization - Principles and Profiling Techniques 437
Technical requirements 437
The three rules of optimization 438
Making it work first 438
Working from the user s point of view 440
Keeping the code readable and maintainable 440
Optimization strategy 441
Looking for another culprit 441
Scaling the hardware 442
Writing a speed test 443
Finding bottlenecks 444
Profiling CPU usage 444
Macro-profiling 445
Micro-profiling 449
Profiling memory usage 453
How Python deals with memory 454
Profiling memory 455
objgraph 457
C code memory leaks 464
Profiling network usage 466
Tracing network transactions 467
Summary 469
Chapter 14: Optimization - Some Powerful Techniques 471
Technical requirements 473
Defining complexity 473
Cyclomatic complexity 474
The big O notation 475
Reducing complexity by choosing proper data structures 478
------------------------------------ [ix] --------------------------------------
________________________________________________
Searching in a list
Using sets
Using collections
deque
defaultdict
namedtuple
Using architectural trade-offs
Using heuristics and approximation algorithms
Using task queues and delayed processing
Using probabilistic data structures
Caching
Deterministic caching
Non-deterministic caching
Cache services
Memcached
Summary
Chapter 15: Concurrency
Technical requirements
Why concurrency?
Multithreading
What is multithreading?
How Python deals with threads
When should we use threading?
Building responsive interfaces
Delegating work
Multiuser applications
An example of a threaded application
Using one thread per item
Using a thread pool
Using two-way queues
Dealing with errors and rate limiting
Multiprocessing
The built-in multiprocessing module
Using process pools
Using multiprocessing dummy as the multithreading interface
Asynchronous programming
Cooperative multitasking and asynchronous I/O
Python async and await keywords
asyncio in older versions of Python
A practical example of asynchronous programming
Integrating non-asynchronous code with async using futures
Executors and futures
Using executors in an event loop
Summary
478
479
480
480
482
483
485
485
486
490
491
492
495
496
498
500
501
502
502
504
504
505
507
507
507
508
509
512
513
516
518
523
525
529
531
532
532
534
538
539
541
543
544
545
[X]
Table of Contents
Section 5: Technical Architecture
Chapter 16: Event-Driven and Signal Programming 549
Technical requirements 550
What exactly is event-driven programming? 550
Event-driven != asynchronous 551
Event-driven programming in GUIs 552
Event-driven communication 554
Various styles of event-driven programming 556
Callback-based style 557
Subject-based style 558
Topic-based style 561
Event-driven architectures 563
Event and message queues 565
Summary 567
Chapter 17: Useful Design Patterns 569
Technical requirements 570
Creational patterns 570
Singleton 570
Structural patterns 573
Adapter 574
Interfaces 576
Using zope interface 577
Using function annotations and abstract base classes 581
Using collections abc 589
Proxy 590
Facade 591
Behavioral patterns 592
Observer 592
Visitor 595
Template 597
Summary 599
Appendix A: reStructuredText Primer________________________________________601
reStructuredText 601
Section structure 603
Lists 605
Inline markup 606
Literal block 607
Links 608
Other Books You May Enjoy__________________________________________________611
|
any_adam_object | 1 |
author | Jaworski, Michał Ziadé, Tarek |
author_GND | (DE-588)1213060990 (DE-588)1193664381 |
author_facet | Jaworski, Michał Ziadé, Tarek |
author_role | aut aut |
author_sort | Jaworski, Michał |
author_variant | m j mj t z tz |
building | Verbundindex |
bvnumber | BV045915124 |
classification_rvk | ST 250 |
ctrlnum | (OCoLC)1110069678 (DE-599)OBVAC15361485 |
discipline | Informatik |
edition | third edition |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>01564nam a2200361 c 4500</leader><controlfield tag="001">BV045915124</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20210909 </controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">190606s2019 |||| 00||| eng d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781789808896</subfield><subfield code="9">978-1-78980-889-6</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1110069678</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)OBVAC15361485</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rda</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-355</subfield><subfield code="a">DE-11</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 250</subfield><subfield code="0">(DE-625)143626:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Jaworski, Michał</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)1213060990</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Expert Python programming</subfield><subfield code="b">become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7</subfield><subfield code="c">Michał Jaworski, Tarek Ziadé</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">third edition</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Birmingham</subfield><subfield code="b">Packt</subfield><subfield code="c">April 2019</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">xi, 627 Seiten</subfield><subfield code="c">24 cm</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Python</subfield><subfield code="g">Programmiersprache</subfield><subfield code="0">(DE-588)4434275-5</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Python</subfield><subfield code="g">Programmiersprache</subfield><subfield code="0">(DE-588)4434275-5</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="8">1\p</subfield><subfield code="5">DE-604</subfield></datafield><datafield tag="700" ind1="1" ind2=" "><subfield code="a">Ziadé, Tarek</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)1193664381</subfield><subfield code="4">aut</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Online-Ausgabe</subfield><subfield code="z">978-1-78980-677-9</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">HEBIS Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=031297641&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="999" ind1=" " ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-031297641</subfield></datafield><datafield tag="883" ind1="1" ind2=" "><subfield code="8">1\p</subfield><subfield code="a">cgwrk</subfield><subfield code="d">20201028</subfield><subfield code="q">DE-101</subfield><subfield code="u">https://d-nb.info/provenance/plan#cgwrk</subfield></datafield></record></collection> |
id | DE-604.BV045915124 |
illustrated | Not Illustrated |
indexdate | 2024-07-10T08:30:14Z |
institution | BVB |
isbn | 9781789808896 |
language | English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-031297641 |
oclc_num | 1110069678 |
open_access_boolean | |
owner | DE-355 DE-BY-UBR DE-11 |
owner_facet | DE-355 DE-BY-UBR DE-11 |
physical | xi, 627 Seiten 24 cm |
publishDate | 2019 |
publishDateSearch | 2019 |
publishDateSort | 2019 |
publisher | Packt |
record_format | marc |
spelling | Jaworski, Michał Verfasser (DE-588)1213060990 aut Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 Michał Jaworski, Tarek Ziadé third edition Birmingham Packt April 2019 xi, 627 Seiten 24 cm txt rdacontent n rdamedia nc rdacarrier Python Programmiersprache (DE-588)4434275-5 gnd rswk-swf Python Programmiersprache (DE-588)4434275-5 s 1\p DE-604 Ziadé, Tarek Verfasser (DE-588)1193664381 aut Erscheint auch als Online-Ausgabe 978-1-78980-677-9 HEBIS Datenaustausch application/pdf http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=031297641&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA Inhaltsverzeichnis 1\p cgwrk 20201028 DE-101 https://d-nb.info/provenance/plan#cgwrk |
spellingShingle | Jaworski, Michał Ziadé, Tarek Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 Python Programmiersprache (DE-588)4434275-5 gnd |
subject_GND | (DE-588)4434275-5 |
title | Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 |
title_auth | Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 |
title_exact_search | Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 |
title_full | Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 Michał Jaworski, Tarek Ziadé |
title_fullStr | Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 Michał Jaworski, Tarek Ziadé |
title_full_unstemmed | Expert Python programming become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 Michał Jaworski, Tarek Ziadé |
title_short | Expert Python programming |
title_sort | expert python programming become a master in python by learning coding best practices and advanced programming concepts in python 3 7 |
title_sub | become a master in Python by learning coding best practices and advanced programming concepts in Python 3.7 |
topic | Python Programmiersprache (DE-588)4434275-5 gnd |
topic_facet | Python Programmiersprache |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=031297641&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT jaworskimichał expertpythonprogrammingbecomeamasterinpythonbylearningcodingbestpracticesandadvancedprogrammingconceptsinpython37 AT ziadetarek expertpythonprogrammingbecomeamasterinpythonbylearningcodingbestpracticesandadvancedprogrammingconceptsinpython37 |