Cart

Better Python Code without Common Pitfalls, 1st edition

BRAND: PEARSON

Publisher:Addison-Wesley Professional
Author: David Mertz
Edition: (November 2, 2023) © 2024
eBook ISBN:9780138320935
Print ISBN: 9780138320942
Type: 1 Year Subscription. Dành cho Cá nhân  

eBook edition. 1 year Subscription. Dành cho Cá nhân  |  Trường ĐH, Nhóm, Thư Viện: Gọi 0915920514 để báo giá Pearson, Vital Source eBook hoặc mua Sách In  

Số lượng:
Tổng tiền:
Giá có thể thay đổi bất kỳ khi nào.
Thời hạn giao hàng: 03 ngày làm việc với sách eBook và 30 ngày với sách In. Gọi để được Tư vấn Giáo Trình.

Mô tả sản phẩm


Python là một trong những ngôn ngữ lập trình được sử dụng rộng rãi nhất trên thế giới. Nó được sử dụng ở mọi nơi, từ giáo dục tiểu học đến phát triển web hàng ngày cho đến các viện nghiên cứu khoa học tiên tiến nhất trên thế giới. Tuy nhiên, giống như tất cả các ngôn ngữ lập trình, Python có một bộ sưu tập các cách hoàn thành nhiệm vụ "Pythonic" rất dễ bị bỏ qua, đặc biệt khi thói quen được vay mượn từ công việc trong các ngôn ngữ lập trình khác.

Better Python Code là hướng dẫn lập trình Pythonic. Cuốn sách trình bày những lỗi phổ biến mà các nhà phát triển Python mắc phải - ngay cả những nhà phát triển Python đã sử dụng ngôn ngữ này trong nhiều năm - thường là do Python đôi khi gây ra "những phiền toái hấp dẫn". Xuyên suốt cuốn sách là hướng dẫn để lập trình tốt hơn bằng ngôn ngữ Python cốt lõi.

Mỗi phần đưa ra một ví dụ cụ thể nhưng ngắn gọn về một số hiểu lầm hoặc thói quen xấu trong hành động. Mỗi phần chứa mô tả về lỗi xảy ra với mã mẫu và gợi ý về một hoặc nhiều cách tốt hơn để mã hóa chức năng tương đương mà không gặp phải sai sót ban đầu. Mọi cạm bẫy được đề cập trong cuốn sách này đều phản ánh những điểm yếu, sai sót và hiểu lầm mà tác giả đã thấy trong các cơ sở mã cụ thể, được sử dụng rộng rãi được viết bởi các nhà phát triển có kinh nghiệm trong hơn 25 năm viết Python của ông.

Cả những người mới bắt đầu và những nhà phát triển có hàng chục năm kinh nghiệm sẽ học cách khắc phục những hạn chế trong mã họ viết sau khi suy ngẫm về những cuộc thảo luận này.


Foreword xvii

Preface xix

Acknowledgments xxv

About the Author xxvii

Introduction 1

Chapter 1: Looping Over the Wrong Things 3

1.1 (Rarely) Generate a List for Iteration 3
1.2 Use enumerate() Instead of Looping Over an Index 6
1.3 Don't Iterate Over dict.keys() When You Want dict.items() 8
1.4 Mutating an Object During Iteration 9
1.5 for Loops Are More Idiomatic Than while Loops 12
1.6 The Walrus Operator for "Loop-and-a-Half" Blocks 13
1.7 zip() Simplifies Using Multiple Iterables 15
1.8 zip(strict=True) and itertools.zip_longest() 17
1.9 Wrapping Up 20

Chapter 2: Confusing Equality with Identity 21

2.1 Late Binding of Closures 21
2.2 Overchecking for Boolean Values 25
2.3 Comparing x == None 28
2.4 Misunderstanding Mutable Default Arguments 29
2.5 Copies versus References to Mutable Objects 33
2.6 Confusing is with == (in the Presence of Interning) 35
2.7 Wrapping Up 37

Chapter 3: A Grab Bag of Python Gotchas 39

3.1 Naming Things 39
3.2 Quadratic Behavior of Naive String Concatenation 52
3.3 Use a Context Manager to Open a File 56
3.4 Optional Argument key to .sort() and sorted() 59
3.5 Use dict.get() for Uncertain Keys 62
3.6 Wrapping Up 64

