Fluent Python: clear, concise and effective programming
Gespeichert in:
1. Verfasser: | |
---|---|
Format: | Buch |
Sprache: | English |
Veröffentlicht: |
Beijing ; Boston ; Farnham ; Sebastopol ; Tokyo
O'Reilly
[2022]
|
Ausgabe: | Second edition |
Schlagworte: | |
Online-Zugang: | Inhaltsverzeichnis Klappentext |
Beschreibung: | Weitere Angaben auf dem Cover: Covers Python 3.10 |
Beschreibung: | xxviii, 983 Seiten Illustrationen, Diagramme |
ISBN: | 9781492056355 1492056359 |
Internformat
MARC
LEADER | 00000nam a2200000 c 4500 | ||
---|---|---|---|
001 | BV048390402 | ||
003 | DE-604 | ||
005 | 20221121 | ||
007 | t| | ||
008 | 220803s2022 xx a||| |||| 00||| eng d | ||
020 | |a 9781492056355 |c pbk. : ca. EUR 69.35 , $ 69.99 (USA), $ 87.99 (CAN) |9 978-1-492-05635-5 | ||
020 | |a 1492056359 |9 1-4920-5635-9 | ||
035 | |a (OCoLC)1330201809 | ||
035 | |a (DE-599)HBZHT021365757 | ||
040 | |a DE-604 |b ger |e rda | ||
041 | 0 | |a eng | |
049 | |a DE-739 |a DE-573 |a DE-860 |a DE-384 |a DE-Aug4 |a DE-29T |a DE-355 |a DE-11 |a DE-1102 |a DE-703 |a DE-898 |a DE-4325 | ||
082 | 0 | |a 005.133 |2 23 | |
084 | |a ST 250 |0 (DE-625)143626: |2 rvk | ||
084 | |a WC 7700 |0 (DE-625)148144: |2 rvk | ||
100 | 1 | |a Ramalho, Luciano |e Verfasser |0 (DE-588)1077177372 |4 aut | |
245 | 1 | 0 | |a Fluent Python |b clear, concise and effective programming |c Luciano Ramalho |
250 | |a Second edition | ||
264 | 1 | |a Beijing ; Boston ; Farnham ; Sebastopol ; Tokyo |b O'Reilly |c [2022] | |
264 | 4 | |c © 2022 | |
300 | |a xxviii, 983 Seiten |b Illustrationen, Diagramme | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
500 | |a Weitere Angaben auf dem Cover: Covers Python 3.10 | ||
650 | 4 | |a Python (Computer program language) | |
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 | |5 DE-604 | |
856 | 4 | 2 | |m Digitalisierung UB Passau - ADAM Catalogue Enrichment |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=033769131&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
856 | 4 | 2 | |m Digitalisierung UB Augsburg - ADAM Catalogue Enrichment |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=033769131&sequence=000003&line_number=0002&func_code=DB_RECORDS&service_type=MEDIA |3 Klappentext |
943 | 1 | |a oai:aleph.bib-bvb.de:BVB01-033769131 |
Datensatz im Suchindex
_version_ | 1824928739776004096 |
---|---|
adam_text |
Table of Contents Preface. xix Part I. Data Structures 1. The Python Data Model. What’s New in This Chapter A Pythonic Card Deck How Special Methods Are Used Emulating Numeric Types String Representation Boolean Value of a Custom Type Collection API Overview of Special Methods Why len Is Not a Method Chapter Summary Further Reading 2. An Array of Sequences. What’s New in This Chapter Overview of Built-In Sequences List Comprehensions and Generator Expressions List Comprehensions and Readability Listcomps Versus map and filter Cartesian Products Generator Expressions Tuples Are Not Just Immutable Lists Tuples as Records 3 4 5 8 9 12 13 14 15 17 18 18 21 22 22 25 25 27 27 29 30 30 v
Tuples as Immutable Lists Comparing Tuple and List Methods Unpacking Sequences and Iterables Using * to Grab Excess Items Unpacking with * in Function Calls and Sequence Literals Nested Unpacking Pattern Matching with Sequences Pattern Matching Sequences in an Interpreter Slicing Why Slices and Ranges Exclude the Last Item Slice Objects Multidimensional Slicing and Ellipsis Assigning to Slices Using + and * with Sequences Building Listsof Lists Augmented Assignment with Sequences A += Assignment Puzzler list.sort Versus the sorted Built-In When a List Is Not the Answer Arrays Memory Views NumPy Deques and Other Queues Chapter Summary Further Reading 32 34 35 36 37 37 39 43 47 47 48 49 50 50 51 53 54 56 59 59 62 64 67 70 71 3. Didionaries and Sets. Ո What’s New in This Chapter Modern diet Syntax diet Comprehensions Unpacking Mappings Merging Mappings with | Pattern Matching with Mappings Standard API of Mapping Types What Is Hashable Overview of Common Mapping Methods Inserting or Updating Mutable Values Automatic Handling of Missing Keys defaultdict: Another Take on Missing Keys The_ missing_ Method Inconsistent Usage of_ missing_ in the Standard Library Variations of diet vi I Table of Contents 78 78 79 80 80 81 83 84 85 87 90 90 91 94 95
collections.OrderedDict collections.ChainMap collections.Counter shelve.Shelf Subclassing UserDict Instead of diet Immutable Mappings Dictionary Views Practical Consequences of How diet Works Set Theory Set Literals Set Comprehensions Practical Consequences of How Sets Work Set Operations Set Operations on diet Views Chapter Summary Further Reading 95 95 96 97 97 99 101 102 103 105 106 107 107 110 112 113 4. Unicode Text Versus Bytes. 117 What’s New in This Chapter Character Issues Byte Essentials Basic Encoders/Decoders Understanding Encode/Decode Problems Coping with UnicodeEncodeError Coping with UnicodeDecodeError SyntaxError When Loading Modules with Unexpected Encoding How to Discover the Encoding of a Byte Sequence BOM: A Useful Gremlin Handling Text Files Beware of Encoding Defaults Normalizing Unicode for Reliable Comparisons Case Folding Utility Functions for Normalized Text Matching Extreme “Normalization”: Taking Out Diacritics Sorting Unicode Text Sorting with the Unicode Collation Algorithm The Unicode Database Finding Characters by Name Numeric Meaning of Characters Dual-Mode str and bytes APIs str Versus bytes in Regular Expressions str Versus bytes in os Functions Table of Contents 118 118 120 123 125 125 126 128 128 129 131 134 140 142 143 144 148 150 151 151 153 155 155 157 | vii
Chapter Summary Further Reading 5. Data Class Builders. What’s New in This Chapter Overview of Data Class Builders Main Features Classic Named Tuples Typed Named Tuples Type Hints 101 No Runtime Effect Variable Annotation Syntax TheMeaningofVariable Annotations More About @dataclass Field Options Post-init Processing Typed Class Attributes Initialization Variables That Are Not Fields @dataclass Example: Dublin Core Resource Record Data Class as a Code Smell Data Class as Scaffolding Data Class as Intermediate Representation Pattern Matching Class Instances Simple Class Patterns Keyword Class Patterns Positional Class Patterns Chapter Summary Further Reading 157 158 163 164 164 167 169 172 173 173 174 175 179 180 183 185 186 187 190 191 191 192 192 193 194 195 196 6. Object References, Mutability, and Recycling. 201 What’s New in This Chapter Variables Are Not Boxes Identity, Equality, and Aliases Choosing Between == and is The Relative Immutability of Tuples Copies Are Shallow by Default Deep and Shallow Copies of Arbitrary Objects Function Parameters as References Mutable Types as Parameter Defaults: Bad Idea Defensive Programming with Mutable Parameters del and Garbage Collection Tricks Python Plays with Immutables viii I Table of Contents 202 202 204 206 207 208 211 213 214 216 219 221
Chapter Summary Further Reading Part II. 223 224 Fundions as Objeds 7. Fundions as First-Class Objects. . 231 232 232 234 235 236 237 239 240 242 243 243 247 249 250 What’s New in This Chapter Treating a Function Like an Object Higher-Order Functions Modern Replacements for map, filter, and reduce Anonymous Functions The Nine Flavors of Callable Objects User-Defined Callable Types From Positional to Keyword-Only Parameters Positional-Only Parameters Packages for Functional Programming The operator Module Freezing Arguments with functools.partial Chapter Summary Further Reading 8. Type Hints in Fundions. . 253 254 254 255 256 257 258 260 261 266 266 269 270 271 274 277 278 280 282 287 What’s New in This Chapter About Gradual Typing Gradual Typing in Practice Starting with Муру Making Муру More Strict A Default Parameter Value Using None as a Default Types Are Defined by Supported Operations Types Usable in Annotations The Any Type Simple Types and Classes Optional and Union Types Generic Collections Tuple Types Generic Mappings Abstract Base Classes Iterable Parameterized Generics and TypeVar Static Protocols Table of Contents | ix
Callable NoReturn Annotating Positional Only and Variadic Parameters Imperfect Typing and Strong Testing Chapter Summary Further Reading 292 295 295 296 298 299 9. Decorators and Closures. 305 What’s New in This Chapter Decorators 101 When Python Executes Decorators Registration Decorators Variable Scope Rules Closures The nonlocal Declaration Variable Lookup Logic Implementing a Simple Decorator How It Works Decorators in the Standard Library Memoization with functools.cache Using lru_cache Single Dispatch Generic Functions Parameterized Decorators A Parameterized Registration Decorator The Parameterized Clock Decorator A Class-Based Clock Decorator Chapter Summary Further Reading 306 306 308 310 310 313 317 318 319 320 322 322 325 326 331 331 334 337 338 338 10. Design Patterns with First-Class Fundions. 343 What’s New in This Chapter Case Study: Refactoring Strategy Classic Strategy Function-Oriented Strategy Choosing the Best Strategy: Simple Approach Finding Strategies in a Module Decorator-Enhanced Strategy Pattern The Command Pattern Chapter Summary Further Reading x I Table of Contents 344 344 344 349 352 353 355 357 359 360
Partili. Classes and Protocols 11. A Pythonic Object. 365 What’s New in This Chapter Object Representations Vector Class Redux An Alternative Constructor classmethod Versus staticmethod Formatted Displays A Hashable Vector2d Supporting Positional Pattern Matching Complete Listing of Vector2d, Version 3 Private and “Protected” Attributes in Python Saving Memory with_slots_ Simple Measure of_ slot_ Savings Summarizing the Issues with_ slots_ Overriding Class Attributes Chapter Summary Further Reading 366 366 367 370 371 372 376 379 380 384 386 389 390 391 393 394 12. Special Methods for Sequences. 399 What’s New in This Chapter Vector: A User-Defined Sequence Type Vector Take # 1 : Vector2d Compatible Protocols and Duck Typing Vector Take #2: A Sliceable Sequence How Slicing Works A Slice-Aware_ getitem_ Vector Take #3: Dynamic Attribute Access Vector Take #4: Hashing and a Faster == Vector Take #5: Formatting Chapter Summary Further Reading 400 400 401 404 405 406 408 409 413 420 427 428 13. Interfaces, Protocols, and ABCs. 433 The Typing Map What’s New in This Chapter Two Kinds of Protocols Programming Ducks Python Digs Sequences Monkey Patching: Implementing a Protocol at Runtime Defensive Programming and “Fail Fast” 434 435 436 438 438 440 442 Table of Contents ļ xi
Goose Typing Subclassing an ABC ABCs in the Standard Library Defining and Using an ABC ABC Syntax Details Subclassing an ABC A Virtual Subclass of an ABC Usage of register in Practice Structural Typing with ABCs Static Protocols The Typed double Function Runtime Checkable Static Protocols Limitations of Runtime Protocol Checks Supporting a Static Protocol Designing a Static Protocol Best Practices for Protocol Design Extending a Protocol The numbers ABCs and Numeric Protocols Chapter Summary Further Reading 444 449 451 453 459 460 462 465 466 468 468 470 473 474 476 478 479 480 483 484 14. Inheritance: For Better or for Worse. 489 What’s New in This Chapter The super() Function Subclassing Built-In Types Is Tricky Multiple Inheritance and Method Resolution Order Mixin Classes Case-Insensitive Mappings Multiple Inheritance in the Real World ABCs Are Mixins Too ThreadingMixIn and ForkingMixIn Django Generic Views Mixins Multiple Inheritance in Tkinter Coping with Inheritance Favor Object Composition over Class Inheritance Understand Why Inheritance Is Used in Each Case Make Interfaces Explicit with ABCs Use Explicit Mixins for Code Reuse Provide Aggregate Classes to Users Subclass Only Classes Designed for Subclassing Avoid Subclassing from Concrete Classes Tkinter: The Good, the Bad, and the Ugly xii I Table of Contents 490 490 492 496 502 502 504 504 505 506 509 512 512 512 513 513 513 514 515 515
516 517 Chapter Summary Further Reading 15. More About Type Hints. . 523 What’s New in This Chapter Overloaded Signatures Max Overload Takeaways from Overloading max TypedDict Type Casting Reading Type Hints at Runtime Problems with Annotations at Runtime Dealing with the Problem Implementing a Generic Class Basic Jargon for Generic Types Variance An Invariant Dispenser A Covariant Dispenser A Contravariant Trash Can Variance Review Implementing a Generic Static Protocol Chapter Summary Further Reading 523 524 525 529 530 538 541 542 544 545 548 548 549 550 551 553 556 558 559 16. Operator Overloading. 565 What’s New in This Chapter Operator Overloading 101 Unary Operators Overloading + for Vector Addition Overloading * for Scalar Multiplication Using @ as an Infix Operator Wrapping-Up Arithmetic Operators Rich Comparison Operators Augmented Assignment Operators Chapter Summary Further Reading Part IV. 566 566 567 570 576 578 580 581 584 589 591 Control Flow 17. Iterators, Generators, and Classic Coroutines. 597 What’s New in This Chapter 598 Table of Contents | xiii
A Sequence of Words Why Sequences Are Iterable: The iter Function Using iter with a Callable Iterables Versus Iterators Sentence Classes with_ iter_ Sentence Take #2: A Classic Iterator Don’t Make the Iterable an Iterator for Itself Sentence Take #3 : A Generator Function How a Generator Works Lazy Sentences Sentence Take #4: Lazy Generator Sentence Take #5: Lazy Generator Expression When to U se Generator Expressions An Arithmetic Progression Generator Arithmetic Progression with itertools Generator Functions in the Standard Library Iterable Reducing Functions Subgenerators with yield from Reinventing chain Traversing a Tree Generic Iterable Types Classic Coroutines Example: Coroutine to Compute a Running Average Returning a Value from a Coroutine Generic Type Hints for Classic Coroutines Chapter Summary Further Reading 598 600 602 603 607 607 609 610 611 614 614 616 617 619 622 623 634 636 637 638 643 645 647 650 654 656 656 18. with, match, and else Blocks. 661 What’s New in This Chapter Context Managers and with Blocks The contextlib Utilities Using @contextmanager Pattern Matching in lis.py: A Case Study Scheme Syntax Imports and Types The Parser The Environment The REPL The Evaluator Procedure: A Class Implementing a Closure Using OR-patterns xiv I Table of Contents 662 662 667 668 673 673 675 675 677 679 680 689 690
Do This, Then That: else Blocks Beyond if Chapter Summary Further Reading 691 693 694 19. Concurrency Models in Python. 699 What’s New in This Chapter The Big Picture A Bit of Jargon Processes, Threads, and Python’s Infamous GIL A Concurrent Hello World Spinner with Threads Spinner with Processes Spinner with Coroutines Supervisors Side-by-Side The Real Impact of the GIL Quick Quiz A Homegrown Process Pool Process-Based Solution Understanding the Elapsed Times Code for the Multicore Prime Checker Experimenting with More or Fewer Processes Thread-Based Nonsolution Python in the Multicore World System Administration Data Science Server-Side Web/Mobile Development WSGI Application Servers Distributed Task Queues Chapter Summary Further Reading Concurrency with Threads and Processes The GIL Concurrency Beyond the Standard Library Concurrency and Scalability Beyond Python 700 700 701 703 705 705 708 710 715 717 717 720 722 722 723 727 728 729 730 731 732 734 736 737 738 738 740 740 742 20. Concurrent Executors. 747 What’s New in This Chapter Concurrent Web Downloads A Sequential Download Script Downloading with concurrent.futures Where Are the Futures? Launching Processes with concurrent.futures 747 748 750 753 755 758 Table of Contents | xv
Multicore Prime Checker Redux Experimenting with Executor.map Downloads with Progress Display and Error Handling Error Handling in the flags2 Examples Using futures.as_completed Chapter Summary Further Reading 759 762 766 770 773 776 776 21. Asynchronous Programming. 779 What’s New in This Chapter A Few Definitions An asyncio Example: Probing Domains Guido’s Trick to Read Asynchronous Code New Concept: Awaitable Downloading with asyncio and HTTPX The Secret of Native Coroutines: Humble Generators The All-or-Nothing Problem Asynchronous Context Managers Enhancing the asyncio Downloader Using asyncio.as_completed and a Thread Throttling Requests with a Semaphore Making Multiple Requests for Each Download Delegating Tasks to Executors Writing asyncio Servers A FastAPI Web Service An asyncio TCP Server Asynchronous Iteration and Asynchronous Iterables Asynchronous Generator Functions Async Comprehensions and Async Generator Expressions async Beyond asyncio: Curio Type Hinting Asynchronous Objects How Async Works and How It Doesn’t Running Circles Around Blocking Calls The Myth of I/O-Bound Systems Avoiding CPU-Bound Traps Chapter Summary Further Reading xvi I Table of Contents 780 781 782 784 785 786 789 790 790 792 793 795 799 801 803 805 808 815 816 822 825 828 829 829 830 830 831 832
Part V. Metaprogramming 22. Dynamic Attributes and Properties. 839 What’s New in This Chapter Data Wrangling with Dynamic Attributes Exploring JSON-Like Data with Dynamic Attributes The Invalid Attribute Name Problem Flexible Object Creation with_ new_ Computed Properties Step 1: Data-Driven Attribute Creation Step 2: Property to Retrieve a Linked Record Step 3: Property Overriding an Existing Attribute Step 4: Bespoke Property Cache Step 5: Caching Properties with functools Using a Property for Attribute Validation Lineitem Take #1: Class for an Item in an Order Lineitem Take #2: A Validating Property A Proper Look at Properties Properties Override Instance Attributes Property Documentation Coding a Property Factory Handling Attribute Deletion Essential Attributes and Functions for Attribute Handling Special Attributes that Affect Attribute Handling Built-In Functions for Attribute Handling Special Methods for Attribute Handling Chapter Summary Further Reading 840 840 842 846 847 849 850 852 856 857 859 861 861 862 864 865 868 869 872 873 874 874 875 877 878 23. Attribute Descriptors. 883 What’s New in This Chapter Descriptor Example: Attribute Validation Lineitem Take #3: A Simple Descriptor Lineitem Take #4: Automatic Naming of Storage Attributes Lineitem Take #5: A New Descriptor Type Overriding Versus Nonoverriding Descriptors Overriding Descriptors Overriding Descriptor Without_ get_ Nonoverriding Descriptor Overwriting a Descriptor in the
Class Methods Are Descriptors Descriptor Usage Tips Table of Contents 884 884 884 891 893 896 898 899 900 901 902 904 | xvii
Descriptor Docstring and Overriding Deletion Chapter Summary Further Reading 24. Class Metaprogramming. What’s New in This Chapter Classes as Objects type: The Built-In Class Factory A Class Factory Function Introducing_ init_subclass_ Why_ init_subclass_ Cannot Configure_ slots_ Enhancing Classes with a Class Decorator What Happens When: Import Time Versus Runtime Evaluation Time Experiments Metaclasses 101 How a Metaclass Customizes a Class A Nice Metaclass Example Metaclass Evaluation Time Experiment A Metaclass Solution for Checked Metaclasses in the Real World Modern Features Simplify or Replace Metaclasses Metaclasses Are Stable Language Features A Class Can Only Have One Metaclass Metaclasses Should Be Implementation Details A Metaclass Hack with_ prepare_ Wrapping Up Chapter Summary Further Reading 906 907 908 911 912 912 913 915 918 925 926 929 930 935 937 938 941 946 951 951 952 952 953 954 956 957 958 Afterword. 963 Index. 967 xviii I Table of Contents
O'REILLY Fluent Python Don't waste time bending Python to fit patterns you've learned in other languages. Python's simplicity lets you become productive quickly, but often this means you aren't using everything the language has to offer. With the updated edition of this hands-on guide, you'll learn how to write effective, modern Python 3 code by leveraging its best ideas. Discover and apply idiomatic Python 3 features beyond your past experience. Author Luciano Ramalho guides you through Python’s core language features and libraries and teaches you how to make your code shorter, faster, and more readable. Complete with major updates throughout, this new edition features five parts that work as five short books within the book: • Data structures: Sequences, diets, sets, Unicode, and data classes • Functions as objects: First-class functions, related design patterns, and type hints in function declarations • Object-oriented idioms: Composition, inheritance, mixins, interfaces, operator overloading, protocols, and more static types • Control flow: Context managers, generators, coroutines, async/await, and thread/process pools • Metaprogramming: Properties, attribute descriptors, class decorators, and new class metaprogramming hooks that replace or simplify metaclasses Luciano Ramalho is a principal consultant at Thoughtworks and a Python Software Foundation fellow. "My 'go to' book when looking for detailed explanations and uses of a Python feature. Luciano's teaching and presentation are excellent. A great book for advanced beginners looking to build their knowledge." —Carol
Willing Python Steering Council member (2020-2021) "This is not the usual dry coding book, but full of useful, tested examples, and just enough humor. My colleaguesand I have used this amazing, well-written book to take our Python coding to the next level." -Maria McKinley Senior Software Engineer |
adam_txt |
Table of Contents Preface. xix Part I. Data Structures 1. The Python Data Model. What’s New in This Chapter A Pythonic Card Deck How Special Methods Are Used Emulating Numeric Types String Representation Boolean Value of a Custom Type Collection API Overview of Special Methods Why len Is Not a Method Chapter Summary Further Reading 2. An Array of Sequences. What’s New in This Chapter Overview of Built-In Sequences List Comprehensions and Generator Expressions List Comprehensions and Readability Listcomps Versus map and filter Cartesian Products Generator Expressions Tuples Are Not Just Immutable Lists Tuples as Records 3 4 5 8 9 12 13 14 15 17 18 18 21 22 22 25 25 27 27 29 30 30 v
Tuples as Immutable Lists Comparing Tuple and List Methods Unpacking Sequences and Iterables Using * to Grab Excess Items Unpacking with * in Function Calls and Sequence Literals Nested Unpacking Pattern Matching with Sequences Pattern Matching Sequences in an Interpreter Slicing Why Slices and Ranges Exclude the Last Item Slice Objects Multidimensional Slicing and Ellipsis Assigning to Slices Using + and * with Sequences Building Listsof Lists Augmented Assignment with Sequences A += Assignment Puzzler list.sort Versus the sorted Built-In When a List Is Not the Answer Arrays Memory Views NumPy Deques and Other Queues Chapter Summary Further Reading 32 34 35 36 37 37 39 43 47 47 48 49 50 50 51 53 54 56 59 59 62 64 67 70 71 3. Didionaries and Sets. Ո What’s New in This Chapter Modern diet Syntax diet Comprehensions Unpacking Mappings Merging Mappings with | Pattern Matching with Mappings Standard API of Mapping Types What Is Hashable Overview of Common Mapping Methods Inserting or Updating Mutable Values Automatic Handling of Missing Keys defaultdict: Another Take on Missing Keys The_ missing_ Method Inconsistent Usage of_ missing_ in the Standard Library Variations of diet vi I Table of Contents 78 78 79 80 80 81 83 84 85 87 90 90 91 94 95
collections.OrderedDict collections.ChainMap collections.Counter shelve.Shelf Subclassing UserDict Instead of diet Immutable Mappings Dictionary Views Practical Consequences of How diet Works Set Theory Set Literals Set Comprehensions Practical Consequences of How Sets Work Set Operations Set Operations on diet Views Chapter Summary Further Reading 95 95 96 97 97 99 101 102 103 105 106 107 107 110 112 113 4. Unicode Text Versus Bytes. 117 What’s New in This Chapter Character Issues Byte Essentials Basic Encoders/Decoders Understanding Encode/Decode Problems Coping with UnicodeEncodeError Coping with UnicodeDecodeError SyntaxError When Loading Modules with Unexpected Encoding How to Discover the Encoding of a Byte Sequence BOM: A Useful Gremlin Handling Text Files Beware of Encoding Defaults Normalizing Unicode for Reliable Comparisons Case Folding Utility Functions for Normalized Text Matching Extreme “Normalization”: Taking Out Diacritics Sorting Unicode Text Sorting with the Unicode Collation Algorithm The Unicode Database Finding Characters by Name Numeric Meaning of Characters Dual-Mode str and bytes APIs str Versus bytes in Regular Expressions str Versus bytes in os Functions Table of Contents 118 118 120 123 125 125 126 128 128 129 131 134 140 142 143 144 148 150 151 151 153 155 155 157 | vii
Chapter Summary Further Reading 5. Data Class Builders. What’s New in This Chapter Overview of Data Class Builders Main Features Classic Named Tuples Typed Named Tuples Type Hints 101 No Runtime Effect Variable Annotation Syntax TheMeaningofVariable Annotations More About @dataclass Field Options Post-init Processing Typed Class Attributes Initialization Variables That Are Not Fields @dataclass Example: Dublin Core Resource Record Data Class as a Code Smell Data Class as Scaffolding Data Class as Intermediate Representation Pattern Matching Class Instances Simple Class Patterns Keyword Class Patterns Positional Class Patterns Chapter Summary Further Reading 157 158 163 164 164 167 169 172 173 173 174 175 179 180 183 185 186 187 190 191 191 192 192 193 194 195 196 6. Object References, Mutability, and Recycling. 201 What’s New in This Chapter Variables Are Not Boxes Identity, Equality, and Aliases Choosing Between == and is The Relative Immutability of Tuples Copies Are Shallow by Default Deep and Shallow Copies of Arbitrary Objects Function Parameters as References Mutable Types as Parameter Defaults: Bad Idea Defensive Programming with Mutable Parameters del and Garbage Collection Tricks Python Plays with Immutables viii I Table of Contents 202 202 204 206 207 208 211 213 214 216 219 221
Chapter Summary Further Reading Part II. 223 224 Fundions as Objeds 7. Fundions as First-Class Objects. . 231 232 232 234 235 236 237 239 240 242 243 243 247 249 250 What’s New in This Chapter Treating a Function Like an Object Higher-Order Functions Modern Replacements for map, filter, and reduce Anonymous Functions The Nine Flavors of Callable Objects User-Defined Callable Types From Positional to Keyword-Only Parameters Positional-Only Parameters Packages for Functional Programming The operator Module Freezing Arguments with functools.partial Chapter Summary Further Reading 8. Type Hints in Fundions. . 253 254 254 255 256 257 258 260 261 266 266 269 270 271 274 277 278 280 282 287 What’s New in This Chapter About Gradual Typing Gradual Typing in Practice Starting with Муру Making Муру More Strict A Default Parameter Value Using None as a Default Types Are Defined by Supported Operations Types Usable in Annotations The Any Type Simple Types and Classes Optional and Union Types Generic Collections Tuple Types Generic Mappings Abstract Base Classes Iterable Parameterized Generics and TypeVar Static Protocols Table of Contents | ix
Callable NoReturn Annotating Positional Only and Variadic Parameters Imperfect Typing and Strong Testing Chapter Summary Further Reading 292 295 295 296 298 299 9. Decorators and Closures. 305 What’s New in This Chapter Decorators 101 When Python Executes Decorators Registration Decorators Variable Scope Rules Closures The nonlocal Declaration Variable Lookup Logic Implementing a Simple Decorator How It Works Decorators in the Standard Library Memoization with functools.cache Using lru_cache Single Dispatch Generic Functions Parameterized Decorators A Parameterized Registration Decorator The Parameterized Clock Decorator A Class-Based Clock Decorator Chapter Summary Further Reading 306 306 308 310 310 313 317 318 319 320 322 322 325 326 331 331 334 337 338 338 10. Design Patterns with First-Class Fundions. 343 What’s New in This Chapter Case Study: Refactoring Strategy Classic Strategy Function-Oriented Strategy Choosing the Best Strategy: Simple Approach Finding Strategies in a Module Decorator-Enhanced Strategy Pattern The Command Pattern Chapter Summary Further Reading x I Table of Contents 344 344 344 349 352 353 355 357 359 360
Partili. Classes and Protocols 11. A Pythonic Object. 365 What’s New in This Chapter Object Representations Vector Class Redux An Alternative Constructor classmethod Versus staticmethod Formatted Displays A Hashable Vector2d Supporting Positional Pattern Matching Complete Listing of Vector2d, Version 3 Private and “Protected” Attributes in Python Saving Memory with_slots_ Simple Measure of_ slot_ Savings Summarizing the Issues with_ slots_ Overriding Class Attributes Chapter Summary Further Reading 366 366 367 370 371 372 376 379 380 384 386 389 390 391 393 394 12. Special Methods for Sequences. 399 What’s New in This Chapter Vector: A User-Defined Sequence Type Vector Take # 1 : Vector2d Compatible Protocols and Duck Typing Vector Take #2: A Sliceable Sequence How Slicing Works A Slice-Aware_ getitem_ Vector Take #3: Dynamic Attribute Access Vector Take #4: Hashing and a Faster == Vector Take #5: Formatting Chapter Summary Further Reading 400 400 401 404 405 406 408 409 413 420 427 428 13. Interfaces, Protocols, and ABCs. 433 The Typing Map What’s New in This Chapter Two Kinds of Protocols Programming Ducks Python Digs Sequences Monkey Patching: Implementing a Protocol at Runtime Defensive Programming and “Fail Fast” 434 435 436 438 438 440 442 Table of Contents ļ xi
Goose Typing Subclassing an ABC ABCs in the Standard Library Defining and Using an ABC ABC Syntax Details Subclassing an ABC A Virtual Subclass of an ABC Usage of register in Practice Structural Typing with ABCs Static Protocols The Typed double Function Runtime Checkable Static Protocols Limitations of Runtime Protocol Checks Supporting a Static Protocol Designing a Static Protocol Best Practices for Protocol Design Extending a Protocol The numbers ABCs and Numeric Protocols Chapter Summary Further Reading 444 449 451 453 459 460 462 465 466 468 468 470 473 474 476 478 479 480 483 484 14. Inheritance: For Better or for Worse. 489 What’s New in This Chapter The super() Function Subclassing Built-In Types Is Tricky Multiple Inheritance and Method Resolution Order Mixin Classes Case-Insensitive Mappings Multiple Inheritance in the Real World ABCs Are Mixins Too ThreadingMixIn and ForkingMixIn Django Generic Views Mixins Multiple Inheritance in Tkinter Coping with Inheritance Favor Object Composition over Class Inheritance Understand Why Inheritance Is Used in Each Case Make Interfaces Explicit with ABCs Use Explicit Mixins for Code Reuse Provide Aggregate Classes to Users Subclass Only Classes Designed for Subclassing Avoid Subclassing from Concrete Classes Tkinter: The Good, the Bad, and the Ugly xii I Table of Contents 490 490 492 496 502 502 504 504 505 506 509 512 512 512 513 513 513 514 515 515
516 517 Chapter Summary Further Reading 15. More About Type Hints. . 523 What’s New in This Chapter Overloaded Signatures Max Overload Takeaways from Overloading max TypedDict Type Casting Reading Type Hints at Runtime Problems with Annotations at Runtime Dealing with the Problem Implementing a Generic Class Basic Jargon for Generic Types Variance An Invariant Dispenser A Covariant Dispenser A Contravariant Trash Can Variance Review Implementing a Generic Static Protocol Chapter Summary Further Reading 523 524 525 529 530 538 541 542 544 545 548 548 549 550 551 553 556 558 559 16. Operator Overloading. 565 What’s New in This Chapter Operator Overloading 101 Unary Operators Overloading + for Vector Addition Overloading * for Scalar Multiplication Using @ as an Infix Operator Wrapping-Up Arithmetic Operators Rich Comparison Operators Augmented Assignment Operators Chapter Summary Further Reading Part IV. 566 566 567 570 576 578 580 581 584 589 591 Control Flow 17. Iterators, Generators, and Classic Coroutines. 597 What’s New in This Chapter 598 Table of Contents | xiii
A Sequence of Words Why Sequences Are Iterable: The iter Function Using iter with a Callable Iterables Versus Iterators Sentence Classes with_ iter_ Sentence Take #2: A Classic Iterator Don’t Make the Iterable an Iterator for Itself Sentence Take #3 : A Generator Function How a Generator Works Lazy Sentences Sentence Take #4: Lazy Generator Sentence Take #5: Lazy Generator Expression When to U se Generator Expressions An Arithmetic Progression Generator Arithmetic Progression with itertools Generator Functions in the Standard Library Iterable Reducing Functions Subgenerators with yield from Reinventing chain Traversing a Tree Generic Iterable Types Classic Coroutines Example: Coroutine to Compute a Running Average Returning a Value from a Coroutine Generic Type Hints for Classic Coroutines Chapter Summary Further Reading 598 600 602 603 607 607 609 610 611 614 614 616 617 619 622 623 634 636 637 638 643 645 647 650 654 656 656 18. with, match, and else Blocks. 661 What’s New in This Chapter Context Managers and with Blocks The contextlib Utilities Using @contextmanager Pattern Matching in lis.py: A Case Study Scheme Syntax Imports and Types The Parser The Environment The REPL The Evaluator Procedure: A Class Implementing a Closure Using OR-patterns xiv I Table of Contents 662 662 667 668 673 673 675 675 677 679 680 689 690
Do This, Then That: else Blocks Beyond if Chapter Summary Further Reading 691 693 694 19. Concurrency Models in Python. 699 What’s New in This Chapter The Big Picture A Bit of Jargon Processes, Threads, and Python’s Infamous GIL A Concurrent Hello World Spinner with Threads Spinner with Processes Spinner with Coroutines Supervisors Side-by-Side The Real Impact of the GIL Quick Quiz A Homegrown Process Pool Process-Based Solution Understanding the Elapsed Times Code for the Multicore Prime Checker Experimenting with More or Fewer Processes Thread-Based Nonsolution Python in the Multicore World System Administration Data Science Server-Side Web/Mobile Development WSGI Application Servers Distributed Task Queues Chapter Summary Further Reading Concurrency with Threads and Processes The GIL Concurrency Beyond the Standard Library Concurrency and Scalability Beyond Python 700 700 701 703 705 705 708 710 715 717 717 720 722 722 723 727 728 729 730 731 732 734 736 737 738 738 740 740 742 20. Concurrent Executors. 747 What’s New in This Chapter Concurrent Web Downloads A Sequential Download Script Downloading with concurrent.futures Where Are the Futures? Launching Processes with concurrent.futures 747 748 750 753 755 758 Table of Contents | xv
Multicore Prime Checker Redux Experimenting with Executor.map Downloads with Progress Display and Error Handling Error Handling in the flags2 Examples Using futures.as_completed Chapter Summary Further Reading 759 762 766 770 773 776 776 21. Asynchronous Programming. 779 What’s New in This Chapter A Few Definitions An asyncio Example: Probing Domains Guido’s Trick to Read Asynchronous Code New Concept: Awaitable Downloading with asyncio and HTTPX The Secret of Native Coroutines: Humble Generators The All-or-Nothing Problem Asynchronous Context Managers Enhancing the asyncio Downloader Using asyncio.as_completed and a Thread Throttling Requests with a Semaphore Making Multiple Requests for Each Download Delegating Tasks to Executors Writing asyncio Servers A FastAPI Web Service An asyncio TCP Server Asynchronous Iteration and Asynchronous Iterables Asynchronous Generator Functions Async Comprehensions and Async Generator Expressions async Beyond asyncio: Curio Type Hinting Asynchronous Objects How Async Works and How It Doesn’t Running Circles Around Blocking Calls The Myth of I/O-Bound Systems Avoiding CPU-Bound Traps Chapter Summary Further Reading xvi I Table of Contents 780 781 782 784 785 786 789 790 790 792 793 795 799 801 803 805 808 815 816 822 825 828 829 829 830 830 831 832
Part V. Metaprogramming 22. Dynamic Attributes and Properties. 839 What’s New in This Chapter Data Wrangling with Dynamic Attributes Exploring JSON-Like Data with Dynamic Attributes The Invalid Attribute Name Problem Flexible Object Creation with_ new_ Computed Properties Step 1: Data-Driven Attribute Creation Step 2: Property to Retrieve a Linked Record Step 3: Property Overriding an Existing Attribute Step 4: Bespoke Property Cache Step 5: Caching Properties with functools Using a Property for Attribute Validation Lineitem Take #1: Class for an Item in an Order Lineitem Take #2: A Validating Property A Proper Look at Properties Properties Override Instance Attributes Property Documentation Coding a Property Factory Handling Attribute Deletion Essential Attributes and Functions for Attribute Handling Special Attributes that Affect Attribute Handling Built-In Functions for Attribute Handling Special Methods for Attribute Handling Chapter Summary Further Reading 840 840 842 846 847 849 850 852 856 857 859 861 861 862 864 865 868 869 872 873 874 874 875 877 878 23. Attribute Descriptors. 883 What’s New in This Chapter Descriptor Example: Attribute Validation Lineitem Take #3: A Simple Descriptor Lineitem Take #4: Automatic Naming of Storage Attributes Lineitem Take #5: A New Descriptor Type Overriding Versus Nonoverriding Descriptors Overriding Descriptors Overriding Descriptor Without_ get_ Nonoverriding Descriptor Overwriting a Descriptor in the
Class Methods Are Descriptors Descriptor Usage Tips Table of Contents 884 884 884 891 893 896 898 899 900 901 902 904 | xvii
Descriptor Docstring and Overriding Deletion Chapter Summary Further Reading 24. Class Metaprogramming. What’s New in This Chapter Classes as Objects type: The Built-In Class Factory A Class Factory Function Introducing_ init_subclass_ Why_ init_subclass_ Cannot Configure_ slots_ Enhancing Classes with a Class Decorator What Happens When: Import Time Versus Runtime Evaluation Time Experiments Metaclasses 101 How a Metaclass Customizes a Class A Nice Metaclass Example Metaclass Evaluation Time Experiment A Metaclass Solution for Checked Metaclasses in the Real World Modern Features Simplify or Replace Metaclasses Metaclasses Are Stable Language Features A Class Can Only Have One Metaclass Metaclasses Should Be Implementation Details A Metaclass Hack with_ prepare_ Wrapping Up Chapter Summary Further Reading 906 907 908 911 912 912 913 915 918 925 926 929 930 935 937 938 941 946 951 951 952 952 953 954 956 957 958 Afterword. 963 Index. 967 xviii I Table of Contents
O'REILLY Fluent Python Don't waste time bending Python to fit patterns you've learned in other languages. Python's simplicity lets you become productive quickly, but often this means you aren't using everything the language has to offer. With the updated edition of this hands-on guide, you'll learn how to write effective, modern Python 3 code by leveraging its best ideas. Discover and apply idiomatic Python 3 features beyond your past experience. Author Luciano Ramalho guides you through Python’s core language features and libraries and teaches you how to make your code shorter, faster, and more readable. Complete with major updates throughout, this new edition features five parts that work as five short books within the book: • Data structures: Sequences, diets, sets, Unicode, and data classes • Functions as objects: First-class functions, related design patterns, and type hints in function declarations • Object-oriented idioms: Composition, inheritance, mixins, interfaces, operator overloading, protocols, and more static types • Control flow: Context managers, generators, coroutines, async/await, and thread/process pools • Metaprogramming: Properties, attribute descriptors, class decorators, and new class metaprogramming hooks that replace or simplify metaclasses Luciano Ramalho is a principal consultant at Thoughtworks and a Python Software Foundation fellow. "My 'go to' book when looking for detailed explanations and uses of a Python feature. Luciano's teaching and presentation are excellent. A great book for advanced beginners looking to build their knowledge." —Carol
Willing Python Steering Council member (2020-2021) "This is not the usual dry coding book, but full of useful, tested examples, and just enough humor. My colleaguesand I have used this amazing, well-written book to take our Python coding to the next level." -Maria McKinley Senior Software Engineer |
any_adam_object | 1 |
any_adam_object_boolean | 1 |
author | Ramalho, Luciano |
author_GND | (DE-588)1077177372 |
author_facet | Ramalho, Luciano |
author_role | aut |
author_sort | Ramalho, Luciano |
author_variant | l r lr |
building | Verbundindex |
bvnumber | BV048390402 |
classification_rvk | ST 250 WC 7700 |
ctrlnum | (OCoLC)1330201809 (DE-599)HBZHT021365757 |
dewey-full | 005.133 |
dewey-hundreds | 000 - Computer science, information, general works |
dewey-ones | 005 - Computer programming, programs, data, security |
dewey-raw | 005.133 |
dewey-search | 005.133 |
dewey-sort | 15.133 |
dewey-tens | 000 - Computer science, information, general works |
discipline | Biologie Informatik |
discipline_str_mv | Biologie Informatik |
edition | Second edition |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>00000nam a2200000 c 4500</leader><controlfield tag="001">BV048390402</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20221121</controlfield><controlfield tag="007">t|</controlfield><controlfield tag="008">220803s2022 xx a||| |||| 00||| eng d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781492056355</subfield><subfield code="c">pbk. : ca. EUR 69.35 , $ 69.99 (USA), $ 87.99 (CAN)</subfield><subfield code="9">978-1-492-05635-5</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">1492056359</subfield><subfield code="9">1-4920-5635-9</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1330201809</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)HBZHT021365757</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-739</subfield><subfield code="a">DE-573</subfield><subfield code="a">DE-860</subfield><subfield code="a">DE-384</subfield><subfield code="a">DE-Aug4</subfield><subfield code="a">DE-29T</subfield><subfield code="a">DE-355</subfield><subfield code="a">DE-11</subfield><subfield code="a">DE-1102</subfield><subfield code="a">DE-703</subfield><subfield code="a">DE-898</subfield><subfield code="a">DE-4325</subfield></datafield><datafield tag="082" ind1="0" ind2=" "><subfield code="a">005.133</subfield><subfield code="2">23</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="084" ind1=" " ind2=" "><subfield code="a">WC 7700</subfield><subfield code="0">(DE-625)148144:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Ramalho, Luciano</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)1077177372</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Fluent Python</subfield><subfield code="b">clear, concise and effective programming</subfield><subfield code="c">Luciano Ramalho</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">Second edition</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Beijing ; Boston ; Farnham ; Sebastopol ; Tokyo</subfield><subfield code="b">O'Reilly</subfield><subfield code="c">[2022]</subfield></datafield><datafield tag="264" ind1=" " ind2="4"><subfield code="c">© 2022</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">xxviii, 983 Seiten</subfield><subfield code="b">Illustrationen, Diagramme</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="500" ind1=" " ind2=" "><subfield code="a">Weitere Angaben auf dem Cover: Covers Python 3.10</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Python (Computer program language)</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="5">DE-604</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">Digitalisierung UB Passau - ADAM Catalogue Enrichment</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=033769131&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">Digitalisierung UB Augsburg - ADAM Catalogue Enrichment</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=033769131&sequence=000003&line_number=0002&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Klappentext</subfield></datafield><datafield tag="943" ind1="1" ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-033769131</subfield></datafield></record></collection> |
id | DE-604.BV048390402 |
illustrated | Illustrated |
index_date | 2024-07-03T20:20:48Z |
indexdate | 2025-02-24T09:01:06Z |
institution | BVB |
isbn | 9781492056355 1492056359 |
language | English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-033769131 |
oclc_num | 1330201809 |
open_access_boolean | |
owner | DE-739 DE-573 DE-860 DE-384 DE-Aug4 DE-29T DE-355 DE-BY-UBR DE-11 DE-1102 DE-703 DE-898 DE-BY-UBR DE-4325 |
owner_facet | DE-739 DE-573 DE-860 DE-384 DE-Aug4 DE-29T DE-355 DE-BY-UBR DE-11 DE-1102 DE-703 DE-898 DE-BY-UBR DE-4325 |
physical | xxviii, 983 Seiten Illustrationen, Diagramme |
publishDate | 2022 |
publishDateSearch | 2022 |
publishDateSort | 2022 |
publisher | O'Reilly |
record_format | marc |
spelling | Ramalho, Luciano Verfasser (DE-588)1077177372 aut Fluent Python clear, concise and effective programming Luciano Ramalho Second edition Beijing ; Boston ; Farnham ; Sebastopol ; Tokyo O'Reilly [2022] © 2022 xxviii, 983 Seiten Illustrationen, Diagramme txt rdacontent n rdamedia nc rdacarrier Weitere Angaben auf dem Cover: Covers Python 3.10 Python (Computer program language) Python Programmiersprache (DE-588)4434275-5 gnd rswk-swf Python Programmiersprache (DE-588)4434275-5 s DE-604 Digitalisierung UB Passau - ADAM Catalogue Enrichment application/pdf http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=033769131&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA Inhaltsverzeichnis Digitalisierung UB Augsburg - ADAM Catalogue Enrichment application/pdf http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=033769131&sequence=000003&line_number=0002&func_code=DB_RECORDS&service_type=MEDIA Klappentext |
spellingShingle | Ramalho, Luciano Fluent Python clear, concise and effective programming Python (Computer program language) Python Programmiersprache (DE-588)4434275-5 gnd |
subject_GND | (DE-588)4434275-5 |
title | Fluent Python clear, concise and effective programming |
title_auth | Fluent Python clear, concise and effective programming |
title_exact_search | Fluent Python clear, concise and effective programming |
title_exact_search_txtP | Fluent Python clear, concise and effective programming |
title_full | Fluent Python clear, concise and effective programming Luciano Ramalho |
title_fullStr | Fluent Python clear, concise and effective programming Luciano Ramalho |
title_full_unstemmed | Fluent Python clear, concise and effective programming Luciano Ramalho |
title_short | Fluent Python |
title_sort | fluent python clear concise and effective programming |
title_sub | clear, concise and effective programming |
topic | Python (Computer program language) Python Programmiersprache (DE-588)4434275-5 gnd |
topic_facet | Python (Computer program language) Python Programmiersprache |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=033769131&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=033769131&sequence=000003&line_number=0002&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT ramalholuciano fluentpythonclearconciseandeffectiveprogramming |