Hướng dẫn null trong python

Không có vô giá trị bằng Python; thay vào đó, có Không có. Python vô giá trị được gọi là Không có là một đối tượng đặc biệt đại diện cho sự vắng mặt của một giá trị. Đối tượng Python Null là singleton Không có. Tương đương với từ khóa null là Không có. Nhiều người cho rằng từ null có phần bí truyền.

Nội dung chính

  • Lịch sử của Null
  • Null trong Java
  • Null trong PHP
  • Bằng chứng rằng Không có Đối tượng
  • Sự thật thú vị về Không có
  • Khai báo Không có trong Python
  • Sử dụng Không như một phần của phép so sánh
  • Sự khác biệt giữa == và Python là Toán tử.
  • Kiểm tra loại Không có
  • Using None as a Value in Python
  • Kiểm tra Không sử dụng điều kiện if… else.
  • Chỉ có thể có một Không có trong Python.
  • Kiểm tra xem giá trị có là Không
  • Không có trong Tracebacks
  • Sự kết luận
  • Bài viết được đề xuất

Vô giá trị chính xác không phải là từ thân thiện nhất đối với những người mới làm quen với lập trình. Cũng thế, None đề cập chính xác đến chức năng dự định – nó không là gì và không có hành vi. Trong Python, Không có là đối tượng và công dân hạng nhất!

Nhiều ngôn ngữ lập trình sử dụng Vô giá trị đại diện cho một con trỏ không trỏ đến bất kỳ thứ gì. Đó là một loại trình giữ chỗ khi một biến trống hoặc để đánh dấu các tham số mặc định mà bạn chưa cung cấp. Null thường được định nghĩa là 0 trong các ngôn ngữ đó, nhưng Null trong Python thì khác.

  • Lịch sử của Null
    • Null trong Java
    • Null trong PHP
  • Không có trong Python
      • Đầu ra
      • Đầu ra
  • Bằng chứng rằng Không có Đối tượng
  • Sự thật thú vị về Không có
  • Khai báo Không có trong Python
      • Đầu ra
      • Đầu ra
  • Sử dụng Không như một phần của phép so sánh
    • Sự khác biệt giữa == và Python là Toán tử.
      • Đầu ra
      • Đầu ra
  • Kiểm tra loại Không có
      • Đầu ra
  • Using None as a Value in Python
      • Đầu ra
      • Đầu ra
  • Kiểm tra Không sử dụng điều kiện if… else.
  • Chỉ có thể có một Không có trong Python.
  • Kiểm tra xem giá trị có là Không
  • Không có trong Tracebacks
      • Đầu ra
  • Sự kết luận
  • Bài viết được đề xuất

Lịch sử của Null

Trong hầu hết các ngôn ngữ hướng đối tượng, việc đặt tên cho các đối tượng có xu hướng sử dụng cú pháp camel-case. Ví dụ: ThisIsMyObject. Như bạn sẽ thấy ngay sau đây, kiểu None của Python là một đối tượng và hoạt động giống như một đối tượng.

Như đã nêu, cách chính xác nhất để kiểm tra rằng một thứ gì đó đã được cung cấp Không có giá trị là sử dụng toán tử là nhận dạng, kiểm tra rằng hai biến tham chiếu đến cùng một đối tượng.

Ví dụ: trong các ngôn ngữ lập trình khác, đây là cách bạn có thể tạo một biến null trong PHP và Java. Hãy xem cách Java và PHP khác định nghĩa biến Null.

Null trong Java

myVariable = null;

Null trong PHP

$myVariable = NULL;

Nếu bạn cần đánh giá một biến trong điều kiện if, bạn có thể kiểm tra điều này như sau trong Java:

if(myVariable == null) {
  System.out.println(Some output);
}

Làm thế nào để sử dụng ‘Không có‘bằng Python. Tôi sẽ sử dụng nó trong câu lệnh if và các kiểu dữ liệu ghép.

Các Không có từ khóa trong Python được sử dụng để mô tả giá trị null hoặc không có giá trị nào. Không có không có nghĩa là một giá trị 0, Sai, hoặc một chuỗi trống. Không có kiểu dữ liệu nào của riêng nó (NoneType), và chỉ Không có có thể Không có. Nếu bạn xác định một hàm có câu lệnh trả về hoặc không trả về giá trị, thì nó sẽ trả về Không có.

def python_none():
    pass


print(python_none())

Đầu ra

None

Khi bạn gọi hàm python_none (), nó trả về Không có vì không có câu lệnh trả về. Thay vào đó, chỉ có một câu lệnh vượt qua.

