Hướng dẫn write a function which check if provided variable is a valid python variable - viết một hàm kiểm tra xem biến được cung cấp có phải là biến python hợp lệ không

Trong Python 3, như trên, bạn chỉ có thể sử dụng

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
5. Nhưng trong Python 2, điều này không tồn tại.

Mô -đun

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
6 có regex cho tên (định danh):
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
7. Nhưng tôi không thể tìm thấy bất kỳ tài liệu nào cho nó, vì vậy nó có thể không có sẵn ở mọi nơi. Nó chỉ đơn giản là
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
8. Một
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
9 sau khi nó cho phép bạn kiểm tra chuỗi với
>>> n = 1000
>>> print(n)
1000
>>> n
1000
0.

Các tài liệu nói rằng một định danh được xác định bởi ngữ pháp này:

identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"

Tương đương với regex ở trên. Nhưng chúng ta vẫn nên nhập

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
7 trong trường hợp điều này từng thay đổi. (Điều này rất khó xảy ra, nhưng có lẽ trong các phiên bản cũ của Python thì khác?)

Và để lọc các từ khóa, như

>>> n = 1000
>>> print(n)
1000
>>> n
1000
2,
>>> n = 1000
>>> print(n)
1000
>>> n
1000
3 và
>>> n = 1000
>>> print(n)
1000
>>> n
1000
4, sử dụng
>>> n = 1000
>>> print(n)
1000
>>> n
1000
5. Có một cảnh báo:
>>> n = 1000
>>> print(n)
1000
>>> n
1000
6 không phải là từ khóa trong Python 2, nhưng vẫn không thể được gán. (
>>> n = 1000
>>> print(n)
1000
>>> n
1000
7 trong Python 2 là
>>> n = 1000
>>> print(n)
1000
>>> n
1000
8).

So:

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: các biến trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Variables in Python

Trong hướng dẫn trước đây về các loại dữ liệu cơ bản trong Python, bạn có thể thấy các giá trị của các loại dữ liệu Python khác nhau có thể được tạo ra như thế nào. Nhưng cho đến nay, tất cả các giá trị được hiển thị là các giá trị theo nghĩa đen hoặc không đổi:

Nếu bạn viết mã phức tạp hơn, chương trình của bạn sẽ cần dữ liệu có thể thay đổi khi tiến hành thực hiện chương trình.

Ở đây, những gì bạn sẽ học được trong hướng dẫn này: Bạn sẽ tìm hiểu làm thế nào mọi mục dữ liệu trong chương trình Python có thể được mô tả bởi đối tượng thuật ngữ trừu tượng và bạn sẽ học cách thao tác các đối tượng bằng cách sử dụng các tên biểu tượng gọi là biến. You will learn how every item of data in a Python program can be described by the abstract term object, and you’ll learn how to manipulate objects using symbolic names called variables.

Gán biến

Hãy nghĩ về một biến như một tên được gắn vào một đối tượng cụ thể. Trong Python, các biến không cần phải được khai báo hoặc xác định trước, như trường hợp trong nhiều ngôn ngữ lập trình khác. Để tạo một biến, bạn chỉ cần gán cho nó một giá trị và sau đó bắt đầu sử dụng nó. Bài tập được thực hiện với một dấu bằng duy nhất (

>>> n = 1000
>>> print(n)
1000
>>> n
1000
9):

Điều này được đọc hoặc hiểu là ____

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 được gán giá trị
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1. Khi điều này được thực hiện,
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 có thể được sử dụng trong một câu lệnh hoặc biểu thức và giá trị của nó sẽ được thay thế:

Cũng như một giá trị theo nghĩa đen có thể được hiển thị trực tiếp từ dấu nhắc của trình thông dịch trong một phiên thay thế mà không cần

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
3, do đó, một biến có thể:

Sau đó, nếu bạn thay đổi giá trị của

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 và sử dụng lại, giá trị mới sẽ được thay thế thay thế:

>>>

>>> n = 1000
>>> print(n)
1000
>>> n
1000