Chapter 4: Advanced Python Usage 67

4.1 Comparing type(x) == type(y) 67
4.2 Naming Things (Revisited) 71
4.3 Keep Less-Used Features in Mind 79
4.4 Type Annotations Are Not Runtime Types 98
4.5 Wrapping Up 105

Chapter 5: Just Because You Can, It Doesn't Mean You Should... 107

5.1 Metaclasses 107
5.2 Monkeypatching 112
5.3 Getters and Setters 115
5.4 It's Easier to Ask for Forgiveness Than Permission 118
5.5 Structural Pattern Matching 121
5.6 Regular Expressions and Catastrophic Backtracking 123
5.7 Wrapping Up 126

Chapter 6: Picking the Right Data Structure 129

6.1 collections.defaultdict 129
6.2 collections.Counter 132
6.3 collections.deque 135
6.4 collections.ChainMap 138
6.5 Dataclasses and Namedtuples 141
6.6 Efficient Concrete Sequences 146
6.7 Wrapping Up 150

Chapter 7: Misusing Data Structures 153

7.1 Quadratic Behavior of Repeated List Search 153
7.2 Deleting or Adding Elements to the Middle of a List 157
7.3 Strings Are Iterables of Strings 163
7.4 (Often) Use enum Rather Than CONSTANT 166
7.5 Learn Less Common Dictionary Methods 169
7.6 JSON Does Not Round-Trip Cleanly to Python 174
7.7 Rolling Your Own Data Structures 178
7.8 Wrapping Up 187

Chapter 8: Security 189

8.1 Kinds of Randomness 190
8.2 Putting Passwords or Other Secrets in "Secure" Source Code 195
8.3 "Rolling Your Own" Security Mechanisms 198
8.4 Use SSL/TLS for Microservices 201
8.5 Using the Third-Party requests Library 205
8.6 SQL Injection Attacks When Not Using DB-API 208
8.7 Don’t Use assert to Check Safety Assumptions 212
8.8 Wrapping Up 215

Chapter 9: Numeric Computation in Python 217

9.1 Understanding IEEE-754 Floating Point Numbers 217
9.2 Numeric Datatypes 228
9.3 Wrapping Up 239

Appendix: Topics for Other Books 241

A.1 Test-Driven Development 241
A.2 Concurrency 242
A.3 Packaging 243
A.4 Type Checking 243
A.5 Numeric and Dataframe Libraries 244

Index 245

TỔNG QUAN SÁCH

Python là một trong những ngôn ngữ lập trình được sử dụng rộng rãi nhất trên thế giới. Nó được sử dụng ở mọi nơi, từ giáo dục tiểu học đến phát triển web hàng ngày cho đến các viện nghiên cứu khoa học tiên tiến nhất trên thế giới. Tuy nhiên, giống như tất cả các ngôn ngữ lập trình, Python có một bộ sưu tập các cách hoàn thành nhiệm vụ "Pythonic" rất dễ bị bỏ qua, đặc biệt khi thói quen được vay mượn từ công việc trong các ngôn ngữ lập trình khác.

Better Python Code là hướng dẫn lập trình Pythonic. Cuốn sách trình bày những lỗi phổ biến mà các nhà phát triển Python mắc phải - ngay cả những nhà phát triển Python đã sử dụng ngôn ngữ này trong nhiều năm - thường là do Python đôi khi gây ra "những phiền toái hấp dẫn". Xuyên suốt cuốn sách là hướng dẫn để lập trình tốt hơn bằng ngôn ngữ Python cốt lõi.

Mỗi phần đưa ra một ví dụ cụ thể nhưng ngắn gọn về một số hiểu lầm hoặc thói quen xấu trong hành động. Mỗi phần chứa mô tả về lỗi xảy ra với mã mẫu và gợi ý về một hoặc nhiều cách tốt hơn để mã hóa chức năng tương đương mà không gặp phải sai sót ban đầu. Mọi cạm bẫy được đề cập trong cuốn sách này đều phản ánh những điểm yếu, sai sót và hiểu lầm mà tác giả đã thấy trong các cơ sở mã cụ thể, được sử dụng rộng rãi được viết bởi các nhà phát triển có kinh nghiệm trong hơn 25 năm viết Python của ông.