Không có không có giá trị đầu ra, nhưng việc in hiển thị Không có đối với bảng điều khiển Python, buộc chúng ta phải in đầu ra một cách rõ ràng.

Không có gì cho biết các tham số bị thiếu hoặc mặc định. Ví dụ: Không có gì xuất hiện hai lần trong tài liệu cho list.sort.

print(help(list.sort))

Đầu ra

sort(self, /, *, key=None, reverse=False)
    Sort the list in ascending order and return None.

    The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
    order of two equal elements is maintained).

    If a key function is given, apply it once to each list item and sort them,
    ascending or descending, according to their function values.

    The reverse flag can be set to sort in descending order.

Trong đầu ra, bạn có thể thấy rằng khóa tham số có giá trị Không có. Điều đó có nghĩa là tham số chính là bắt buộc, nhưng chúng tôi chưa cung cấp; đó là lý do tại sao tham số mặc định là Không có.

Bằng chứng rằng Không có Đối tượng

None là singleton và lớp NoneType chỉ cung cấp cho bạn cùng một trường hợp duy nhất của None. Chỉ có một Không có trong chương trình Python của chúng tôi.

NoneObj = type(None)()
print(NoneObj)

# Check if NoneObj is instance of NoneType class
print(NoneObj is None)

Nó cho kết quả như sau.

None
True

Mặc dù bạn cố gắng tạo phiên bản mới, bạn vẫn nhận được Không có hiện có.

Sự thật thú vị về Không có

  1. Không có không giống như Sai.
  2. Không có không phải là một chuỗi trống.
  3. Không có không phải 0.
  4. So sánh Không có bất cứ điều gì sẽ luôn luôn trở lại Sai ngoại trừ Không có chính nó.

Khai báo Không có trong Python

Chúng ta có thể gán đối tượng None cho bất kỳ biến nào tại thời điểm khai báo. Các biến Python trở nên sống động nhờ toán tử gán, giúp chúng ta gán giá trị cụ thể cho biến. Một số ngôn ngữ lập trình không nhất thiết phải gán giá trị ban đầu cho chúng. Ví dụ: giá trị ban đầu cho một số loại biến có thể là Vô giá trị.

Hãy gán giá trị None cho một biến trong Python và in biến đó trong bảng điều khiển.

data = None
print(None)

Đầu ra

None

Nếu chúng ta không xác định một biến và in trực tiếp giá trị của nó, chúng ta sẽ nhận được NameError.

print(data)

Đầu ra

Traceback (most recent call last):
  File "app.py", line 2, in 
    print(data)
NameError: name 'data' is not defined

Tất cả các biến trong Python đi vào cuộc sống bởi toán tử gán. Một biến chỉ có thể bắt đầu cuộc sống dưới dạng Null nếu bạn chỉ định Không có. Nếu bạn không xác định một biến và cố gắng in trực tiếp trong bảng điều khiển, bạn sẽ nhận được NameError.

Sử dụng Không như một phần của phép so sánh

Không có null trong Python. Thay vào đó, không có Không. Như đã nói ở trên, cách chính xác nhất để kiểm tra xem một thứ gì đó đã được cung cấp Không có giá trị nào là sử dụng toán tử là nhận dạng, kiểm tra xem hai biến tham chiếu đến cùng một đối tượng.

Trong Python, để thể hiện sự vắng mặt của giá trị, bạn có thể sử dụng Không có giá trị (các loại.NoneType.Không có) cho các đối tượng và  (or len() == 0) for strings.

Regarding the difference between ==is, kiểm tra nhận dạng đối tượng bằng cách sử dụng == phải đủ.

Tuy nhiên, kể từ khi hoạt động is được định nghĩa là một hoạt động nhận dạng đối tượng, có lẽ sử dụng nó sẽ đúng hơn là ==. Không chắc liệu có sự khác biệt về tốc độ hay không.

Một nguyên tắc cơ bản cần ghi nhớ là khi kiểm tra các giá trị Không có.

  1. Do sử dụng toán tử nhận dạng được và không.
  2. Không sử dụng các toán tử bình đẳng == và! =.

Sự khác biệt giữa == và Python là Toán tử.

Sự khác biệt giữa == và là nhà điều hành Trong Python đó là == nhà điều hành so sánh các giá trị của cả các toán hạng và kiểm tra sự bình đẳng giá trị. Trong khi đó là nhà điều hành kiểm tra xem cả hai toán hạng đều tham chiếu đến cùng một đối tượng.

Xem đoạn mã sau.

# app.py

eleven = None
print(eleven is None)

Xem kết quả sau.