Python cũng cho phép gán chuỗi, điều này có thể gán cùng một giá trị cho một số biến đồng thời:

>>>

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300

Python cũng cho phép gán chuỗi, điều này có thể gán cùng một giá trị cho một số biến đồng thời:

Việc gán chuỗi ở trên gán >>> a = b = c = 300 >>> print(a, b, c) 300 300 300 1 cho các biến >>> a = b = c = 300 >>> print(a, b, c) 300 300 300 6, >>> a = b = c = 300 >>> print(a, b, c) 300 300 300 7 và >>> a = b = c = 300 >>> print(a, b, c) 300 300 300 8 đồng thời.

Các loại biến trong Python

Trong nhiều ngôn ngữ lập trình, các biến được gõ tĩnh. Điều đó có nghĩa là một biến ban đầu được tuyên bố là có một loại dữ liệu cụ thể và bất kỳ giá trị nào được gán cho nó trong suốt vòng đời của nó phải luôn có loại đó.

>>>

>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string

Python cũng cho phép gán chuỗi, điều này có thể gán cùng một giá trị cho một số biến đồng thời:

Việc gán chuỗi ở trên gán

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1 cho các biến
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
6,
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
7 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
8 đồng thời.

Các loại biến trong Python

Trong nhiều ngôn ngữ lập trình, các biến được gõ tĩnh. Điều đó có nghĩa là một biến ban đầu được tuyên bố là có một loại dữ liệu cụ thể và bất kỳ giá trị nào được gán cho nó trong suốt vòng đời của nó phải luôn có loại đó.

Các biến trong Python không phải chịu sự hạn chế này. Trong Python, một biến có thể được gán một giá trị của một loại và sau đó được gán lại một giá trị của một loại khác:

  • Tài liệu tham khảo đối tượng
  • Điều gì đang thực sự xảy ra khi bạn thực hiện một bài tập biến? Đây là một câu hỏi quan trọng trong Python, bởi vì câu trả lời khác nhau phần nào so với những gì bạn tìm thấy trong nhiều ngôn ngữ lập trình khác.
  • Python là một ngôn ngữ hướng đối tượng cao. Trên thực tế, hầu như mọi mục dữ liệu trong chương trình Python là một đối tượng của một loại hoặc lớp cụ thể. (Điểm này sẽ được nhắc lại nhiều lần trong suốt các hướng dẫn này.)

Xem xét mã này:

>>>

>>> type(300)

Python cũng cho phép gán chuỗi, điều này có thể gán cùng một giá trị cho một số biến đồng thời:

Việc gán chuỗi ở trên gán

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1 cho các biến
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
6,
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
7 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
8 đồng thời.

Các loại biến trong Python

Hướng dẫn write a function which check if provided variable is a valid python variable - viết một hàm kiểm tra xem biến được cung cấp có phải là biến python hợp lệ không
Gán biến

Hãy nghĩ về một biến như một tên được gắn vào một đối tượng cụ thể. Trong Python, các biến không cần phải được khai báo hoặc xác định trước, như trường hợp trong nhiều ngôn ngữ lập trình khác. Để tạo một biến, bạn chỉ cần gán cho nó một giá trị và sau đó bắt đầu sử dụng nó. Bài tập được thực hiện với một dấu bằng duy nhất (

>>> n = 1000
>>> print(n)
1000
>>> n
1000
9):

>>>

Python cũng cho phép gán chuỗi, điều này có thể gán cùng một giá trị cho một số biến đồng thời:

Việc gán chuỗi ở trên gán

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1 cho các biến
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
6,
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
7 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
8 đồng thời.

Các loại biến trong Python

Hướng dẫn write a function which check if provided variable is a valid python variable - viết một hàm kiểm tra xem biến được cung cấp có phải là biến python hợp lệ không
Trong nhiều ngôn ngữ lập trình, các biến được gõ tĩnh. Điều đó có nghĩa là một biến ban đầu được tuyên bố là có một loại dữ liệu cụ thể và bất kỳ giá trị nào được gán cho nó trong suốt vòng đời của nó phải luôn có loại đó.

