Hướng dẫn python x if not none else y - python x nếu không phải không ai khác y

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

c = MyClass[2]
c.foo[3]  # returns 3*2 = 6
c.foo[]  # returns 10*2 = 20
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
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.

Làm thế nào để bạn kiểm tra xem một biến không phải là không có trong Python?

Sử dụng toán tử IS không để kiểm tra xem một biến không phải là không có trong Python, ví dụ: Nếu my_var không phải là không:. Toán tử không trả về đúng nếu các giá trị ở bên trái và bên phải không trỏ đến cùng một đối tượng [cùng một vị trí trong bộ nhớ]. to check if a variable is not None in Python, e.g. if my_var is not None: . The is not operator returns True if the values on the left-hand and right-hand sides don't point to the same object [same location in memory].

Điều gì không có nghĩa là trong Python?

Nó thường được sử dụng làm giá trị mặc định cho các tham số tùy chọn, như trong: def sort [key = none]: Nếu không phải là không: # làm điều gì đó với đối số khác: # Đối số đã bị bỏ qua.Nếu bạn chỉ sử dụng nếu khóa: ở đây, thì một đối số được đánh giá là sai sẽ không được xem xét., as in: def sort[key=None]: if key is not None: # do something with the argument else: # argument was omitted. If you only used if key: here, then an argument which evaluated to false would not be considered.

Không có hoặc không ở Python?

Python sử dụng từ khóa Không có để xác định các đối tượng và biến null.Mặc dù không ai phục vụ một số mục đích giống như null trong các ngôn ngữ khác, nhưng đó là một con thú khác hoàn toàn.Vì null trong Python, không có giá trị nào là 0 hoặc bất kỳ giá trị nào khác.Trong Python, không ai là đối tượng và một công dân hạng nhất!. While None does serve some of the same purposes as null in other languages, it's another beast entirely. As the null in Python, None is not defined to be 0 or any other value. In Python, None is an object and a first-class citizen!

Nếu x có nghĩa là gì trong Python?

Nếu bạn sử dụng nếu X, điều đó có nghĩa là nó phải đánh giá x cho giá trị sự thật của nó.Nhưng khi bạn sử dụng x == true hoặc x là đúng.Nó có nghĩa là kiểm tra xem loại [x] == bool và liệu x có đúng không.Sự chú ý: X là đúng không bằng bool [x] == true.it has to evaluate x for its truth value. But when you use x ==True or x is True . It means checking whether type[x]==bool and whether x is True. attention : x is True is no equal to bool[x]==True.

Chủ Đề