➜  pyt python3 app.py
True
➜  pyt

Bây giờ, hãy xem đoạn mã sau.

def python_none():
    pass


data = python_none()
print(data == None)
print(data is None)

Đầu ra

True
True

Mã này trả về Không có và chúng tôi kiểm tra theo cả hai cách để đảm bảo dữ liệu thực sự là Không.

Tuy nhiên, các toán tử bình đẳng có thể bị đánh lừa khi bạn so sánh các đối tượng do người dùng xác định ghi đè họ.

class isAndDoubleEqual:
    def __eq__(self, other):
        return True


res = isAndDoubleEqual()
print(res == None)
print(res is None)

Đầu ra

True
False

Toán tử bình đẳng == trả về câu trả lời không chính xác.

nhận dạng is operator trả về câu trả lời đúng bởi vì nó không thể bị đánh lừa bởi vì bạn không thể ghi đè nó.

Kiểm tra loại Không có

Trong các ngôn ngữ lập trình khác, Null chỉ là một từ đồng nghĩa với 0, nhưng Null trong Python là một đối tượng.

Kiểm tra loại Không có bằng cách sử dụng phương thức type ().

print(type(None))

Đầu ra

Điều này cho thấy None là đối tượng và kiểu dữ liệu của nó là NoneType.

Không có ngôn ngữ nào tự nó được xây dựng trong ngôn ngữ là Null trong Python. Tuy nhiên, bạn có thể kiểm tra bằng cách in dir (__ builtins__).

print(dir(__builtins__))

Nó sẽ in các mục có sẵn sau đây.