Các biến trong Python không phải chịu sự hạn chế này. Trong Python, một biến có thể được gán một giá trị của một loại và sau đó được gán lại một giá trị của một loại khác:

Tài liệu tham khảo đối tượng

Hướng dẫn write a function which check if provided variable is a valid python variable - viết một hàm kiểm tra xem biến được cung cấp có phải là biến python hợp lệ không
Điều gì đang thực sự xảy ra khi bạn thực hiện một bài tập biến? Đây là một câu hỏi quan trọng trong Python, bởi vì câu trả lời khác nhau phần nào so với những gì bạn tìm thấy trong nhiều ngôn ngữ lập trình khác.

Python là một ngôn ngữ hướng đối tượng cao. Trên thực tế, hầu như mọi mục dữ liệu trong chương trình Python là một đối tượng của một loại hoặc lớp cụ thể. (Điểm này sẽ được nhắc lại nhiều lần trong suốt các hướng dẫn này.)

Xem xét mã này:

Hướng dẫn write a function which check if provided variable is a valid python variable - viết một hàm kiểm tra xem biến được cung cấp có phải là biến python hợp lệ không
Đối tượng mồ côi

Không còn bất kỳ tham chiếu nào đến đối tượng số nguyên

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1. Nó là mồ côi, và không có cách nào để truy cập nó.

Hướng dẫn trong loạt bài này đôi khi sẽ đề cập đến tuổi thọ của một đối tượng. Một cuộc sống của đối tượng bắt đầu khi nó được tạo ra, tại thời điểm đó, ít nhất một tham chiếu đến nó được tạo ra. Trong một thời gian tồn tại của một đối tượng, các tài liệu tham khảo bổ sung có thể được tạo, như bạn đã thấy ở trên và các tài liệu tham khảo về nó cũng có thể bị xóa. Một đối tượng vẫn sống, vì nó đã được, miễn là có ít nhất một tham chiếu đến nó.

Khi số lượng tham chiếu đến một đối tượng giảm xuống 0, nó không còn có thể truy cập được nữa. Tại thời điểm đó, cuộc sống của nó đã kết thúc. Python cuối cùng sẽ nhận thấy rằng nó không thể truy cập được và đòi lại bộ nhớ được phân bổ để nó có thể được sử dụng cho một thứ khác. Trong biệt ngữ máy tính, quá trình này được gọi là bộ sưu tập rác.

Nhận dạng đối tượng

Trong Python, mọi đối tượng được tạo ra đều được đưa ra một số xác định duy nhất nó. Người ta đảm bảo rằng không có hai đối tượng nào sẽ có cùng một định danh trong bất kỳ khoảng thời gian nào trong đó tuổi thọ của chúng chồng chéo. Khi số lượng tham chiếu của một đối tượng giảm xuống 0 và nó được thu thập rác, như đã xảy ra với đối tượng

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1 ở trên, thì số nhận dạng của nó sẽ có sẵn và có thể được sử dụng lại.

Hàm Python tích hợp

>>> type(300)

3 trả về một định danh số nguyên của đối tượng. Sử dụng hàm
>>> type(300)

3, bạn có thể xác minh rằng hai biến thực sự chỉ vào cùng một đối tượng:

>>>

>>> n = 300
>>> m = n
>>> id(n)
60127840
>>> id(m)
60127840

>>> m = 400
>>> id(m)
60127872

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

Diễn lặn sâu: Bộ nhớ đệm các giá trị số nguyên nhỏ

Từ những gì bạn biết bây giờ về gán biến và tham chiếu đối tượng trong Python, những điều sau đây có lẽ đã giành được sự ngạc nhiên của bạn:

>>>

>>> m = 300
>>> n = 300
>>> id(m)
60062304
>>> id(n)
60062896

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

Diễn lặn sâu: Bộ nhớ đệm các giá trị số nguyên nhỏ

>>>

>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

Diễn lặn sâu: Bộ nhớ đệm các giá trị số nguyên nhỏ

Từ những gì bạn biết bây giờ về gán biến và tham chiếu đối tượng trong Python, những điều sau đây có lẽ đã giành được sự ngạc nhiên của bạn:

Với câu lệnh

>>> print(n)
300
>>> type(n)

4, Python tạo ra một đối tượng số nguyên với giá trị
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
1 và đặt
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 làm tài liệu tham khảo cho nó.
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 sau đó được gán tương tự cho một đối tượng số nguyên có giá trị ________ 31, nhưng không phải là cùng một đối tượng. Do đó, chúng có các danh tính khác nhau, mà bạn có thể xác minh từ các giá trị được trả về bởi
>>> type(300)

3.

Nhưng hãy xem xét điều này:

Ở đây,

>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 được gán riêng cho các đối tượng số nguyên có giá trị
>>> n = 300
>>> m = n
>>> id(n)
60127840
>>> id(m)
60127840

>>> m = 400
>>> id(m)
60127872
2. Nhưng trong trường hợp này,
>>> type(300)

8 và
>>> type(300)

9 là giống hệt nhau!

>>>

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
0

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

>>>

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
1

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

>>>

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
2

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

Diễn lặn sâu: Bộ nhớ đệm các giá trị số nguyên nhỏ

>>>

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
3

Sau khi gán

>>> type(300)

5,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 đều chỉ vào cùng một đối tượng, được xác nhận bởi thực tế là
>>> type(300)

8 và
>>> type(300)

9 trả về cùng một số. Sau khi
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 được gán lại thành
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
7,
>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
5 và
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
0 chỉ vào các đối tượng khác nhau với các danh tính khác nhau.

Diễn lặn sâu: Bộ nhớ đệm các giá trị số nguyên nhỏ

  • Trường hợp lạc đà: Các từ thứ hai và các từ tiếp theo được viết hoa, để làm cho ranh giới từ dễ dàng nhìn thấy hơn. . Second and subsequent words are capitalized, to make word boundaries easier to see. (Presumably, it struck someone at some point that the capital letters strewn throughout the variable name vaguely resemble camel humps.)
    • Ví dụ:
      >>> m = 300
      >>> n = 300
      >>> id(m)
      60062304
      >>> id(n)
      60062896
      
      7
  • Trường hợp Pascal: giống hệt với trường hợp lạc đà, ngoại trừ từ đầu tiên cũng được viết hoa. Identical to Camel Case, except the first word is also capitalized.
    • Ví dụ:
      >>> m = 300
      >>> n = 300
      >>> id(m)
      60062304
      >>> id(n)
      60062896
      
      8
  • Trường hợp rắn: Các từ được phân tách bằng dấu gạch dưới. Words are separated by underscores.
    • Ví dụ:
      >>> m = 300
      >>> n = 300
      >>> id(m)
      60062304
      >>> id(n)
      60062896
      
      9

Các lập trình viên tranh luận nóng bỏng, với sự nhiệt thành đáng ngạc nhiên, điều này là thích hợp hơn. Những lý lẽ tốt có thể được thực hiện cho tất cả chúng. Sử dụng bất kỳ ai trong ba người là hấp dẫn trực quan nhất đối với bạn. Chọn một và sử dụng nó một cách nhất quán.

Sau đó, bạn sẽ thấy rằng các biến không phải là những thứ duy nhất có thể được đặt tên. Bạn cũng có thể đặt tên cho các chức năng, lớp học, mô -đun, v.v. Các quy tắc áp dụng cho các tên biến cũng áp dụng cho các định danh, thuật ngữ chung hơn cho các tên được đặt cho các đối tượng chương trình.

Hướng dẫn kiểu cho mã Python, còn được gọi là PEP 8, chứa các quy ước đặt tên danh sách các tiêu chuẩn được đề xuất cho tên của các loại đối tượng khác nhau. PEP 8 bao gồm các khuyến nghị sau:PEP 8, contains Naming Conventions that list suggested standards for names of different object types. PEP 8 includes the following recommendations:

  • Trường hợp rắn nên được sử dụng cho các chức năng và tên biến.
  • Trường hợp Pascal nên được sử dụng cho tên lớp. (PEP 8 đề cập đến điều này là quy ước của Cap Capwords.)

