Tôi đã bắt gặp một đoạn mã Python trông giống như thế này:
def bar[b]:
return b*2
class MyClass[object]:
def __init__[self, a]:
self.a = a
self.b = 10
def foo[self, b=None]:
return bar[b if b is not None else self.b]
Vì vậy, lớp có b
làm thuộc tính cố định, được sử dụng làm đầu vào mặc định cho ClassMethod
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
0, nếu nó được gọi mà không có đối số.Xin vui lòng giả sử rằng b
trong trường hợp này dự kiến sẽ là một chiếc phao.
Vui lòng bỏ qua
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
2, nó được sử dụng khác - tôi chỉ muốn đảm bảo rằng bạn thấy rằng có các thuộc tính được giải quyết bởi hàm tạo.Việc sử dụng sẽ trông như thế này:
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
Trong trường hợp này, tôi đã tự hỏi về phương pháp ____ 10. Đây có phải là một cách tốt để thực hiện
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
4 làm giá trị mặc định cho b
?Là một trong hai đề xuất sau đây của tôi ít nhiều mong muốn? Nếu vậy: Tại sao?
def foo[self, b=None]:
return bar[b or self.b]
hoặc
def foo[self, b=self.b]:
return bar[b]
Để gán kết quả của hàm
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
6 cho biến c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
7 Nếu nó khác với c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
8, hãy sử dụng toán tử Walrus c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
9 trong một khối một dòng nếu khối. Toán tử Walrus gán giá trị trả về chức năng cho biến def foo[self, b=None]:
return bar[b or self.b]
0 và trả về nó cùng một lúc, để bạn có thể kiểm tra và gán nó cho biến c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
7 sau đó.Vấn đề: Làm thế nào để gán một giá trị cho một biến nếu nó không bằng ____ 18 18 chỉ sử dụng một dòng mã python duy nhất?: How to assign a value to a variable if it is not equal to
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
8—using only a single line of
Python code? Ví dụ: Giả sử, bạn muốn gán giá trị trả về của hàm
6, nhưng chỉ khi nó không trả về c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
8. Nếu không, bạn muốn để lại giá trị như nó là.: Say, you want to assign the return value of a function c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
6, but only if it doesn’t return c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
8. Otherwise, you want to leave the value as it is. Đây là một ví dụ về mã:
import random def get_value[]: if random.random[]>0.5: return None return 1 # Naive approach: x = 42 tmp = get_value[] if tmp != None: x = tmp print[tmp]
Trong khi điều này hoạt động, bạn cần thực hiện chức năng
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
6 hai lần không tối ưu. Một giải pháp thay thế sẽ là gán kết quả của hàm c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
6 cho biến tạm thời để tránh thực thi chức năng lặp đi lặp lại:x = 42 temp = get_value[] if temp != None: x = temp print[x]
Tuy nhiên, điều này có vẻ cồng kềnh và không hiệu quả. Có cách nào tốt hơn?
Hãy để có một cái nhìn tổng quan về một lớp lót có điều kiện gán một giá trị cho một biến nhất định:
Bài tập: Chạy mã. Nó luôn luôn tạo ra kết quả tương tự?: Run the code. Does it always generate the same result?
- Phương pháp 1: Toán tử Ternary + Semicolon
- Phương pháp 2: Walrus + One-line-if
- Cuốn sách Python One-Liners: Master The Single Line đầu tiên!
Phương pháp 1: Toán tử Ternary + Semicolon
Phương pháp 2: Walrus + One-line-if
Cuốn sách Python One-Liners: Master The Single Line đầu tiên!
# Method 1 tmp = get_value[]; x = tmp if tmp else x
Toán tử ternary cơ bản nhất
def foo[self, b=None]:
return bar[b or self.b]
7 bao gồm ba toán hạng c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
7, def foo[self, b=None]:
return bar[b or self.b]
9 và def foo[self, b=self.b]:
return bar[b]
0. Đó là một biểu thức với giá trị trả về. Toán tử ternary trả về c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
7 nếu biểu thức boolean def foo[self, b=None]:
return bar[b or self.b]
9 đánh giá thành def foo[self, b=self.b]:
return bar[b]
3. Mặt khác, nếu biểu thức def foo[self, b=None]:
return bar[b or self.b]
9 đánh giá thành def foo[self, b=self.b]:
return bar[b]
5, toán tử ternary trả về phương án thay thế def foo[self, b=self.b]:
return bar[b]
0.Bạn có thể sử dụng toán tử ternary để giải quyết vấn đề này kết hợp với dấu chấm phẩy để viết nhiều dòng mã dưới dạng một lớp lót python.
x = get_value[] if get_value[] else x
Bạn không thể chạy chức năng
c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
6 hai lần để kiểm tra xem nó có trả về def foo[self, b=self.b]:
return bar[b]
3 hay không và để gán giá trị trả về cho biến c = MyClass[2]
c.foo[3] # returns 3*2 = 6
c.foo[] # returns 10*2 = 20
7. Tại sao? Bởi vì nó không có tính tự nhiên và có thể trả về các giá trị khác nhau cho các thực thi khác nhau.Do đó, mã sau đây sẽ là một sai lầm cùn:
Những bài viết liên quan:
- Python ternary
- Python một dòng nếu câu lệnh
- Bán kết Python
Phương pháp 2: Walrus + One-line-if
Một phần mở rộng tuyệt đẹp của Python 3.8 là nhà điều hành Walrus. Toán tử Walrus
import random def get_value[]: if random.random[]>0.5: return None return 1 # Naive approach: x = 42 tmp = get_value[] if tmp != None: x = tmp print[tmp]2 là một toán tử gán với giá trị trả về. Do đó, nó cho phép bạn kiểm tra một điều kiện và gán một giá trị cùng một lúc:The Walrus operator
import random def get_value[]: if random.random[]>0.5: return None return 1 # Naive approach: x = 42 tmp = get_value[] if tmp != None: x = tmp print[tmp]2 is an assignment operator with return value. Thus, it allows you to check a condition and assign a value at the same time:
# Method 2 if tmp := get_value[]: x = tmp
Đây là một cách rất sạch sẽ, dễ đọc và pythonic. Ngoài ra, bạn không có sự gán danh tính dự phòng trong trường hợp điều kiện IF không được đáp ứng.
Toán tử Walrus Python 3.8 [Biểu thức gán]
Bài viết liên quan: Nhà điều hành Walrus ở Python 3.8 The Walrus Operator in Python 3.8
Cuốn sách Python One-Liners: Master The Single Line đầu tiên!
Các lập trình viên Python sẽ cải thiện các kỹ năng khoa học máy tính của họ với các lớp lót hữu ích này.
Python One-Linerswill dạy bạn cách đọc và viết một bộ bài viết: Các câu nói ngắn gọn về chức năng hữu ích được đóng gói thành một dòng mã. Bạn sẽ học cách giải nén một cách có hệ thống và hiểu bất kỳ dòng mã Python nào và viết python được nén mạnh mẽ, mạnh mẽ như một chuyên gia.concise statements of useful functionality packed into a single line of code. You’ll learn how to systematically unpack and understand any line of Python code, and write eloquent, powerfully compressed Python like an expert.
Cuốn sách năm chương bao gồm [1] mẹo và thủ thuật, [2] biểu thức thông thường, [3] học máy, [4] chủ đề khoa học dữ liệu cốt lõi và [5] thuật toán hữu ích.
Giải thích chi tiết về một lớp lót giới thiệu các khái niệm khoa học máy tính quan trọng và tăng cường kỹ năng mã hóa và phân tích của bạn. Bạn có thể tìm hiểu về các tính năng Python nâng cao như hiểu danh sách, cắt lát, chức năng Lambda, biểu thức thông thường, bản đồ và giảm các chức năng và bài tập cắt lát.key computer science concepts and boost your coding and analytical skills. You’ll learn about advanced Python features such as list comprehension, slicing, lambda functions, regular expressions, map and reduce functions, and slice assignments.
Bạn cũng sẽ học cách:
- Tận dụng các cấu trúc dữ liệu để giải quyết các vấn đề trong thế giới thực, như sử dụng lập chỉ mục Boolean để tìm các thành phố có ô nhiễm trên trung bìnhsolve real-world problems, like using Boolean indexing to find cities with above-average pollution
- Sử dụng những điều cơ bản của Numpy như mảng, hình dạng, trục, loại, phát sóng, lập chỉ mục nâng cao, cắt lát, sắp xếp, tìm kiếm, tổng hợp và thống kêNumPy basics such as array, shape, axis, type, broadcasting, advanced indexing, slicing, sorting, searching, aggregating, and statistics
- Tính toán số liệu thống kê cơ bản của các mảng dữ liệu đa chiều và các thuật toán có nghĩa K để học tập không giám sátstatistics of multidimensional data arrays and the K-Means algorithms for unsupervised learning
- Tạo các biểu thức chính quy nâng cao hơn bằng cách sử dụng nhóm nhóm và các nhóm được đặt tên, Lookahead tiêu cực, ký tự thoát, không gian trắng, bộ ký tự [và bộ ký tự tiêu cực] và các toán tử tham lam/nongreedyadvanced regular expressions using grouping and named groups, negative lookaheads, escaped characters, whitespaces, character sets [and negative characters sets], and greedy/nongreedy operators
- Hiểu được một loạt các chủ đề khoa học máy tính, bao gồm các phương pháp, palindromes, supersets, hoán vị, giai thừa, số nguyên tố, số fibonacci, obfuscation, tìm kiếm và phân loại thuật toáncomputer science topics, including anagrams, palindromes, supersets, permutations, factorials, prime numbers, Fibonacci numbers, obfuscation, searching, and algorithmic sorting
Đến cuối cuốn sách, bạn sẽ biết cách viết Python ở tinh tế nhất và tạo ra những tác phẩm nghệ thuật Python Python ngắn gọn, đẹp đẽ chỉ trong một dòng.write Python at its most refined, and create concise, beautiful pieces of “Python art” in merely a single line.
Nhận Python Oneer của bạn trên Amazon !!
Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.
Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer [Nostarch 2020], đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.
Niềm đam mê của ông là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ. Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.