['ArithmeticError',..., None,....., zip

Using None as a Value in Python

We can pass None as a function parameter in Python and add it to the list. First, we will define a class, and we don’t define its body. Then, we create a function called list_function(), which takes two parameters.

  1. new_item: This item will be added to the list if we pass when calling the function.
  2. initial_list: As a default parameter, the list should be None, but if we pass any argument explicitly, it will return the initial list.
class DoAppendNone:
    pass


def list_function(new_item=DoAppendNone, initial_list=None):
    if initial_list is None:
        initial_list = []
    
    nếu new_item không phải là DoAppendNone: initial_list.append (new_item) trả về dữ liệu Initial_list = [1, 2, 3, 4, 5]
print (list_ function (initial_list = data))

Đầu ra

[1, 2, 3, 4, 5]

Chúng tôi đã chuyển hai tham số với giá trị mặc định của nó là list_ Chức năng ().

  1. new_item = DoAppendNone
  2. Initial_list = Không có

Trong đoạn mã, chúng ta đã sử dụng dữ liệu Initial_list vì chúng ta có một danh sách dữ liệu có năm phần tử.

Vì vậy, khi gọi hàm, thì initial_list = data của chúng ta.

Điều đó có nghĩa là, bên trong hàm, chúng tôi đã kiểm tra xem Initial_list có phải là Không có hay không, nhưng không Không có vì chúng tôi có danh sách các mục trong dữ liệu để điều kiện đó sẽ Sai.

Điều kiện thứ hai là new_element không nên là DoAppendNone, nhưng nó là như vậy. Vì vậy, điều kiện đó cũng sẽ là Sai. Vì vậy, sẽ không có phần tử mới nào được thêm vào danh sách.

Cuối cùng, danh sách dữ liệu được cung cấp sẽ được trả về dưới dạng đầu ra.

Bây giờ, điều gì sẽ xảy ra nếu Không có là một đối tượng đầu vào hợp lệ? Ví dụ: điều gì sẽ xảy ra nếu list_ functions () có thể chèn một mục vào danh sách hoặc không và Không có phần tử hợp lệ để thêm vào thì sao? Trong trường hợp này, bạn có thể xác định lớp cụ thể để sử dụng làm mặc định trong khi phân biệt với Không có.

Vì vậy, chúng ta hãy viết một chương trình chèn giá trị None làm phần tử vào danh sách.

class DoAppendNone:
    pass


def list_function(new_item=DoAppendNone, initial_list=None):
    if initial_list is None:
        initial_list = []
    if new_item is not DoAppendNone:
        initial_list.append(new_item)
    return initial_list


data = [1, 2, 3, 4, 5]
print(list_function(None, data))

Đầu ra

[1, 2, 3, 4, 5, None]

Đây, lớp DoAppendNone đóng vai trò như một tín hiệu không được nối thêm, vì vậy bạn không muốn Không có cho điều đó. Điều đó giải phóng chúng tôi để chèn Không có bất cứ khi nào bạn muốn.

Kiểm tra Không sử dụng điều kiện if… else.

Chúng ta có thể viết đoạn mã sau để kiểm tra xem giá trị có Không có.

# app.py

value = None

if value is None:
    print('The value is null')
else:
    print('The value is not null')

Trong ví dụ trên, chúng tôi đã xác định biến được gọi là giá trị và gán Không có giá trị.

Sau đó, chúng ta đã sử dụng điều kiện if… else để kiểm tra giá trị None và nếu có, hãy trả về câu lệnh in với The value is null.

Chúng ta có thể sử dụng mã sau để kiểm tra xem tên có tồn tại hay không.

try:
    val
except NameError:
    pass  # val does not exist at all

Chỉ có thể có một Không có trong Python.

Các Không có là hằng số có sẵn ngay khi bạn khởi động Python, cho dù trong mô-đun, lớp hay hàm. Các NonType, ngược lại, không phải; trước tiên bạn cần tham chiếu đến nó bằng cách truy vấn Không có cho lớp của nó.

>>> NoneType
NameError: name 'NoneType' is not defined
>>> type(None)
NoneType

Không thể ghi đè.

Trước Python 2.4, có thể gán lại Không có, nhưng không còn nữa. Thậm chí không phải là thuộc tính lớp hoặc trong giới hạn của một hàm.

Kiểm tra xem giá trị có là Không

Tại sao làm điều này

value is None

còn hơn là

value==None

Đầu tiên tương đương với:

id(value)==id(None)

Trong khi biểu thức giá trị == Không có được áp dụng như thế này,

value.__eq(None)__

nếu giá trị là Không, thì bạn sẽ nhận được những gì bạn mong đợi.

>>> nothing = function_that_does_nothing()
>>> nothing.__eq__(None)
True

Điều này là do không có trạng thái đặc biệt nào trong ngôn ngữ Python. Đó là một giá trị cơ sở được ưa thích vì nhiều thuật toán coi nó là đặc biệt.

Trong các tình huống như vậy, nó có thể được sử dụng làm cờ để báo hiệu rằng điều kiện yêu cầu một số xử lý đặc biệt, chẳng hạn như thiết lập giá trị mặc định.

Không có trong Tracebacks

Khi NoneType xuất hiện trong phần theo dõi của bạn, điều đó có nghĩa là thứ mà bạn không mong đợi là Không có đã là Không có và bạn đã cố gắng sử dụng nó theo cách mà bạn không thể sử dụng Không có. Hầu như luôn luôn, đó là bởi vì bạn đang cố gắng gọi một phương thức trên đó.

data = [1, 2, 3, 4, 5]

data.append(6)
print(data)

data = None
data.append(11)
print(data)

Đầu ra

[1, 2, 3, 4, 5, 6]
Traceback (most recent call last):
  File "app.py", line 7, in 
    data.append(11)
AttributeError: 'NoneType' object has no attribute 'append'

Khi chúng tôi xác định một danh sách với một số giá trị ban đầu, nó có thể gọi hàm list.append () để thêm một phần tử vào danh sách, nhưng khi chúng tôi xác định danh sách thành Không, điều đó có nghĩa là bây giờ danh sách đó không phải là danh sách Python truyền thống, điều đó danh sách bây giờ là Không có và đối tượng Không có không có phương thức append () để làm việc với đó là lý do tại sao nó ném một AttributeError.

Khi bạn thấy một dấu vết như trên trong mã của mình, hãy tìm thuộc tính đầu tiên gây ra lỗi. Ở đây, nó là một phương thức append (). Từ đó, bạn sẽ thấy đối tượng mà bạn đã cố gắng gọi nó. Cuối cùng, tìm ra cách đối tượng đó trở thành Không có và thực hiện các bước cần thiết để sửa mã của bạn.

Sự kết luận

Không có gì trong Python là một từ khóa bất biến và là công cụ mạnh mẽ như ĐÚNG VẬY hoặc Sai. Không ai có thể được kiểm tra bằng cách sử dụng trong hoặc không trong các toán tử. Trong theo dõi lại, Không có gì có thể hữu ích để tìm ra vấn đề chính xác và chúng tôi có thể khắc phục nó bằng cách giải quyết vấn đề Null. Chỉ có thể có một Không có trong bất kỳ chương trình Python nào và ngay cả khi bạn tạo một thể hiện của lớp NoneType, chỉ có thể có một Không có.

Cuối cùng, Python Null hoặc None Ví dụ kết thúc.

Bài viết được đề xuất

Toán tử không bằng trong Python

Giá trị tuyệt đối trong Python

Python sqrt ()

Python stddev ()

Phương sai Python ()