Cả những người mới bắt đầu và những nhà phát triển có hàng chục năm kinh nghiệm sẽ học cách khắc phục những hạn chế trong mã họ viết sau khi suy ngẫm về những cuộc thảo luận này.

MỤC LỤC

Foreword xvii

Preface xix

Acknowledgments xxv

About the Author xxvii

Introduction 1

Chapter 1: Looping Over the Wrong Things 3

1.1 (Rarely) Generate a List for Iteration 3
1.2 Use enumerate() Instead of Looping Over an Index 6
1.3 Don't Iterate Over dict.keys() When You Want dict.items() 8
1.4 Mutating an Object During Iteration 9
1.5 for Loops Are More Idiomatic Than while Loops 12
1.6 The Walrus Operator for "Loop-and-a-Half" Blocks 13
1.7 zip() Simplifies Using Multiple Iterables 15
1.8 zip(strict=True) and itertools.zip_longest() 17
1.9 Wrapping Up 20

Chapter 2: Confusing Equality with Identity 21

2.1 Late Binding of Closures 21
2.2 Overchecking for Boolean Values 25
2.3 Comparing x == None 28
2.4 Misunderstanding Mutable Default Arguments 29
2.5 Copies versus References to Mutable Objects 33
2.6 Confusing is with == (in the Presence of Interning) 35
2.7 Wrapping Up 37

Chapter 3: A Grab Bag of Python Gotchas 39

3.1 Naming Things 39
3.2 Quadratic Behavior of Naive String Concatenation 52
3.3 Use a Context Manager to Open a File 56
3.4 Optional Argument key to .sort() and sorted() 59
3.5 Use dict.get() for Uncertain Keys 62
3.6 Wrapping Up 64

Chapter 4: Advanced Python Usage 67

4.1 Comparing type(x) == type(y) 67
4.2 Naming Things (Revisited) 71
4.3 Keep Less-Used Features in Mind 79
4.4 Type Annotations Are Not Runtime Types 98
4.5 Wrapping Up 105

Chapter 5: Just Because You Can, It Doesn't Mean You Should... 107

5.1 Metaclasses 107
5.2 Monkeypatching 112
5.3 Getters and Setters 115
5.4 It's Easier to Ask for Forgiveness Than Permission 118
5.5 Structural Pattern Matching 121
5.6 Regular Expressions and Catastrophic Backtracking 123
5.7 Wrapping Up 126

Chapter 6: Picking the Right Data Structure 129

6.1 collections.defaultdict 129
6.2 collections.Counter 132
6.3 collections.deque 135
6.4 collections.ChainMap 138
6.5 Dataclasses and Namedtuples 141
6.6 Efficient Concrete Sequences 146
6.7 Wrapping Up 150

Chapter 7: Misusing Data Structures 153

7.1 Quadratic Behavior of Repeated List Search 153
7.2 Deleting or Adding Elements to the Middle of a List 157
7.3 Strings Are Iterables of Strings 163
7.4 (Often) Use enum Rather Than CONSTANT 166
7.5 Learn Less Common Dictionary Methods 169
7.6 JSON Does Not Round-Trip Cleanly to Python 174
7.7 Rolling Your Own Data Structures 178
7.8 Wrapping Up 187

Chapter 8: Security 189

8.1 Kinds of Randomness 190
8.2 Putting Passwords or Other Secrets in "Secure" Source Code 195
8.3 "Rolling Your Own" Security Mechanisms 198
8.4 Use SSL/TLS for Microservices 201
8.5 Using the Third-Party requests Library 205
8.6 SQL Injection Attacks When Not Using DB-API 208
8.7 Don’t Use assert to Check Safety Assumptions 212
8.8 Wrapping Up 215

Chapter 9: Numeric Computation in Python 217

9.1 Understanding IEEE-754 Floating Point Numbers 217
9.2 Numeric Datatypes 228
9.3 Wrapping Up 239

Appendix: Topics for Other Books 241

A.1 Test-Driven Development 241
A.2 Concurrency 242
A.3 Packaging 243
A.4 Type Checking 243
A.5 Numeric and Dataframe Libraries 244

Index 245

-%
0₫ 0₫
0915920514
0915920514