Từ dành riêng (từ khóa)

Có thêm một hạn chế về tên định danh. Ngôn ngữ Python dành một bộ nhỏ các từ khóa chỉ định chức năng ngôn ngữ đặc biệt. Không có đối tượng nào có thể có cùng tên với một từ dành riêng.

Trong Python 3.6, có 33 từ khóa dành riêng:

Pythonkeywords
Keywords
   
>>> n = 1000
>>> print(n)
1000
>>> n
1000
8
>>> n = 1000
>>> print(n)
1000
>>> n
1000
3
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
2
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
3
>>> n = 1000
>>> print(n)
1000
>>> n
1000
6
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
5
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
6
>>> n = 1000
>>> print(n)
1000
>>> n
1000
4
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
8
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
9
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
00
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
01
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
02
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
03
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
04
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
05
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
06
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
07
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
08
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
09
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
10
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
11
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
12
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
13
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
14
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
15
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
16
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
17
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
18
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
19
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
20
import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
21
>>> n = 1000
>>> print(n)
1000
>>> n
1000
2

Bạn có thể thấy danh sách này bất cứ lúc nào bằng cách nhập

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
23 vào trình thông dịch Python. Các từ dành riêng là nhạy cảm trường hợp và phải được sử dụng chính xác như được hiển thị. Tất cả đều hoàn toàn viết thường, ngoại trừ
>>> n = 1000
>>> print(n)
1000
>>> n
1000
8,
>>> n = 1000
>>> print(n)
1000
>>> n
1000
6 và
>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120
8.

Cố gắng tạo một biến có cùng tên với bất kỳ từ dành riêng nào dẫn đến một lỗi:

>>>

import keyword

if hasattr(str, 'isidentifier'):
    _isidentifier = str.isidentifier
else:
    import re
    _fallback_pattern = '[a-zA-Z_][a-zA-Z0-9_]*'
    try:
        import tokenize
    except ImportError:
        _isidentifier = re.compile(_fallback_pattern + '$').match
    else:
        _isidentifier = re.compile(
            getattr(tokenize, 'Name', _fallback_pattern) + '$'
        ).match

    del _fallback_pattern


def isname(s):
    return bool(_isidentifier(s)) and not keyword.iskeyword(s) and s != 'None'
4

Sự kết luận

Hướng dẫn này bao gồm những điều cơ bản của các biến Python, bao gồm các tài liệu tham khảo và bản sắc đối tượng, và đặt tên của số nhận dạng python.variables, including object references and identity, and naming of Python identifiers.

Bây giờ bạn có một sự hiểu biết tốt về một số loại dữ liệu Python và biết cách tạo các biến mà các đối tượng tham chiếu của các loại đó.

Tiếp theo, bạn sẽ thấy cách kết hợp các đối tượng dữ liệu thành các biểu thức liên quan đến các hoạt động khác nhau.expressions involving various operations.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: các biến trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Variables in Python

Cái nào là biến Python hợp lệ?

Các quy tắc cho các biến Python: Một tên biến phải bắt đầu bằng một chữ cái hoặc ký tự dấu gạch dưới.Một tên biến không thể bắt đầu với một số.Một tên biến chỉ có thể chứa các ký tự alpha-numeric và nhấn mạnh (A-Z, 0-9 và _)A variable name must start with a letter or the underscore character. A variable name cannot start with a number. A variable name can only contain alpha-numeric characters and underscores (A-z, 0-9, and _ )

Làm thế nào kiểm tra loại biến trong nếu điều kiện python?

Python có hàm tích hợp gọi là loại () giúp bạn tìm loại lớp của biến được đưa ra làm đầu vào.Python có một hàm tích hợp gọi là isInstance () so sánh giá trị với loại đã cho.Nếu giá trị và loại đã cho phù hợp, nó sẽ trả về đúng sai.type() that helps you find the class type of the variable given as input. Python has a built-in function called isinstance() that compares the value with the type given. If the value and type given matches it will return true otherwise false.