Các hàm tích hợp sẵn

Trình thông dịch Python có sẵn một số hàm và kiểu dữ liệu tichs hợp sẵn luôn có thể sử dụng được. Chúng được liệt kê dưới đây theo thứ tự bảng chữ cái.

Các hàm tích hợp sẵn

abs(number, /)

Trả về giá trị tuyệt đối của một số. Đối số có thể là một số nguyên, một số thực dấu phẩy động hoặc một đối tượng thực thi phương thức __abs__(). Nếu đối số là một số phức, mô-đun của nó sẽ được trả về.

aiter(async_iterable, /)

Trả về một asynchronous iterator cho một asynchronous iterable. Tương đương với việc gọi x.__aiter__().

Lưu ý: Không giống như iter(), aiter() không có biến thể 2 đối số.

Added in version 3.10.

all(iterable, /)

Trả về True nếu tất cả các phần tử của iterable đều đúng (hoặc nếu iterable trống). Tương đương với:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
awaitable anext(async_iterator, /)
awaitable anext(async_iterator, default, /)

Khi được await, trả về mục tiếp theo từ asynchronous iterator đã cho, hoặc trả về default nếu được cung cấp và trình lặp đã hết phần tử.

Đây là biến thể không đồng bộ của hàm có sẵn next(), và có cách hoạt động tương tự.

Hàm này gọi phương thức __anext__() của async_iterator và trả về một awaitable. Việc await đối tượng này sẽ trả về giá trị tiếp theo của trình lặp. Nếu tham số default được cung cấp, giá trị đó sẽ được trả về khi trình lặp kết thúc; ngược lại, ngoại lệ StopAsyncIteration sẽ được kích hoạt.

Added in version 3.10.

any(iterable, /)

Trả về True nếu bất kỳ phần tử nào của iterable là true. Nếu iterable trống, trả về False. Tương đương với:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
ascii(object, /)

Tương tự như repr(), hàm này trả về một chuỗi chứa biểu diễn có thể in được của một đối tượng, nhưng các ký tự non-ASCII trong chuỗi do repr() trả về sẽ được escape bằng các ký tự thoát \x, \u, hoặc \U. Việc này tạo ra một chuỗi tương tự như kết quả trả về của repr() trong Python 2.

bin(integer, /)

Chuyển đổi một số nguyên thành một chuỗi nhị phân có tiền tố "0b". Kết quả trả về là một biểu thức Python hợp lệ. Nếu integer không phải là một đối tượng int của Python, nó phải định nghĩa phương thức __index__() để trả về một số nguyên. Một số ví dụ:

>>> bin(3)
'0b11'
>>> bin(-10)
'-0b1010'

Nếu muốn có hoặc không có tiền tố "0b", bạn có thể sử dụng một trong các cách sau đây.

>>> format(14, '#b'), format(14, 'b')
('0b1110', '1110')
>>> f'{14:#b}', f'{14:b}'
('0b1110', '1110')

Tham khảo thêm enum.bin() để biểu diễn các giá trị âm dưới dạng số bù hai.

Tham khảo thêm format() để biết thêm thông tin chi tiết.

class bool(object=False, /)

Trả về một giá trị Boolean, tức là True hoặc False. Tham số được chuyển đổi bằng cách sử dụng quy trình kiểm tra tính đúng sai tiêu chuẩn. Nếu tham số là false hoặc bị lược bỏ, hàm này trả về False; ngược lại, nó trả về True. Lớp bool là một lớp con của int (xem Numeric Types --- int, float, complex). Nó không thể được kế thừa thêm. Các thực thể duy nhất của nó là FalseTrue (xem Boolean Type - bool).

Thay đổi trong phiên bản 3.7: Tham số hiện tại chỉ có thể truyền theo vị trí.

breakpoint(*args, **kws)

Hàm này đưa bạn vào trình gỡ lỗi tại vị trí gọi hàm. Cụ thể, nó gọi sys.breakpointhook(), truyền trực tiếp các tham số argskws. Theo mặc định, sys.breakpointhook() gọi pdb.set_trace() mà không cần đối số. Trong trường hợp này, đây thuần túy là một hàm tiện ích để bạn không cần phải pdb một cách tường minh hoặc viết nhiều mã để vào trình gỡ lỗi. Tuy nhiên, sys.breakpointhook() có thể được thiết lập thành một hàm khác và breakpoint() sẽ tự động gọi hàm đó, cho phép bạn sử dụng trình gỡ lỗi tùy chọn. Nếu không thể truy cập sys.breakpointhook(), hàm này sẽ kích hoạt ngoại lệ RuntimeError.

Theo mặc định, hành vi của breakpoint() có thể được thay đổi bằng biến môi trường PYTHONBREAKPOINT. Xem sys.breakpointhook() để biết chi tiết cách sử dụng.

Lưu ý rằng điều này không được đảm bảo nếu sys.breakpointhook() đã bị thay thế.

Kích hoạt một auditing event builtins.breakpoint với đối số breakpointhook.

Added in version 3.7.

class bytearray(source=b'')
class bytearray(source, encoding, errors='strict')

Trả về một mảng byte mới. Lớp bytearray là một chuỗi thay đổi được gồm các số nguyên trong khoảng 0 <= x < 256. Nó có hầu hết các phương thức thông thường của các chuỗi thay đổi được, được mô tả trong Mutable Sequence Types, cũng như hầu hết các phương thức của kiểu bytes, xem Bytes and Bytearray Operations.

Tham số tùy chọn source có thể được sử dụng để khởi tạo mảng theo một vài cách khác nhau:

  • Nếu đó là một chuỗi, bạn cũng phải cung cấp tham số encoding (và tùy chọn là errors); sau đó bytearray() sẽ chuyển đổi chuỗi thành các byte bằng phương thức str.encode().

  • Nếu đó là một số nguyên, mảng sẽ có kích thước tương ứng và được khởi tạo bằng các byte null.

  • Nếu đó là một đối tượng tuân thủ buffer interface, một bộ đệm chỉ đọc của đối tượng đó sẽ được sử dụng để khởi tạo mảng byte.

  • Nếu đó là một iterable, nó phải là một tập lặp gồm các số nguyên trong khoảng 0 <= x < 256, được dùng làm nội dung ban đầu của mảng.

Nếu không có đối số, một mảng có kích thước bằng 0 sẽ được tạo ra.

Tham khảo thêm Binary Sequence Types --- bytes, bytearray, memoryviewBytearray Objects.

class bytes(source=b'')
class bytes(source, encoding, errors='strict')

Trả về một đối tượng "bytes" mới, là một chuỗi không thay đổi được gồm các số nguyên trong khoảng 0 <= x < 256. bytes là phiên bản không thay đổi được của bytearray -- nó có các phương thức không gây biến đổi tương tự, cũng như hành vi lập chỉ mục và lát cắt tương đương.

Theo đó, các đối số của hàm khởi tạo được diễn giải tương tự như đối với bytearray().

Đối tượng Bytes cũng có thể được tạo bằng các hằng văn bản, xem String and Bytes literals.

Tham khảo thêm Binary Sequence Types --- bytes, bytearray, memoryview, Bytes Objects, và Bytes and Bytearray Operations.

callable(object, /)

Trả về True nếu đối số object có khả năng gọi được, ngược lại trả về False. Nếu hàm này trả về True, việc gọi đối tượng vẫn có thể thất bại, nhưng nếu là False, việc gọi object chắc chắn sẽ không thành công. Lưu ý rằng các lớp có thể gọi được (gọi một lớp sẽ trả về một thực thể mới); các thực thể có thể gọi được nếu lớp của chúng có phương thức __call__().

Added in version 3.2: Hàm này lần đầu bị loại bỏ trong phiên bản Python 3.0 và sau đó được đưa trở lại trong Python 3.2.

chr(codepoint, /)

Trả về chuỗi đại diện cho một ký tự với mã Unicode được chỉ định. Ví dụ, chr(97) trả về chuỗi 'a', trong khi chr(8364) trả về chuỗi '€'. Đây là hàm nghịch đảo của ord().

Phạm vi hợp lệ cho đối số là từ 0 đến 1.114.111 (0x10FFFF trong hệ cơ số 16). Ngoại lệ ValueError sẽ được kích hoạt nếu đối số nằm ngoài phạm vi đó.

@classmethod

Chuyển đổi một phương thức thành một phương thức lớp.

Một phương thức lớp nhận lớp làm đối số đầu tiên một cách ngầm định, giống như cách một phương thức thực thể nhận thực thể đó. Để khai báo một phương thức lớp, hãy sử dụng cấu trúc sau:

class C:
    @classmethod
    def f(cls, arg1, arg2): ...

Dạng @classmethod là một hàm decorator -- xem Function definitions để biết thêm chi tiết.

Một phương thức lớp có thể được gọi trên lớp (chẳng hạn như C.f()) hoặc trên một thực thể (chẳng hạn như C().f()). Thực thể đó sẽ bị bỏ qua, ngoại trừ lớp của nó. Nếu một phương thức lớp được gọi từ một lớp dẫn xuất, đối tượng lớp dẫn xuất đó sẽ được truyền vào làm đối số đầu tiên ngầm định.

Phương thức lớp khác với các phương thức tĩnh trong C++ hoặc Java. Nếu bạn muốn sử dụng chúng, hãy xem staticmethod() trong phần này. Để biết thêm thông tin về các phương thức lớp, hãy xem The standard type hierarchy.

Thay đổi trong phiên bản 3.9: Các phương thức lớp hiện tại đã có thể bọc các descriptors khác như property().

Thay đổi trong phiên bản 3.10: Các phương thức lớp hiện tại sẽ kế thừa các thuộc tính của phương thức (__module__, __name__, __qualname__, __doc__ và :__annotations__) và có thêm thuộc tính __wrapped__ mới.

Deprecated since version 3.11, removed in version 3.13: Các phương thức lớp không còn có thể bọc các descriptors khác như property().

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1, *, module=None)

Biên dịch source thành một đối tượng mã hoặc đối tượng AST. Các đối tượng mã có thể được thực thi bằng hàm exec() hoặc eval(). source có thể là một chuỗi thông thường, một chuỗi byte, hoặc một đối tượng AST. Tham khảo tài liệu của mô-đun ast để biết thông tin về cách làm việc với các đối tượng AST.

Đối số filename nên cung cấp tên tệp nơi mã nguồn được đọc; hãy truyền một giá trị có thể nhận diện được nếu mã không được đọc từ tệp ('<string>' thường được sử dụng).

Đối số mode chỉ định loại mã cần được biên dịch; nó có thể là 'exec' nếu source bao gồm một chuỗi các câu lệnh, 'eval' nếu bao gồm một biểu thức đơn lẻ, hoặc 'single' nếu bao gồm một câu lệnh tương tác đơn lẻ (trong trường hợp sau cùng, các câu lệnh biểu thức có kết quả khác None sẽ được in ra).

Các đối số tùy chọn flagsdont_inherit kiểm soát các compiler options nào sẽ được kích hoạt và các future features nào sẽ được cho phép. Nếu không có đối số nào (hoặc cả hai đều bằng 0), mã sẽ được biên dịch với cùng các flag có hiệu lực đối với mã đang gọi compile(). Nếu đối số flags được cung cấp và dont_inherit không (hoặc bằng 0), thì các tùy chọn trình biên dịch và các câu lệnh future được chỉ định bởi đối số flags sẽ được sử dụng bổ sung cho những tùy chọn vốn đã được sử dụng. Nếu dont_inherit là một số nguyên khác 0, thì đối số flags chính là tất cả — các flag (future features và compiler options) trong mã bao quanh sẽ bị bỏ qua.

Các tùy chọn trình biên dịch và câu lệnh future được chỉ định bởi các bit có thể được thực hiện phép toán OR bitwise với nhau để xác định nhiều tùy chọn. Trường bit cần thiết để chỉ định một tính năng future nhất định có thể được tìm thấy tại thuộc tính compiler_flag trên thực thể _Feature trong mô-đun __future__. Các Compiler flags có thể được tìm thấy trong mô-đun ast, với tiền tố PyCF_.

Đối số optimize chỉ định mức độ tối ưu hóa của trình biên dịch; giá trị mặc định là -1 sẽ chọn mức độ tối ưu hóa của trình thông dịch theo các tùy chọn -O. Các mức độ cụ thể bao gồm 0 (không tối ưu hóa; __debug__ là true), 1 (các câu lệnh assert bị loại bỏ, __debug__ là false) hoặc 2 (loại bỏ cả docstrings).

Đối số tùy chọn module chỉ định tên mô-đun. Nó cần thiết để loại bỏ sự mơ hồ khi lọc các cảnh báo cú pháp theo tên mô-đun.

Hàm này sẽ kích hoạt ngoại lệ SyntaxError hoặc ValueError nếu nguồn được biên dịch không hợp lệ.

Nếu bạn muốn phân tích mã nguồn Python thành biểu diễn AST của nó, hãy tham khảo ast.parse().

Kích hoạt một auditing event compile với các đối số sourcefilename. Sự kiện này cũng có thể được kích hoạt bởi quá trình biên dịch ngầm định.

Ghi chú

Khi biên dịch một chuỗi chứa mã nhiều dòng ở chế độ 'single' hoặc 'eval', dữ liệu nhập vào phải được kết thúc bằng ít nhất một ký tự dòng mới. Điều này nhằm tạo điều kiện thuận lợi cho việc phát hiện các câu lệnh chưa hoàn thành và đã hoàn thành trong mô-đun code.

Cảnh báo

Có khả năng làm treo trình thông dịch Python với một chuỗi đủ lớn hoặc phức tạp khi biên dịch sang đối tượng AST do các giới hạn về độ sâu của ngăn xếp trong trình biên dịch AST của Python.

Thay đổi trong phiên bản 3.2: Cho phép sử dụng các ký tự dòng mới của Windows và Mac. Ngoài ra, dữ liệu nhập vào ở chế độ 'exec' không còn bắt buộc phải kết thúc bằng một dòng mới. Đã thêm tham số optimize.

Thay đổi trong phiên bản 3.5: Trước đây, ngoại lệ TypeError sẽ được kích hoạt khi gặp các byte null trong source.

Added in version 3.8: Hiện tại có thể truyền ast.PyCF_ALLOW_TOP_LEVEL_AWAIT vào flags để cho phép hỗ trợ await, async for, và async with ở cấp độ cao nhất.

Added in version 3.15: Bổ sung tham số module.

class complex(number=0, /)
class complex(string, /)
class complex(real=0, imag=0)

Chuyển đổi một chuỗi hoặc một số đơn lẻ thành số phức, hoặc tạo một số phức từ phần thực và phần ảo.

Ví dụ:

>>> complex('+1.23')
(1.23+0j)
>>> complex('-4.5j')
-4.5j
>>> complex('-1.23+4.5j')
(-1.23+4.5j)
>>> complex('\t( -1.23+4.5J )\n')
(-1.23+4.5j)
>>> complex('-Infinity+NaNj')
(-inf+nanj)
>>> complex(1.23)
(1.23+0j)
>>> complex(imag=-4.5)
-4.5j
>>> complex(-1.23, 4.5)
(-1.23+4.5j)

Nếu đối số là một chuỗi, nó phải chứa phần thực (cùng định dạng với hàm float()) hoặc phần ảo (cùng định dạng nhưng có hậu tố 'j' hoặc 'J'), hoặc cả hai phần thực và ảo (trong trường hợp này, dấu của phần ảo là bắt buộc). Chuỗi có thể được bao quanh bởi các khoảng trắng và dấu ngoặc đơn '('')' tùy chọn, những ký tự này sẽ bị bỏ qua. Chuỗi không được chứa khoảng trắng giữa dấu '+', '-', hậu tố 'j' hoặc 'J' và số thập phân. Ví dụ: complex('1+2j') là hợp lệ, nhưng complex('1 + 2j') sẽ kích hoạt ngoại lệ ValueError. Chính xác hơn, dữ liệu nhập vào phải tuân thủ quy tắc sản xuất complexvalue trong ngữ pháp sau đây, sau khi các dấu ngoặc đơn và các ký tự khoảng trắng ở đầu và cuối đã được loại bỏ:

complexvalue: floatvalue |
              floatvalue ("j" | "J") |
              floatvalue sign absfloatvalue ("j" | "J")

Nếu đối số là một số, hàm khởi tạo đóng vai trò như một phép chuyển đổi số tương tự intfloat. Đối với một đối tượng Python x tổng quát, complex(x) sẽ ủy quyền cho phương thức x.__complex__(). Nếu __complex__() không được định nghĩa, nó sẽ chuyển sang sử dụng __float__() Nếu __float__() không được định nghĩa, nó sẽ chuyển sang sử dụng __index__().

Nếu hai đối số được cung cấp hoặc sử dụng các đối số từ khóa, mỗi đối số có thể là bất kỳ kiểu số nào (bao gồm cả số phức). Nếu cả hai đối số đều là số thực, trả về một số phức với phần thực là real và phần ảo là imag. Nếu cả hai đối số đều là số phức, trả về một số phức với phần thực là real.real-imag.imag và phần ảo là real.imag+imag.real. Nếu một trong các đối số là số thực, chỉ phần thực của nó được sử dụng trong các biểu thức trên.

Tham khảo thêm complex.from_number(), phương thức này chỉ chấp nhận một đối số dạng số duy nhất.

Nếu tất cả đối số bị lược bỏ, hàm trả về 0j.

Kiểu số phức được mô tả trong Numeric Types --- int, float, complex.

Thay đổi trong phiên bản 3.6: Cho phép nhóm các chữ số bằng dấu gạch dưới giống như trong các hằng văn bản của mã nguồn.

Thay đổi trong phiên bản 3.8: Chuyển sang sử dụng __index__() nếu __complex__()__float__() không được định nghĩa.

Sắp loại bỏ từ phiên bản 3.14: Việc truyền một số phức làm đối số real hoặc imag hiện đã bị ngừng hỗ trợ; nó chỉ nên được truyền dưới dạng một đối số vị trí duy nhất.

delattr(object, name, /)

Đây là một hàm liên quan đến setattr(). Các đối số bao gồm một đối tượng và một chuỗi. Chuỗi này phải là tên một trong các thuộc tính của đối tượng. Hàm này xóa thuộc tính đã nêu, với điều kiện đối tượng đó cho phép. Ví dụ, delattr(x, 'foobar') tương đương với del x.foobar. name không nhất thiết phải là một mã định danh Python (xem setattr()).

class dict(**kwargs)
class dict(mapping, /, **kwargs)
class dict(iterable, /, **kwargs)

Tạo một từ điển mới. Lớp dict là lớp từ điển. Xem thêm Mapping types --- dict, frozendict để biết tài liệu về lớp này.

Đối với các loại container khác, hãy tham khảo các lớp tích hợp sẵn như frozendict, list, set, và tuple, cũng như mô-đun collections.

dir()
dir(object, /)

Nếu không có đối số, hàm trả về danh sách các tên trong phạm vi cục bộ hiện tại. Nếu có đối số, hàm cố gắng trả về một danh sách các thuộc tính hợp lệ của đối tượng đó.

Nếu đối tượng có một phương thức tên là __dir__(), phương thức này sẽ được gọi và phải trả về danh sách các thuộc tính. Điều này cho phép các đối tượng có cài đặt hàm __getattr__() hoặc __getattribute__() tùy chỉnh có thể thay đổi cách thức dir() báo cáo các thuộc tính của chúng.

Nếu đối tượng không cung cấp phương thức __dir__(), hàm sẽ cố gắng thu thập thông tin từ thuộc tính __dict__ của đối tượng nếu có định nghĩa và từ đối tượng kiểu của nó. Danh sách kết quả không nhất thiết phải đầy đủ và có thể không chính xác khi đối tượng có phương thức __getattr__() tùy chỉnh.

Cơ chế dir() mặc định hoạt động khác nhau đối với từng loại đối tượng, vì nó cố gắng cung cấp thông tin phù hợp nhất thay vì thông tin đầy đủ:

  • Nếu đối tượng là một đối tượng mô-đun, danh sách sẽ chứa tên các thuộc tính của mô-đun đó.

  • Nếu đối tượng là một đối tượng kiểu hoặc lớp, danh sách sẽ chứa tên các thuộc tính của nó và các thuộc tính của các lớp cơ sở một cách đệ quy.

  • Trong các trường hợp khác, danh sách sẽ chứa tên các thuộc tính của đối tượng, tên các thuộc tính của lớp của nó và các thuộc tính của các lớp cơ sở của lớp đó một cách đệ quy.

Danh sách kết quả được sắp xếp theo thứ tự bảng chữ cái. Ví dụ:

>>> import struct
>>> dir()   # show the names in the module namespace
['__builtins__', '__name__', 'struct']
>>> dir(struct)   # show the names in the struct module
['Struct', '__all__', '__builtins__', '__doc__', '__file__',
 '__initializing__', '__loader__', '__name__', '__package__',
 '_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
 'unpack', 'unpack_from']
>>> class Shape:
...     def __dir__(self):
...         return ['area', 'perimeter', 'location']
...
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']

Ghi chú

Bởi vì dir() được cung cấp chủ yếu để tạo sự thuận tiện khi sử dụng tại cửa sổ dòng lệnh tương tác, nó cố gắng cung cấp một tập hợp các tên thú vị hơn là một tập hợp được định nghĩa một cách chặt chẽ hoặc nhất quán, và hành vi chi tiết của nó có thể thay đổi qua các phiên bản. Ví dụ, các thuộc tính của metaclass không nằm trong danh sách kết quả khi đối số là một lớp.

divmod(a, b, /)

Nhận hai số (không phải số phức) làm đối số và trả về một cặp số bao gồm thương và số dư của chúng khi sử dụng phép chia nguyên. Với các kiểu toán hạng hỗn hợp, các quy tắc dành cho toán tử số học nhị phân sẽ được áp dụng. Đối với số nguyên, kết quả tương đương với (a // b, a % b). Đối với số dấu phẩy động, kết quả là (q, a % b), trong đó q thường là math.floor(a / b) nhưng có thể nhỏ hơn giá trị đó 1 đơn vị. Trong mọi trường hợp, q * b + a % b rất gần với a; nếu a % b khác không, nó sẽ có cùng dấu với b, và 0 <= abs(a % b) < abs(b).

enumerate(iterable, start=0)

Trả về một đối tượng enumerate. iterable phải là một chuỗi, một iterator, hoặc một đối tượng khác hỗ trợ lặp. Phương thức __next__() của trình lặp do enumerate() trả về sẽ trả về một tuple bao gồm giá trị đếm (bắt đầu từ start, mặc định là 0) và các giá trị nhận được từ việc lặp qua iterable.

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

Tương đương với:

def enumerate(iterable, start=0):
    n = start
    for elem in iterable:
        yield n, elem
        n += 1
eval(source, /, globals=None, locals=None)
Tham số:
  • source (str | code object) -- Một biểu thức Python.

  • globals (dict | frozendict | None) -- Namespace toàn cục (mặc định: None).

  • locals (mapping | None) -- Namespace cục bộ (mặc định: None).

Trả về:

Kết quả của biểu thức đã được tính toán.

Raises:

Các lỗi cú pháp được báo cáo dưới dạng các ngoại lệ.

Cảnh báo

Hàm này thực thi mã tùy ý. Việc gọi hàm với dữ liệu đầu vào không đáng tin cậy từ người dùng sẽ dẫn đến các lỗ hổng bảo mật.

Đối số source được phân tích cú pháp và tính toán dưới dạng một biểu thức Python (về mặt kỹ thuật là một danh sách có điều kiện) bằng cách sử dụng các ánh xạ globalslocals làm namespace toàn cục và cục bộ. Nếu từ điển globals hiện diện và không chứa giá trị cho khóa __builtins__, một tham chiếu đến từ điển của mô-đun tích hợp sẵn builtins sẽ được chèn vào dưới khóa đó trước khi source được phân tích cú pháp. Việc ghi đè __builtins__ có thể được sử dụng để hạn chế hoặc thay đổi các tên khả dụng, nhưng đây không phải là một cơ chế bảo mật: mã được thực thi vẫn có thể truy cập tất cả các builtins. Nếu ánh xạ locals bị lược bỏ, nó sẽ mặc định lấy theo từ điển globals. Nếu cả hai ánh xạ đều bị lược bỏ, source sẽ được thực thi với globalslocals trong môi trường mà eval() được gọi. Lưu ý, eval() sẽ chỉ có quyền truy cập vào các nested scopes (non-locals) trong môi trường bao quanh nếu chúng đã được tham chiếu trong scope đang gọi eval() (ví dụ: thông qua câu lệnh nonlocal).

Ví dụ:

>>> x = 1
>>> eval('x+1')
2

Hàm này cũng có thể được sử dụng để thực thi các đối tượng mã tùy ý (chẳng hạn như các đối tượng được tạo bởi compile()). Trong trường hợp này, hãy truyền một đối tượng mã thay vì một chuỗi. Nếu đối tượng mã đã được biên dịch với đối số mode'exec', giá trị trả về của eval() sẽ là None.

Gợi ý: việc thực thi các câu lệnh một cách động được hỗ trợ bởi hàm exec(). Các hàm globals()locals() lần lượt trả về từ điển toàn cục và cục bộ hiện tại, điều này có thể hữu ích để truyền vào sử dụng cho eval() hoặc exec().

Nếu nguồn được cung cấp là một chuỗi, các khoảng trắng và tab ở đầu và cuối sẽ bị loại bỏ.

Tham khảo ast.literal_eval() để biết hàm tính toán các chuỗi biểu thức chỉ chứa các hằng văn bản.

Kích hoạt một auditing event exec với đối số là đối tượng mã. Các sự kiện biên dịch mã cũng có thể được kích hoạt.

Thay đổi trong phiên bản 3.13: Hiện tại các đối số globalslocals có thể được truyền dưới dạng các tham số từ khóa.

Thay đổi trong phiên bản 3.13: Ngữ nghĩa của namespace locals mặc định đã được điều chỉnh như mô tả đối với hàm tích hợp sẵn locals().

Thay đổi trong phiên bản 3.15: globals hiện có thể là một frozendict.

exec(source, /, globals=None, locals=None, *, closure=None)

Cảnh báo

Hàm này thực thi mã tùy ý. Việc gọi hàm với dữ liệu đầu vào không đáng tin cậy từ người dùng sẽ dẫn đến các lỗ hổng bảo mật.

Hàm này hỗ trợ thực thi mã Python một cách động. source phải là một chuỗi hoặc một đối tượng mã. Nếu là một chuỗi, chuỗi đó sẽ được phân tích cú pháp thành một tập hợp các câu lệnh Python và sau đó được thực thi (trừ khi xảy ra lỗi cú pháp). [1] Nếu là một đối tượng mã, nó sẽ được thực thi trực tiếp. Trong mọi trường hợp, mã được thực thi phải hợp lệ dưới dạng dữ liệu nhập từ tệp (xem phần File input trong Tài liệu Tham khảo). Lưu ý rằng các câu lệnh nonlocal, yield, và return không được sử dụng bên ngoài định nghĩa hàm, ngay cả trong ngữ cảnh mã được truyền vào hàm exec(). Giá trị trả về là None.

Trong mọi trường hợp, nếu các phần tùy chọn bị lược bỏ, mã sẽ được thực thi trong phạm vi hiện tại. Nếu chỉ có globals được cung cấp, nó phải là một từ điển (và không phải là lớp con của từ điển), từ điển này sẽ được dùng cho cả biến toàn cục và biến cục bộ. Nếu cả globalslocals đều được đưa vào, chúng sẽ lần lượt được sử dụng cho các biến toàn cục và cục bộ. Nếu được cung cấp, locals có thể là bất kỳ đối tượng ánh xạ nào. Hãy nhớ rằng ở cấp độ mô-đun, globals và locals là cùng một từ điển.

Ghi chú

Khi exec nhận được hai đối tượng riêng biệt cho globalslocals, mã sẽ được thực thi như thể nó được nhúng trong một định nghĩa lớp. Điều này có nghĩa là các hàm và lớp được định nghĩa trong mã thực thi sẽ không thể truy cập các biến được gán ở cấp cao nhất (vì các biến "cấp cao nhất" được xử lý như các biến lớp trong một định nghĩa lớp).

Nếu từ điển globals không chứa giá trị cho khóa __builtins__, một tham chiếu đến từ điển của mô-đun tích hợp builtins sẽ được chèn vào dưới khóa đó. Việc ghi đè __builtins__ có thể được sử dụng để hạn chế hoặc thay đổi các tên khả dụng, nhưng đây không phải là một cơ chế bảo mật: mã được thực thi vẫn có thể truy cập tất cả các builtins.

Đối số closure chỉ định một closure—một tuple gồm các cellvars. Nó chỉ hợp lệ khi object là một đối tượng mã có chứa các biến tự do (closure). Độ dài của tuple phải khớp chính xác với độ dài thuộc tính co_freevars của đối tượng mã đó.

Kích hoạt một auditing event exec với đối số là đối tượng mã. Các sự kiện biên dịch mã cũng có thể được kích hoạt.

Ghi chú

Các hàm tích hợp sẵn globals()locals() lần lượt trả về namespace toàn cục và cục bộ hiện tại, điều này có thể hữu ích để truyền vào làm đối số thứ hai và thứ ba cho hàm exec().

Ghi chú

Namespace locals mặc định hoạt động như mô tả của hàm locals() bên dưới. Hãy truyền một từ điển locals tường minh nếu bạn cần xem các tác động của mã lên locals sau khi hàm exec() trả về.

Thay đổi trong phiên bản 3.11: Đã thêm tham số closure.

Thay đổi trong phiên bản 3.13: Hiện tại các đối số globalslocals có thể được truyền dưới dạng các tham số từ khóa.

Thay đổi trong phiên bản 3.13: Ngữ nghĩa của namespace locals mặc định đã được điều chỉnh như mô tả đối với hàm tích hợp sẵn locals().

Thay đổi trong phiên bản 3.15: globals hiện có thể là một frozendict.

filter(function, iterable, /)

Tạo một trình lặp từ các phần tử của iterable mà tại đó function trả về giá trị true. iterable có thể là một chuỗi, một vật chứa hỗ trợ lặp, hoặc một trình lặp. Nếu functionNone, hàm đồng nhất sẽ được mặc định sử dụng, nghĩa là tất cả các phần tử của iterable có giá trị false sẽ bị loại bỏ.

Lưu ý rằng filter(function, iterable) tương đương với biểu thức generator (item for item in iterable if function(item)) nếu function không phải là None(item for item in iterable if item) nếu function là None.

Tham khảo itertools.filterfalse() để biết hàm bổ trợ giúp trả về các phần tử của iterable mà tại đó function có giá trị false.

class float(number=0.0, /)
class float(string, /)

Trả về một số dấu phẩy động được tạo từ một số hoặc một chuỗi.

Ví dụ:

>>> float('+1.23')
1.23
>>> float('   -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity')
-inf

Nếu đối số là một chuỗi, nó nên chứa một số thập phân, có thể bắt đầu bằng một dấu và có thể nằm trong các khoảng trắng. Dấu tùy chọn có thể là '+' hoặc '-'; dấu '+' không ảnh hưởng đến giá trị được tạo ra. Đối số cũng có thể là một chuỗi đại diện cho NaN (not-a-number), hoặc vô cực dương hoặc âm. Chính xác hơn, dữ liệu nhập vào phải tuân thủ quy tắc sản xuất floatvalue trong ngữ pháp sau đây, sau khi các ký tự khoảng trắng ở đầu và cuối đã được loại bỏ:

sign:          "+" | "-"
infinity:      "Infinity" | "inf"
nan:           "nan"
digit:         <a Unicode decimal digit, i.e. characters in Unicode general category Nd>
digitpart:     digit (["_"] digit)*
number:        [digitpart] "." digitpart | digitpart ["."]
exponent:      ("e" | "E") [sign] digitpart
floatnumber:   number [exponent]
absfloatvalue: floatnumber | infinity | nan
floatvalue:    [sign] absfloatvalue

Chữ hoa hay chữ thường đều không quan trọng, vì vậy, ví dụ như "inf", "Inf", "INFINITY", và "iNfINity" đều là những cách viết được chấp nhận cho giá trị vô cực dương.

Ngược lại, nếu đối số là một số nguyên hoặc một số dấu phẩy động, một số dấu phẩy động có cùng giá trị (trong phạm vi độ chính xác của số dấu phẩy động trong Python) sẽ được trả về. Nếu đối số nằm ngoài phạm vi của kiểu float trong Python, ngoại lệ OverflowError sẽ được kích hoạt.

Đối với một đối tượng Python tổng quát x, float(x) sẽ ủy quyền cho x.__float__(). Nếu __float__() không được định nghĩa, nó sẽ chuyển sang sử dụng __index__().

Tham khảo thêm float.from_number(), phương thức này chỉ chấp nhận một đối số dạng số.

Nếu không có đối số nào được cung cấp, hàm trả về 0.0.

Kiểu float được mô tả trong Numeric Types --- int, float, complex.

Thay đổi trong phiên bản 3.6: Cho phép nhóm các chữ số bằng dấu gạch dưới giống như trong các hằng văn bản của mã nguồn.

Thay đổi trong phiên bản 3.7: Tham số hiện tại chỉ có thể truyền theo vị trí.

Thay đổi trong phiên bản 3.8: Chuyển sang sử dụng __index__() nếu __float__() không được định nghĩa.

format(value, format_spec='', /)

Chuyển đổi một value sang một dạng biểu diễn "đã định dạng", được kiểm soát bởi format_spec. Việc diễn giải format_spec sẽ phụ thuộc vào kiểu của đối số value; tuy nhiên, có một cú pháp định dạng tiêu chuẩn được hầu hết các kiểu dữ liệu tích hợp sẵn sử dụng: Format specification mini-language.

format_spec mặc định là một chuỗi rỗng, thường mang lại hiệu quả tương tự như khi gọi str(value).

Một lời gọi hàm format(value, format_spec) được chuyển đổi thành type(value).__format__(value, format_spec), giúp bỏ qua từ điển thực thể khi tìm kiếm phương thức __format__() của giá trị đó. Ngoại lệ TypeError sẽ được kích hoạt nếu quá trình tìm kiếm phương thức đạt tới objectformat_spec không rỗng, hoặc nếu format_spec hay giá trị trả về không phải là chuỗi.

Thay đổi trong phiên bản 3.4: object().__format__(format_spec) sẽ kích hoạt TypeError nếu format_spec không phải là một chuỗi rỗng.

class frozendict(**kwargs)
class frozendict(mapping, /, **kwargs)
class frozendict(iterable, /, **kwargs)

Tạo một từ điển đóng băng mới. Lớp frozendict là một lớp tích hợp sẵn. Xem thêm Mapping types --- dict, frozendict để biết tài liệu về lớp này.

Đối với các loại container khác, hãy tham khảo các lớp tích hợp sẵn như dict, list, set, và tuple, cũng như mô-đun collections.

Added in version 3.15.

class frozenset(iterable=(), /)

Trả về một đối tượng :frozenset`t mới, với các phần tử tùy chọn được lấy từ *iterable*. :class:`frozenset là một lớp tích hợp sẵn. Xem Set Types --- set, frozenset để biết tài liệu về lớp này.

Đối với các vật chứa khác, hãy tham khảo các lớp tích hợp sẵn như set, list, tuple, và dict, cũng như mô-đun collections.

getattr(object, name, /)
getattr(object, name, default, /)

Trả về giá trị của thuộc tính được đặt tên của object. name phải là một chuỗi. Nếu chuỗi đó là tên của một trong các thuộc tính của đối tượng, kết quả trả về là giá trị của thuộc tính đó. Ví dụ, getattr(x, 'foobar') tương đương với x.foobar. Nếu thuộc tính được đặt tên không tồn tại, giá trị default sẽ được trả về nếu có cung cấp, ngược lại ngoại lệ AttributeError sẽ được kích hoạt. name không nhất thiết phải là một mã định danh Python (xem setattr()).

Ghi chú

Vì biến đổi tên riêng tư private name mangling xảy ra tại thời điểm biên dịch, người dùng phải tự biến đổi tên của một thuộc tính riêng tư (các thuộc tính có hai dấu gạch dưới ở đầu) theo cách thủ công để có thể truy xuất nó bằng getattr().

globals()

Trả về từ điển triển khai namespace của mô-đun hiện tại. Đối với mã nằm trong các hàm, từ điển này được thiết lập khi hàm được định nghĩa và giữ nguyên không đổi bất kể hàm đó được gọi ở đâu.

hasattr(object, name, /)

Các đối số bao gồm một đối tượng và một chuỗi. Kết quả là True nếu chuỗi đó là tên của một trong các thuộc tính của đối tượng, ngược lại là False. (Hàm này được triển khai bằng cách gọi getattr(object, name) và kiểm tra xem nó có kích hoạt ngoại lệ AttributeError hay không.)

hash(object, /)

Trả về giá trị băm của đối tượng (nếu có). Giá trị băm là các số nguyên. Chúng được sử dụng để so sánh nhanh các khóa của từ điển trong quá trình tra cứu. Các giá trị số bằng nhau thì có giá trị băm giống nhau (ngay cả khi chúng khác kiểu dữ liệu, chẳng hạn như trường hợp của 1 và 1.0).

Ghi chú

Đối với các đối tượng có phương thức __hash__() tùy chỉnh, lưu ý rằng hash() sẽ cắt ngắn giá trị trả về dựa trên độ rộng bit của máy chủ.

help()
help(request)

Gọi hệ thống trợ giúp tích hợp sẵn. (Hàm này được thiết kế để sử dụng trong môi trường tương tác). Nếu không có đối số nào được cung cấp, hệ thống trợ giúp tương tác sẽ bắt đầu trên cửa sổ dòng lệnh của trình thông dịch. Nếu đối số là một chuỗi, chuỗi đó sẽ được tra cứu dưới dạng tên của một mô-đun, hàm, lớp, phương thức, từ khóa hoặc chủ đề tài liệu, và một trang trợ giúp sẽ được in ra màn hình. Nếu đối số là bất kỳ loại đối tượng nào khác, một trang trợ giúp về đối tượng đó sẽ được tạo ra.

Lưu ý rằng nếu một dấu gạch chéo (/) xuất hiện trong danh sách tham số của một hàm khi gọi help(), điều đó có nghĩa là các tham số đứng trước dấu gạch chéo là các tham số chỉ vị trí. Để biết thêm thông tin, hãy xem the FAQ entry on positional-only parameters.

Hàm này được thêm vào namespace tích hợp sẵn bởi mô-đun site.

Thay đổi trong phiên bản 3.4: Những thay đổi đối với pydocinspect có nghĩa là các chữ ký được báo cáo cho các đối tượng có thể gọi giờ đây sẽ toàn diện và nhất quán hơn.

hex(integer, /)

Chuyển đổi một số nguyên thành một chuỗi thập lục phân viết thường có tiền tố "0x". Nếu integer không phải là một đối tượng int của Python, nó phải định nghĩa một phương thức __index__() để trả về một số nguyên. Một số ví dụ:

>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'

Nếu bạn muốn chuyển đổi một số nguyên thành một chuỗi thập lục phân viết hoa hoặc viết thường, có tiền tố hoặc không, bạn có thể sử dụng một trong các cách sau:

>>> '%#x' % 255, '%x' % 255, '%X' % 255
('0xff', 'ff', 'FF')
>>> format(255, '#x'), format(255, 'x'), format(255, 'X')
('0xff', 'ff', 'FF')
>>> f'{255:#x}', f'{255:x}', f'{255:X}'
('0xff', 'ff', 'FF')

Tham khảo thêm format() để biết thêm thông tin chi tiết.

Tham khảo thêm int() để chuyển đổi một chuỗi thập lục phân sang một số nguyên bằng cách sử dụng cơ số 16.

Ghi chú

Để lấy biểu diễn chuỗi thập lục phân cho một số thực, hãy sử dụng phương thức float.hex().

id(object, /)

Trả về "định danh" của một đối tượng. Đây là một số nguyên được đảm bảo là duy nhất và không đổi cho đối tượng này trong suốt vòng đời của nó. Hai đối tượng có vòng đời không trùng nhau có thể có cùng giá trị id().

Đây là địa chỉ của đối tượng trong bộ nhớ.

Kích hoạt một auditing event builtins.id với đối số là id.

input()
input(prompt, /)

Nếu đối số prompt hiện diện, nó sẽ được ghi ra đầu ra tiêu chuẩn mà không có ký tự dòng mới ở cuối. Sau đó, hàm đọc một dòng từ đầu vào, chuyển đổi nó thành một chuỗi (loại bỏ ký tự dòng mới ở cuối) và trả về chuỗi đó. Khi đọc được ký tự kết thúc tệp EOF, ngoại lệ EOFError sẽ được kích hoạt. Ví dụ:

>>> s = input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"

Nếu mô-đun readline được tải, input() sẽ sử dụng nó để cung cấp các tính năng lịch sử và chỉnh sửa dòng chi tiết.

Kích hoạt một auditing event builtins.input với đối số prompt trước khi đọc dữ liệu nhập vào.

Kích hoạt một auditing event builtins.input/result với kết quả sau khi đọc dữ liệu nhập vào thành công.

class int(number=0, /)
class int(string, /, base=10)

Trả về một đối tượng số nguyên được tạo từ một số hoặc một chuỗi, hoặc trả về 0 nếu không có đối số nào được cung cấp.

Ví dụ:

>>> int(123.45)
123
>>> int('123')
123
>>> int('   -12_345\n')
-12345
>>> int('FACE', 16)
64206
>>> int('0xface', 0)
64206
>>> int('01110011', base=2)
115

Nếu đối số định nghĩa __int__(), int(x) sẽ trả về x.__int__(). Nếu đối số định nghĩa __index__(), nó sẽ trả về x.__index__(). Đối với các số dấu phẩy động, hàm này sẽ thực hiện cắt bỏ phần thập phân về phía số 0.

Nếu đối số không phải là một số hoặc nếu base được cung cấp, thì nó phải là một chuỗi, một thực thể bytes, hoặc bytearray biểu diễn một số nguyên ở cơ số base. Tùy chọn, chuỗi có thể được bắt đầu bằng dấu + hoặc - (không có khoảng cách ở giữa), có các số không ở đầu, được bao quanh bởi khoảng trắng, và có các dấu gạch dưới đơn xen kẽ giữa các chữ số.

Một chuỗi số nguyên cơ số n chứa các chữ số, mỗi chữ số đại diện cho một giá trị từ 0 đến n-1. Các giá trị từ 0--9 có thể được đại diện bởi bất kỳ chữ số thập phân Unicode nào. Các giá trị từ 10--35 có thể được đại diện bởi các chữ cái từ a đến z (hoặc A đến Z). base mặc định là 10. Các cơ số được phép là 0 và từ 2--36. Các chuỗi cơ số-2, -8, và -16 có thể tùy chọn thêm tiền tố 0b/0B, 0o/0O, hoặc 0x/0X, tương tự như các hằng số nguyên trong mã nguồn. Với cơ số 0, chuỗi được diễn giải tương tự như một hằng số nguyên trong mã nguồn, theo đó cơ số thực tế là 2, 8, 10, hoặc 16 sẽ được xác định dựa vào tiền tố. Cơ số 0 cũng không cho phép các số không ở đầu: int('010', 0) là không hợp lệ, trong khi int('010')int('010', 8) thì hợp lệ.

Kiểu số nguyên được mô tả trong Numeric Types --- int, float, complex.

Thay đổi trong phiên bản 3.4: Nếu base không phải là một thực thể của int và đối tượng base có phương thức base.__index__, phương thức đó sẽ được gọi để lấy về một số nguyên làm cơ số. Các phiên bản trước đây sử dụng base.__int__ thay vì base.__index__.

Thay đổi trong phiên bản 3.6: Cho phép nhóm các chữ số bằng dấu gạch dưới giống như trong các hằng văn bản của mã nguồn.

Thay đổi trong phiên bản 3.7: Tham số đầu tiên hiện nay chỉ được dùng theo vị trí.

Thay đổi trong phiên bản 3.8: Chuyển sang sử dụng __index__() nếu __int__() không được định nghĩa.

Thay đổi trong phiên bản 3.11: Dữ liệu nhập vào dạng chuỗi và các biểu diễn chuỗi của int có thể bị giới hạn để giúp tránh các cuộc tấn công từ chối dịch vụ DoS. Ngoại lệ ValueError sẽ được kích hoạt khi vượt quá giới hạn trong quá trình chuyển đổi một chuỗi sang int, hoặc khi việc chuyển đổi một số int sang chuỗi vượt quá giới hạn cho phép. Xem tài liệu về giới hạn độ dài chuyển đổi chuỗi số nguyên.

Thay đổi trong phiên bản 3.14: int() không còn ủy quyền cho phương thức __trunc__() nữa.

isinstance(object, classinfo, /)

Trả về True nếu đối số object là một thực thể của đối số classinfo, hoặc là một lớp con (trực tiếp, gián tiếp hoặc ảo) của nó. Nếu object không phải là một đối tượng của kiểu dữ liệu đã cho, hàm luôn trả về False. Nếu classinfo là một tuple gồm các đối tượng kiểu (hoặc đệ quy, các tuple tương tự khác) hoặc một Union Type của nhiều kiểu dữ liệu, trả về True nếu object là thực thể của bất kỳ kiểu nào trong đó. Nếu classinfo không phải là một kiểu dữ liệu hoặc một tuple chứa các kiểu và các tuple như vậy, ngoại lệ TypeError sẽ được kích hoạt. TypeError có thể không được kích hoạt đối với một kiểu không hợp lệ nếu một kiểm tra trước đó đã thành công.

Thay đổi trong phiên bản 3.10: classinfo có thể là một Union Type.

issubclass(cls, classinfo, /)

Trả về True nếu cls là một lớp con (trực tiếp, gián tiếp, hoặc ảo) của classinfo. Một lớp được coi là lớp con của chính nó. classinfo có thể là một bộ gồm các đối tượng lớp (hoặc các bộ tương tự một cách đệ quy) hoặc một Union Type, trong trường hợp đó trả về True nếu cls là lớp con của bất kỳ mục nào trong classinfo. Trong mọi trường hợp khác, ngoại lệ TypeError sẽ được trả về.

Thay đổi trong phiên bản 3.10: classinfo có thể là một Union Type.

iter(iterable, /)
iter(callable, sentinel, /)

Trả về một đối tượng iterator. Tham số đầu tiên được thông dịch rất khác nhau tùy thuộc vào sự hiện diện của tham số thứ hai. Nếu không có tham số thứ hai, tham số duy nhất phải là một đối tượng tập hợp hỗ trợ giao thức iterable (phương thức __iter__()), hoặc nó phải hỗ trợ giao thức tuần tự (phương thức __getitem__() với các tham số số nguyên bắt đầu từ 0). Nếu nó không hỗ trợ cả hai giao thức đó, TypeError sẽ được trả về. Nếu tham số thứ hai, sentinel, được cung cấp, thì tham số đầu tiên phải là một đối tượng có thể gọi. Iterator được tạo trong trường hợp này sẽ gọi callable không có tham số cho mỗi lần gọi phương thức __next__() của nó; nếu giá trị trả về bằng "sentinel", StopIteration sẽ được trả về, nếu không giá trị đó sẽ được trả về.

Xem thêm Iterator Types.

Một ứng dụng hữu ích của dạng thứ hai của iter() là để xây dựng một trình đọc khối. Ví dụ, đọc các khối có độ rộng cố định từ một tệp cơ sở dữ liệu nhị phân cho đến khi đạt tới cuối tệp:

from functools import partial
with open('mydata.db', 'rb') as f:
    for block in iter(partial(f.read, 64), b''):
        process_block(block)
len(object, /)

Trả về độ dài (số lượng mục) của một đối tượng. Tham số có thể là một tuần tự (chẳng hạn như một string, bytes, tuple, list, hoặc range) hoặc một tập hợp (chẳng hạn như một dictionary, set, hoặc frozen set).

len trả về lỗi OverflowError đối với các độ dài lớn hơn sys.maxsize, ví dụ như range(2 ** 100).

class list(iterable=(), /)

Thay vì là một hàm, list thực chất là một kiểu trình tự có thể thay đổi, như đã được tài liệu hóa trong ListsSequence Types --- list, tuple, range.

locals()

Trả về một đối tượng ánh xạ đại diện cho bảng ký hiệu cục bộ hiện tại, với tên các biến là khóa và các tham chiếu đang được liên kết của chúng là giá trị.

Tại phạm vi mô đun, cũng như khi sử dụng exec() hoặc eval() với một không gian tên đơn nhất, hàm này trả về cùng một không gian tên như globals().

Tại phạm vi lớp, nó trả về không gian tên sẽ được truyền cho hàm khởi tạo siêu lớp.

Khi sử dụng exec() hoặc eval() với các đối số cục bộ và toàn cục riêng biệt, nó trả về không gian tên cục bộ đã được truyền vào lời gọi hàm.

Trong tất cả các trường hợp trên, mỗi lần gọi locals() trong một khung thực thi sẽ trả về cùng một đối tượng ánh xạ. Các thay đổi được thực hiện thông qua đối tượng ánh xạ do locals() trả về sẽ hiển thị dưới dạng các biến cục bộ được gán, gán lại hoặc bị xóa, và việc gán, gán lại hoặc xóa các biến cục bộ sẽ ngay lập tức ảnh hưởng đến nội dung của đối tượng ánh xạ được trả về.

Trong một optimized scope (bao gồm các hàm, trình tạo và coroutine), mỗi lần gọi locals() thay vào đó sẽ trả về một từ điển mới chứa các liên kết hiện tại của các biến cục bộ của hàm và bất kỳ tham chiếu phi cục bộ nào. Trong trường hợp này, các thay đổi liên kết tên được thực hiện thông qua từ điển được trả về sẽ không được ghi ngược lại vào các biến cục bộ hoặc tham chiếu ô phi cục bộ tương ứng, và việc gán, gán lại hoặc xóa các biến cục bộ và tham chiếu ô phi cục bộ sẽ không ảnh hưởng đến nội dung của các từ điển đã được trả về trước đó.

Việc gọi locals() như một phần của một comprehension trong một hàm, trình tạo, hoặc coroutine tương đương với việc gọi nó trong phạm vi bao quanh, ngoại trừ việc các biến lặp đã được khởi tạo của comprehension sẽ được bao gồm. Trong các phạm vi khác, nó hoạt động như comprehension đang chạy như một hàm lồng nhau.

Việc gọi locals() như một phần của một biểu thức trình tạo tương đương với việc gọi nó trong một hàm trình tạo lồng nhau.

Thay đổi trong phiên bản 3.12: Hành vi của locals() trong một comprehension đã được cập nhật như được mô tả trong PEP 709.

Thay đổi trong phiên bản 3.13: Là một phần của PEP 667, ngữ nghĩa của việc thay đổi các đối tượng ánh xạ được trả về từ hàm này hiện đã được xác định. Hành vi trong optimized scopes hiện tại như đã mô tả ở trên. Ngoài việc được xác định rõ, hành vi trong các phạm vi khác vẫn không thay đổi so với các phiên bản trước.

map(function, iterable, /, *iterables, strict=False)

Trả về một trình lặp áp dụng function cho mọi mục của iterable, tạo ra các kết quả. Nếu các đối số iterables bổ sung được truyền vào, function phải nhận bấy nhiêu đối số và được áp dụng đồng thời cho các mục từ tất cả các iterable. Với nhiều iterable, trình lặp sẽ dừng lại khi iterable ngắn nhất cạn kiệt. Nếu strictTrue và một trong các iterable bị cạn kiệt trước những cái khác, một ValueError sẽ được đưa ra. Đối với các trường hợp mà đầu vào hàm đã được sắp xếp thành các tuple đối số, hãy xem itertools.starmap().

Thay đổi trong phiên bản 3.14: Đã thêm tham số strict.

max(iterable, /, *, key=None)
max(iterable, /, *, default, key=None)
max(arg1, arg2, /, *args, key=None)

Trả về mục lớn nhất trong một iterable hoặc mục lớn nhất trong hai hay nhiều đối số.

Nếu có một đối số vị trí được cung cấp, nó phải là một iterable. Mục lớn nhất trong iterable sẽ được trả về. Nếu có hai hoặc nhiều đối số vị trí được cung cấp, mục lớn nhất trong các đối số vị trí sẽ được trả về.

Có hai đối số chỉ khóa tùy chọn. Đối số key chỉ định một hàm sắp xếp một đối số tương tự như hàm được sử dụng cho list.sort(). Đối số default chỉ định một đối tượng sẽ được trả về nếu iterable được cung cấp là trống. Nếu iterable trống và default không được cung cấp, một ValueError sẽ được trả về.

Nếu có nhiều mục cùng đạt giá trị cực đại, hàm sẽ trả về mục đầu tiên được tìm thấy. Điều này nhất quán với các công cụ bảo toàn tính ổn định khi sắp xếp khác như sorted(iterable, key=keyfunc, reverse=True)[0]heapq.nlargest(1, iterable, key=keyfunc).

Thay đổi trong phiên bản 3.4: Đã thêm tham số chỉ khóa default.

Thay đổi trong phiên bản 3.8: Tham số key có thể là None.

class memoryview(object)

Trả về một đối tượng "memory view" được tạo từ đối số đã cho. Xem Memory Views để biết thêm thông tin.

min(iterable, /, *, key=None)
min(iterable, /, *, default, key=None)
min(arg1, arg2, /, *args, key=None)

Trả về mục nhỏ nhất trong một iterable hoặc mục nhỏ nhất trong hai hay nhiều đối số.

Nếu có một đối số vị trí được cung cấp, nó phải là một iterable. Phần tử nhỏ nhất trong iterable sẽ được trả về. Nếu có hai hoặc nhiều đối số vị trí được cung cấp, phần tử nhỏ nhất trong các đối số vị trí sẽ được trả về.

Có hai đối số chỉ khóa tùy chọn. Đối số key chỉ định một hàm sắp xếp một đối số tương tự như hàm được sử dụng cho list.sort(). Đối số default chỉ định một đối tượng sẽ được trả về nếu iterable được cung cấp là trống. Nếu iterable trống và default không được cung cấp, một ValueError sẽ được trả về.

Nếu có nhiều phần tử cùng đạt giá trị cực tiểu, hàm sẽ trả về phần tử đầu tiên được tìm thấy. Điều này nhất quán với các công cụ bảo toàn tính ổn định khi sắp xếp khác như sorted(iterable, key=keyfunc)[0]heapq.nsmallest(1, iterable, key=keyfunc).

Thay đổi trong phiên bản 3.4: Đã thêm tham số chỉ khóa default.

Thay đổi trong phiên bản 3.8: Tham số key có thể là None.

next(iterator, /)
next(iterator, default, /)

Lấy phần tử tiếp theo từ iterator bằng cách gọi phương thức __next__() của nó. Nếu default được cung cấp, nó được trả về khi iterator cạn kiệt, ngược lại StopIteration được kích hoạt.

class object

Đây là lớp cơ sở tối thượng của tất cả các lớp khác. Nó có các phương thức chung cho tất cả các thể hiện của lớp Python. Khi constructor được gọi, nó trả về một đối tượng mới không có tính năng đặc biệt. Constructor không nhận bất kỳ đối số nào.

Ghi chú

Các thể hiện của object không có thuộc tính __dict__, vì vậy bạn không thể gán các thuộc tính tùy ý cho một thể hiện của object.

oct(integer, /)

Chuyển đổi một số nguyên thành chuỗi bát phân có tiền tố "0o". Kết quả là một biểu thức Python hợp lệ. Nếu integer không phải là đối tượng int của Python, nó phải định nghĩa phương thức __index__() trả về một số nguyên. Ví dụ:

>>> oct(8)
'0o10'
>>> oct(-56)
'-0o70'

Nếu muốn chuyển đổi số nguyên thành chuỗi bát phân có hoặc không có tiền tố "0o", bạn có thể dùng một trong các cách sau.

>>> '%#o' % 10, '%o' % 10
('0o12', '12')
>>> format(10, '#o'), format(10, 'o')
('0o12', '12')
>>> f'{10:#o}', f'{10:o}'
('0o12', '12')

Tham khảo thêm format() để biết thêm thông tin chi tiết.

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

Mở file và trả về file object tương ứng. Nếu tệp không thể mở, OSError được kích hoạt. Xem Reading and Writing Files để biết thêm ví dụ về cách sử dụng hàm này.

file là một path-like object cung cấp tên đường dẫn (tuyệt đối hoặc tương đối so với thư mục làm việc hiện tại) của tệp cần mở, hoặc là một file descriptor nguyên của tệp cần bao bọc. (Nếu file descriptor được cung cấp, nó sẽ bị đóng khi đối tượng I/O trả về bị đóng, trừ khi closefd được đặt thành False.)

mode là một chuỗi tùy chọn chỉ định chế độ mà tệp được mở. Mặc định là 'r' có nghĩa là mở để đọc ở chế độ văn bản. Các giá trị phổ biến khác là 'w' để ghi (cắt bớt tệp nếu đã tồn tại), 'x' để tạo độc quyền, và 'a' để thêm vào (trên một số hệ thống Unix, có nghĩa là tất cả các lần ghi đều thêm vào cuối tệp bất kể vị trí seek hiện tại). Ở chế độ văn bản, nếu encoding không được chỉ định, mã hóa được dùng phụ thuộc vào nền tảng: locale.getencoding() được gọi để lấy mã hóa locale hiện tại. (Để đọc và ghi byte thô, hãy dùng chế độ nhị phân và để encoding không được chỉ định.) Các chế độ có sẵn là:

Ký tự

Ý nghĩa

'r'

mở để đọc (mặc định)

'w'

mở để ghi, xóa nội dung tệp trước

'x'

mở để tạo mới độc quyền, thất bại nếu tệp đã tồn tại

'a'

mở để ghi, thêm vào cuối tệp nếu tệp đã tồn tại

'b'

chế độ nhị phân

't'

chế độ văn bản (mặc định)

'+'

mở để cập nhật (đọc và ghi)

Chế độ mặc định là 'r' (mở để đọc văn bản, đồng nghĩa với 'rt'). Các chế độ 'w+''w+b' mở và cắt bớt tệp. Các chế độ 'r+''r+b' mở tệp mà không cắt bớt.

Như đã đề cập trong Overview, Python phân biệt giữa I/O nhị phân và văn bản. Các tệp mở ở chế độ nhị phân (bao gồm 'b' trong đối số mode) trả về nội dung dưới dạng đối tượng bytes mà không giải mã. Ở chế độ văn bản (mặc định, hoặc khi 't' được bao gồm trong đối số mode), nội dung của tệp được trả về dưới dạng str, các byte đã được giải mã trước tiên bằng mã hóa phụ thuộc nền tảng hoặc bằng encoding đã chỉ định nếu có.

Ghi chú

Python không phụ thuộc vào khái niệm tệp văn bản của hệ điều hành bên dưới; tất cả việc xử lý được thực hiện bởi chính Python, do đó độc lập với nền tảng.

buffering là một số nguyên tùy chọn dùng để đặt chính sách đệm. Truyền 0 để tắt đệm (chỉ được phép ở chế độ nhị phân), 1 để chọn đệm theo dòng (chỉ dùng được khi ghi ở chế độ văn bản), và một số nguyên > 1 để chỉ định kích thước tính bằng byte của bộ đệm khối kích thước cố định. Lưu ý rằng việc chỉ định kích thước bộ đệm theo cách này áp dụng cho I/O nhị phân có đệm, nhưng TextIOWrapper (tức là tệp mở với mode='r+') sẽ có một chế độ đệm khác. Để vô hiệu hóa đệm trong TextIOWrapper, hãy xem xét dùng cờ write_through cho io.TextIOWrapper.reconfigure(). Khi không có đối số buffering, chính sách đệm mặc định hoạt động như sau:

  • Các tệp nhị phân được đệm theo các khối kích thước cố định; kích thước bộ đệm là max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) khi kích thước khối thiết bị có sẵn. Trên hầu hết các hệ thống, bộ đệm thường dài 128 kilobyte.

  • Các tệp văn bản "tương tác" (các tệp mà isatty() trả về True) sử dụng bộ đệm theo dòng. Các tệp văn bản khác sử dụng chính sách như đã mô tả ở trên cho các tệp nhị phân.

encoding là tên của mã hóa dùng để giải mã hoặc mã hóa tệp. Chỉ nên dùng điều này ở chế độ văn bản. Mã hóa mặc định phụ thuộc vào nền tảng (bất kỳ giá trị nào locale.getencoding() trả về), nhưng có thể dùng bất kỳ text encoding nào được Python hỗ trợ. Xem module codecs để biết danh sách các mã hóa được hỗ trợ.

errors là một chuỗi tùy chọn chỉ định cách xử lý các lỗi mã hóa và giải mã—tham số này không thể được sử dụng trong chế độ nhị phân. Có sẵn nhiều trình xử lý lỗi tiêu chuẩn, tuy nhiên bất kỳ tên xử lý lỗi nào đã được đăng ký với codecs.register_error() cũng đều hợp lệ. Các tên tiêu chuẩn có thể được tìm thấy tại Error Handlers.

newline xác định cách phân tích cú pháp các ký tự xuống dòng từ luồng. Nó có thể là None, '', '\n', '\r', và '\r\n'. Nó hoạt động như sau:

  • Khi đọc dữ liệu đầu vào từ luồng, nếu newlineNone, chế độ xuống dòng phổ quát được bật. Các dòng trong đầu vào có thể kết thúc bằng '\n', '\r', hoặc '\r\n', và chúng được chuyển thành '\n' trước khi trả về cho người gọi. Nếu là '', chế độ xuống dòng phổ quát được bật, nhưng các ký hiệu kết thúc dòng được trả về cho người gọi mà không được dịch. Nếu có bất kỳ giá trị hợp lệ nào khác, các dòng đầu vào chỉ kết thúc bởi chuỗi đã cho, và ký hiệu kết thúc dòng được trả về cho người gọi mà không được dịch.

  • Khi ghi đầu ra vào luồng, nếu newlineNone, bất kỳ ký tự '\n' nào được ghi đều được dịch thành dấu phân cách dòng mặc định của hệ thống, os.linesep. Nếu newline'' hoặc '\n', không có dịch thuật nào xảy ra. Nếu newline là bất kỳ giá trị hợp lệ nào khác, bất kỳ ký tự '\n' nào được ghi đều được dịch thành chuỗi đã cho.

Nếu closefdFalse và file descriptor thay vì tên tệp được cung cấp, file descriptor bên dưới sẽ được giữ mở khi tệp bị đóng. Nếu tên tệp được cung cấp, closefd phải là True (mặc định); ngược lại, một lỗi sẽ được kích hoạt.

Một opener tùy chỉnh có thể được dùng bằng cách truyền một callable làm opener. File descriptor bên dưới cho đối tượng tệp sau đó được lấy bằng cách gọi opener với (file, flags). opener phải trả về một file descriptor đang mở (truyền os.open làm opener cho kết quả chức năng tương tự như truyền None).

Tệp mới tạo là không thể kế thừa.

Ví dụ sau sử dụng tham số dir_fd của hàm os.open() để mở một tệp tương đối so với một thư mục đã cho:

>>> import os
>>> dir_fd = os.open('somedir', os.O_RDONLY)
>>> def opener(path, flags):
...     return os.open(path, flags, dir_fd=dir_fd)
...
>>> with open('spamspam.txt', 'w', opener=opener) as f:
...     print('This will be written to somedir/spamspam.txt', file=f)
...
>>> os.close(dir_fd)  # don't leak a file descriptor

Kiểu file object trả về bởi hàm open() phụ thuộc vào chế độ. Khi open() được dùng để mở tệp ở chế độ văn bản ('w', 'r', 'wt', 'rt', v.v.), nó trả về một lớp con của io.TextIOBase (cụ thể là io.TextIOWrapper). Khi dùng để mở tệp ở chế độ nhị phân có đệm, lớp trả về là lớp con của io.BufferedIOBase. Lớp chính xác thay đổi: ở chế độ đọc nhị phân, nó trả về io.BufferedReader; ở chế độ ghi nhị phân và thêm nhị phân, nó trả về io.BufferedWriter, và ở chế độ đọc/ghi, nó trả về io.BufferedRandom. Khi đệm bị vô hiệu hóa, luồng thô, lớp con của io.RawIOBase, io.FileIO, được trả về.

Xem thêm các module xử lý tệp, chẳng hạn như fileinput, io (nơi open() được khai báo), os, os.path, tempfile, và shutil.

Kích hoạt sự kiện kiểm tra open với các đối số path, mode, flags.

Các đối số modeflags có thể đã được sửa đổi hoặc suy ra từ lời gọi ban đầu.

Thay đổi trong phiên bản 3.3:

  • Đã thêm tham số opener.

  • Chế độ 'x' đã được thêm vào.

  • IOError trước đây được kích hoạt, hiện là bí danh của OSError.

  • FileExistsError hiện được kích hoạt nếu tệp mở ở chế độ tạo độc quyền ('x') đã tồn tại.

Thay đổi trong phiên bản 3.4:

  • Tệp hiện không thể kế thừa.

Thay đổi trong phiên bản 3.5:

  • Nếu lời gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không kích hoạt ngoại lệ, hàm hiện thử lại lời gọi hệ thống thay vì kích hoạt ngoại lệ InterruptedError (xem PEP 475 để biết lý do).

  • Trình xử lý lỗi 'namereplace' đã được thêm vào.

Thay đổi trong phiên bản 3.6:

  • Đã thêm hỗ trợ nhận các đối tượng cài đặt os.PathLike.

  • Trên Windows, việc mở bộ đệm console có thể trả về một lớp con của io.RawIOBase khác với io.FileIO.

Thay đổi trong phiên bản 3.11: Chế độ 'U' đã bị xóa.

ord(character, /)

Trả về giá trị thứ tự của một ký tự.

Nếu đối số là một chuỗi một ký tự, trả về điểm mã Unicode của ký tự đó. Ví dụ, ord('a') trả về số nguyên 97ord('€') (ký hiệu Euro) trả về 8364. Đây là hàm ngược của chr().

Nếu đối số là đối tượng bytes hoặc bytearray có độ dài 1, trả về giá trị byte duy nhất của nó. Ví dụ, ord(b'a') trả về số nguyên 97.

pow(base, exp, mod=None)

Trả về base lũy thừa exp; nếu mod có mặt, trả về base lũy thừa exp, modulo mod (được tính hiệu quả hơn pow(base, exp) % mod). Dạng hai đối số pow(base, exp) tương đương với dùng toán tử lũy thừa: base**exp.

Khi các đối số là các kiểu số tích hợp sẵn với các kiểu toán hạng hỗn hợp, các quy tắc ép kiểu cho các toán tử số học nhị phân được áp dụng. Đối với các toán hạng int, kết quả có cùng kiểu với các toán hạng (sau khi ép kiểu) trừ khi đối số thứ hai âm; trong trường hợp đó, tất cả đối số được chuyển thành float và kết quả float được trả về. Ví dụ, pow(10, 2) trả về 100, nhưng pow(10, -2) trả về 0.01. Đối với cơ số âm kiểu int hoặc float và số mũ không nguyên, kết quả phức được trả về. Ví dụ, pow(-9, 0.5) trả về giá trị gần 3j. Trong khi đó, đối với cơ số âm kiểu int hoặc float với số mũ nguyên, kết quả float được trả về. Ví dụ, pow(-9, 2.0) trả về 81.0.

Đối với các toán hạng int baseexp, nếu mod có mặt, mod cũng phải là kiểu nguyên và mod phải khác không. Nếu mod có mặt và exp âm, base phải nguyên tố cùng nhau với mod. Trong trường hợp đó, pow(inv_base, -exp, mod) được trả về, trong đó inv_base là nghịch đảo của base modulo mod.

Dưới đây là ví dụ tính nghịch đảo của 38 theo modulo 97:

>>> pow(38, -1, mod=97)
23
>>> 23 * 38 % 97 == 1
True

Thay đổi trong phiên bản 3.8: Đối với các toán hạng int, dạng ba đối số của pow hiện cho phép đối số thứ hai âm, cho phép tính toán nghịch đảo modular.

Thay đổi trong phiên bản 3.8: Cho phép đối số từ khóa. Trước đây, chỉ hỗ trợ đối số vị trí.

print(*objects, sep=' ', end='\n', file=None, flush=False)

In objects vào luồng văn bản file, được phân tách bằng sep và theo sau bởi end. sep, end, fileflush, nếu có mặt, phải được cung cấp dưới dạng đối số từ khóa.

Tất cả các đối số không phải từ khóa được chuyển đổi thành chuỗi như str() thực hiện và được ghi vào luồng, được phân tách bằng sep và theo sau bởi end. Cả sepend đều phải là chuỗi; chúng cũng có thể là None, có nghĩa là dùng các giá trị mặc định. Nếu không có objects nào được cung cấp, print() sẽ chỉ ghi end.

Đối số file phải là một đối tượng có phương thức write(string); nếu không có hoặc là None, sys.stdout sẽ được dùng. Vì các đối số được in được chuyển đổi thành chuỗi văn bản, print() không thể dùng với các đối tượng tệp ở chế độ nhị phân. Đối với những trường hợp này, hãy dùng file.write(...) thay thế.

Đệm đầu ra thường được xác định bởi file. Tuy nhiên, nếu flush là true, luồng buộc phải được xả.

Thay đổi trong phiên bản 3.3: Đã thêm đối số từ khóa flush.

class property(fget=None, fset=None, fdel=None, doc=None)

Trả về một thuộc tính property.

fget là một hàm để lấy giá trị thuộc tính. fset là một hàm để đặt giá trị thuộc tính. fdel là một hàm để xóa giá trị thuộc tính. Và doc tạo docstring cho thuộc tính.

Một cách dùng phổ biến là định nghĩa thuộc tính được quản lý x:

class C:
    def __init__(self):
        self._x = None

    def getx(self):
        return self._x

    def setx(self, value):
        self._x = value

    def delx(self):
        del self._x

    x = property(getx, setx, delx, "I'm the 'x' property.")

Nếu c là một thể hiện của C, c.x sẽ gọi getter, c.x = value sẽ gọi setter, và del c.x gọi deleter.

Nếu được cung cấp, doc sẽ là docstring của thuộc tính property. Ngược lại, property sẽ sao chép docstring của fget (nếu tồn tại). Điều này cho phép tạo các property chỉ đọc dễ dàng bằng cách dùng property() làm decorator:

class Parrot:
    def __init__(self):
        self._voltage = 100000

    @property
    def voltage(self):
        """Get the current voltage."""
        return self._voltage

Decorator @property biến phương thức voltage() thành một "getter" cho thuộc tính chỉ đọc cùng tên, và đặt docstring cho voltage thành "Get the current voltage."

@getter
@setter
@deleter

Đối tượng property có các phương thức getter, setterdeleter có thể dùng làm decorator để tạo một bản sao của property với hàm truy cập tương ứng được đặt thành hàm được trang trí. Điều này được giải thích rõ nhất qua một ví dụ:

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

Đoạn mã này hoàn toàn tương đương với ví dụ đầu tiên. Hãy đảm bảo đặt tên các hàm bổ sung giống với tên property gốc (x trong trường hợp này).

Đối tượng property trả về cũng có các thuộc tính fget, fsetfdel tương ứng với các đối số constructor.

Thay đổi trong phiên bản 3.5: Chuỗi tài liệu của các đối tượng property hiện có thể ghi được.

__name__

Thuộc tính lưu tên của property. Tên của property có thể được thay đổi lúc chạy.

Added in version 3.13.

class range(stop, /)
class range(start, stop, step=1, /)

Thay vì là một hàm, range thực ra là một kiểu sequence bất biến, như được mô tả trong RangesSequence Types --- list, tuple, range.

repr(object, /)

Trả về một chuỗi chứa biểu diễn có thể in được của một đối tượng. Đối với nhiều kiểu, hàm này cố gắng trả về một chuỗi mà khi truyền vào eval() sẽ cho ra đối tượng có cùng giá trị; ngược lại, biểu diễn là một chuỗi được bao trong dấu ngoặc nhọn chứa tên kiểu của đối tượng cùng với thông tin bổ sung thường bao gồm tên và địa chỉ của đối tượng. Một lớp có thể kiểm soát những gì hàm này trả về cho các thể hiện của nó bằng cách định nghĩa phương thức __repr__(). Nếu sys.displayhook() không thể truy cập, hàm này sẽ kích hoạt RuntimeError.

Lớp này có biểu diễn tùy chỉnh có thể được định lượng:

class Person:
   def __init__(self, name, age):
      self.name = name
      self.age = age

   def __repr__(self):
      return f"Person({self.name!r}, {self.age!r})"
reversed(object, /)

Trả về một iterator theo chiều ngược lại. Đối số phải là một đối tượng có phương thức __reversed__() hoặc hỗ trợ giao thức sequence (phương thức __len__() và phương thức __getitem__() với đối số nguyên bắt đầu từ 0).

round(number, ndigits=None)

Trả về number được làm tròn đến độ chính xác ndigits chữ số sau dấu thập phân. Nếu ndigits bị bỏ qua hoặc là None, nó trả về số nguyên gần nhất với đầu vào.

Đối với các kiểu tích hợp sẵn hỗ trợ round(), các giá trị được làm tròn đến bội số gần nhất của 10 lũy thừa trừ ndigits; nếu hai bội số gần nhau bằng nhau, việc làm tròn được thực hiện về phía lựa chọn chẵn (ví dụ, cả round(0.5)round(-0.5) đều là 0, và round(1.5)2). Bất kỳ giá trị nguyên nào cũng hợp lệ cho ndigits (dương, không hoặc âm). Giá trị trả về là số nguyên nếu ndigits bị bỏ qua hoặc là None. Ngược lại, giá trị trả về có cùng kiểu với number.

Đối với đối tượng Python chung number, round ủy quyền cho number.__round__.

Ghi chú

Hành vi của round() đối với số thực có thể gây bất ngờ: ví dụ, round(2.675, 2) cho 2.67 thay vì kết quả mong đợi 2.68. Đây không phải là lỗi: đó là kết quả của thực tế là hầu hết các phân số thập phân không thể được biểu diễn chính xác dưới dạng float. Xem Floating-Point Arithmetic: Issues and Limitations để biết thêm thông tin.

class set(iterable=(), /)

Trả về một đối tượng set mới, với các phần tử tùy chọn được lấy từ iterable. set là một lớp tích hợp sẵn. Xem Set Types --- set, frozenset để biết tài liệu về lớp này.

Đối với các container khác, xem các lớp tích hợp sẵn frozenset, list, tupledict, cũng như module collections.

setattr(object, name, value, /)

Đây là đối phần của getattr(). Các đối số là một đối tượng, một chuỗi và một giá trị tùy ý. Chuỗi có thể đặt tên cho một thuộc tính hiện có hoặc thuộc tính mới. Hàm gán giá trị cho thuộc tính, miễn là đối tượng cho phép. Ví dụ, setattr(x, 'foobar', 123) tương đương với x.foobar = 123.

name không nhất thiết phải là định danh Python như định nghĩa trong Names (identifiers and keywords) trừ khi đối tượng chọn bắt buộc điều đó, ví dụ trong __getattribute__() tùy chỉnh hoặc qua __slots__. Thuộc tính có tên không phải định danh sẽ không thể truy cập bằng ký hiệu dấu chấm, nhưng có thể truy cập qua getattr() v.v.

Ghi chú

làm rối tên riêng tư xảy ra lúc biên dịch, người ta phải làm rối thủ công tên của thuộc tính riêng tư (thuộc tính có hai dấu gạch dưới đứng đầu) để đặt nó bằng setattr().

class sentinel(name, /, *, repr=None)

Trả về một đối tượng lính canh duy nhất mới. name phải là một str, và được dùng làm đại diện cho đối tượng được trả về:

>>> MISSING = sentinel("MISSING")
>>> MISSING
MISSING

Tham số tùy chọn source có thể được sử dụng để khởi tạo mảng theo một vài cách khác nhau:

>>> MISSING = sentinel("MISSING", repr="<MISSING>")
>>> MISSING
<MISSING>

Các đối tượng lính canh là truthy và chỉ so sánh bằng với chính chúng. Chúng được dự định để so sánh bằng toán tử is.

sentinel không hỗ trợ việc tạo lớp con.

Bản sao nông và bản sao sâu của một đối tượng lính canh trả về chính đối tượng đó.

Các lính canh theo quy ước được gán cho một biến có tên trùng khớp. Các lính canh được định nghĩa theo cách này có thể được sử dụng trong type hints:

MISSING = sentinel("MISSING")

def next_value(default: int | MISSING = MISSING):
    ...

Các đối tượng lính canh hỗ trợ toán tử | để sử dụng trong các biểu thức kiểu dữ liệu.

Pickling được hỗ trợ cho các đối tượng lính canh được đặt trong phạm vi toàn cục của một mô-đun dưới một cái tên khớp với tên của lính canh, và cho các lính canh được đặt trong phạm vi lớp với tên khớp với qualified name của lính canh đó. Các lính canh khác, chẳng hạn như những lính canh được định nghĩa trong phạm vi hàm, không thể thực hiện đóng gói. Danh tính của lính canh được bảo toàn sau khi đóng gói:

import pickle

PICKLABLE = sentinel("PICKLABLE")

assert pickle.loads(pickle.dumps(PICKLABLE)) is PICKLABLE

class Cls:
    PICKLABLE = sentinel("Cls.PICKLABLE")

assert pickle.loads(pickle.dumps(Cls.PICKLABLE)) is Cls.PICKLABLE

Các đối tượng lính canh có các thuộc tính sau:

__name__

Tên của lính canh.

__module__

Tên của mô-đun nơi lính canh được tạo ra. Thuộc tính này thay đổi được.

Added in version 3.15.

class slice(stop, /)
class slice(start, stop, step=None, /)

Trả về một đối tượng slice đại diện cho tập hợp các chỉ số được chỉ định bởi range(start, stop, step). Các đối số startstep mặc định là None.

Các đối tượng slice cũng được tạo ra khi dùng cú pháp cắt lát. Ví dụ: a[start:stop:step] hoặc a[start:stop, i].

Xem itertools.islice() để biết phiên bản thay thế trả về một iterator.

start
stop
step

Các thuộc tính chỉ đọc này được đặt thành các giá trị đối số (hoặc giá trị mặc định của chúng). Chúng không có chức năng rõ ràng nào khác; tuy nhiên, chúng được dùng bởi NumPy và các gói bên thứ ba khác.

Thay đổi trong phiên bản 3.12: Các đối tượng slice hiện là hashable (miễn là start, stopstep là hashable).

sorted(iterable, /, *, key=None, reverse=False)

Trả về một danh sách đã sắp xếp mới từ các phần tử trong iterable.

Có hai đối số tùy chọn phải được chỉ định dưới dạng đối số từ khóa.

key chỉ định một hàm một đối số dùng để trích xuất khóa so sánh từ mỗi phần tử trong iterable (ví dụ, key=str.lower). Giá trị mặc định là None (so sánh trực tiếp các phần tử).

reverse là một giá trị boolean. Nếu đặt thành True, các phần tử danh sách được sắp xếp như thể mỗi phép so sánh bị đảo ngược.

Dùng functools.cmp_to_key() để chuyển đổi hàm cmp kiểu cũ thành hàm key.

Hàm sorted() tích hợp sẵn được đảm bảo là ổn định. Một cách sắp xếp là ổn định nếu nó đảm bảo không thay đổi thứ tự tương đối của các phần tử so sánh bằng nhau, điều này hữu ích cho việc sắp xếp nhiều lần (ví dụ, sắp xếp theo phòng ban, rồi theo bậc lương).

Thuật toán sắp xếp chỉ dùng các phép so sánh < giữa các phần tử. Trong khi định nghĩa phương thức __lt__() là đủ để sắp xếp, PEP 8 khuyến nghị rằng cả sáu phép so sánh phong phú nên được triển khai. Điều này sẽ giúp tránh lỗi khi dùng cùng dữ liệu với các công cụ sắp xếp khác như max() phụ thuộc vào một phương thức cơ bản khác. Triển khai cả sáu phép so sánh cũng giúp tránh nhầm lẫn cho các phép so sánh kiểu hỗn hợp có thể gọi phương thức phản chiếu __gt__().

Để biết ví dụ về sắp xếp và hướng dẫn ngắn về sắp xếp, xem Sorting Techniques.

@staticmethod

Biến đổi một phương thức thành phương thức tĩnh.

Một phương thức tĩnh không nhận đối số đầu tiên ngầm định. Để khai báo phương thức tĩnh, hãy dùng cú pháp sau:

class C:
    @staticmethod
    def f(arg1, arg2, argN): ...

Dạng @staticmethod là một decorator hàm, xem Function definitions để biết chi tiết.

Phương thức tĩnh có thể được gọi trên lớp (chẳng hạn như C.f()) hoặc trên một thể hiện (chẳng hạn như C().f()). Ngoài ra, descriptor phương thức tĩnh cũng có thể gọi được, vì vậy nó có thể được dùng trong định nghĩa lớp (chẳng hạn như f()).

Các phương thức tĩnh trong Python tương tự như các phương thức trong Java hoặc C++. Ngoài ra, xem classmethod() để biết biến thể hữu ích cho việc tạo các constructor lớp thay thế.

Giống như tất cả các decorator, cũng có thể gọi staticmethod như một hàm thông thường và làm gì đó với kết quả của nó. Điều này cần thiết trong một số trường hợp khi bạn cần tham chiếu đến một hàm từ thân lớp và muốn tránh việc tự động chuyển đổi thành phương thức thể hiện. Đối với những trường hợp này, hãy dùng cú pháp sau:

def regular_function():
    ...

class C:
    method = staticmethod(regular_function)

Để biết thêm thông tin về phương thức tĩnh, xem The standard type hierarchy.

Thay đổi trong phiên bản 3.10: Các phương thức tĩnh hiện kế thừa các thuộc tính phương thức (__module__, __name__, __qualname__, __doc____annotations__), có thuộc tính __wrapped__ mới, và hiện có thể gọi được như các hàm thông thường.

class str(*, encoding='utf-8', errors='strict')
class str(object)
class str(object, encoding, errors='strict')
class str(object, *, errors)

Trả về phiên bản str của object. Xem str() để biết chi tiết.

strclass chuỗi tích hợp sẵn. Để biết thông tin chung về chuỗi, xem Text Sequence Type --- str.

sum(iterable, /, start=0)

Cộng start và các phần tử của iterable từ trái sang phải và trả về tổng. Các phần tử của iterable thường là số, và giá trị start không được phép là chuỗi.

Đối với một số trường hợp sử dụng, có các lựa chọn thay thế tốt hơn cho sum(). Cách ưa thích và nhanh để nối một dãy chuỗi là gọi ''.join(sequence). Để cộng các giá trị dấu phẩy động với độ chính xác mở rộng, xem math.fsum(). Để nối một loạt các iterable, hãy xem xét dùng itertools.chain().

Thay đổi trong phiên bản 3.8: Tham số start có thể được chỉ định dưới dạng đối số từ khóa.

Thay đổi trong phiên bản 3.12: Việc cộng các số thực đã chuyển sang thuật toán cho độ chính xác cao hơn và tính giao hoán tốt hơn trên hầu hết các bản dựng.

Thay đổi trong phiên bản 3.14: Đã thêm chuyên biệt hóa cho việc cộng các số phức, dùng cùng thuật toán như việc cộng các số thực.

class super
class super(type, object_or_type=None, /)

Trả về một đối tượng proxy ủy quyền các lời gọi phương thức cho lớp cha hoặc lớp anh em của type. Điều này hữu ích để truy cập các phương thức kế thừa đã bị ghi đè trong lớp.

object_or_type xác định method resolution order cần tìm kiếm. Tìm kiếm bắt đầu từ lớp ngay sau type.

Ví dụ, nếu __mro__ của object_or_typeD -> B -> C -> A -> object và giá trị của typeB, thì super() tìm kiếm C -> A -> object.

Thuộc tính __mro__ của lớp tương ứng với object_or_type liệt kê thứ tự tìm kiếm phân giải phương thức được dùng bởi cả getattr()super(). Thuộc tính này là động và có thể thay đổi bất cứ khi nào cấu trúc thừa kế được cập nhật.

Nếu đối số thứ hai bị bỏ qua, đối tượng super trả về là unbound. Nếu đối số thứ hai là một đối tượng, isinstance(obj, type) phải là true. Nếu đối số thứ hai là một kiểu, issubclass(type2, type) phải là true (điều này hữu ích cho classmethod).

Khi được gọi trực tiếp bên trong một phương thức thông thường của lớp, cả hai đối số có thể bị bỏ qua ("hàm super() không đối số"). Trong trường hợp này, type sẽ là lớp bao quanh, và obj sẽ là đối số đầu tiên của hàm bao quanh ngay lập tức (thường là self). (Điều này có nghĩa là super() không đối số sẽ không hoạt động như mong đợi trong các hàm lồng nhau, bao gồm các biểu thức generator, tạo ngầm định các hàm lồng nhau.)

Có hai trường hợp sử dụng điển hình cho super. Trong một cấu trúc lớp với thừa kế đơn, super có thể được dùng để tham chiếu đến các lớp cha mà không cần đặt tên chúng một cách rõ ràng, do đó làm cho mã dễ bảo trì hơn. Cách dùng này song song chặt chẽ với cách dùng super trong các ngôn ngữ lập trình khác.

Trường hợp sử dụng thứ hai là hỗ trợ thừa kế bội hợp tác trong môi trường thực thi động. Trường hợp sử dụng này độc đáo với Python và không có trong các ngôn ngữ biên dịch tĩnh hoặc các ngôn ngữ chỉ hỗ trợ thừa kế đơn. Điều này cho phép triển khai "sơ đồ hình thoi" trong đó nhiều lớp cơ sở triển khai cùng phương thức. Thiết kế tốt quy định rằng các triển khai như vậy có cùng chữ ký lời gọi trong mọi trường hợp (vì thứ tự lời gọi được xác định lúc chạy, vì thứ tự đó thích nghi với các thay đổi trong cấu trúc lớp, và vì thứ tự đó có thể bao gồm các lớp anh em chưa biết trước khi chạy).

Với cả hai trường hợp sử dụng, một lời gọi superclass điển hình trông như sau:

class C(B):
    def method(self, arg):
        super().method(arg)    # This does the same thing as:
                               # super(C, self).method(arg)

Ngoài việc tra cứu phương thức, super() cũng hoạt động cho việc tra cứu thuộc tính. Một trường hợp sử dụng có thể là gọi descriptors trong lớp cha hoặc lớp anh em.

Lưu ý rằng super() được triển khai như một phần của quá trình ràng buộc cho việc tra cứu thuộc tính có dấu chấm rõ ràng như super().__getitem__(name). Nó thực hiện điều này bằng cách triển khai phương thức __getattribute__() riêng để tìm kiếm các lớp theo thứ tự có thể dự đoán hỗ trợ thừa kế bội hợp tác. Theo đó, super() không xác định cho việc tra cứu ngầm định dùng câu lệnh hoặc toán tử như super()[name].

Cũng lưu ý rằng, ngoài dạng không đối số, super() không bị giới hạn dùng bên trong phương thức. Dạng hai đối số chỉ định chính xác các đối số và tạo các tham chiếu thích hợp. Dạng không đối số chỉ hoạt động bên trong định nghĩa lớp, vì trình biên dịch điền vào các chi tiết cần thiết để lấy đúng lớp đang được định nghĩa, cũng như truy cập thể hiện hiện tại cho các phương thức thông thường.

Để biết các gợi ý thực tế về cách thiết kế các lớp hợp tác dùng super(), xem hướng dẫn sử dụng super().

Thay đổi trong phiên bản 3.14: Các đối tượng super hiện có thể picklecopy.

class tuple(iterable=(), /)

Thay vì là một hàm, tuple thực ra là một kiểu sequence bất biến, như được mô tả trong TuplesSequence Types --- list, tuple, range.

class type(object, /)
class type(name, bases, dict, /, **kwargs)

Với một đối số, trả về kiểu của một object. Giá trị trả về là một đối tượng kiểu và thường là cùng đối tượng với giá trị trả về bởi object.__class__.

Hàm tích hợp sẵn isinstance() được khuyến nghị để kiểm tra kiểu của đối tượng, vì nó tính đến các lớp con.

Với ba đối số, trả về một đối tượng kiểu mới. Đây về cơ bản là dạng động của câu lệnh class. Chuỗi name là tên lớp và trở thành thuộc tính __name__. Tuple bases chứa các lớp cơ sở và trở thành thuộc tính __bases__; nếu rỗng, object, lớp cơ sở tối thượng của tất cả các lớp, được thêm vào. Dictionary dict chứa các định nghĩa thuộc tính và phương thức cho thân lớp; nó có thể được sao chép hoặc bao bọc trước khi trở thành thuộc tính __dict__. Hai câu lệnh sau tạo ra các đối tượng type giống hệt nhau:

>>> class X:
...     a = 1
...
>>> X = type('X', (), dict(a=1))

Xem thêm:

Các đối số từ khóa được cung cấp cho dạng ba đối số được truyền đến bộ máy metaclass thích hợp (thường là __init_subclass__()) theo cách tương tự như các từ khóa trong định nghĩa lớp (ngoài metaclass).

Xem thêm Customizing class creation.

Thay đổi trong phiên bản 3.6: Các lớp con của type không ghi đè type.__new__ có thể không còn dùng được dạng một đối số để lấy kiểu của đối tượng.

Thay đổi trong phiên bản 3.15: dict hiện có thể là một frozendict.

vars()
vars(object, /)

Trả về thuộc tính __dict__ cho một module, lớp, thể hiện, hoặc bất kỳ đối tượng nào khác có thuộc tính __dict__.

Các đối tượng như module và thể hiện có thuộc tính __dict__ có thể cập nhật; tuy nhiên, các đối tượng khác có thể có hạn chế ghi trên thuộc tính __dict__ của chúng (ví dụ, các lớp dùng types.MappingProxyType để ngăn cập nhật dictionary trực tiếp).

Khi không có đối số, vars() hoạt động giống như locals().

Ngoại lệ TypeError được kích hoạt nếu một đối tượng được chỉ định nhưng không có thuộc tính __dict__ (ví dụ, nếu lớp của nó định nghĩa thuộc tính __slots__).

Thay đổi trong phiên bản 3.13: Kết quả của việc gọi hàm này không có đối số đã được cập nhật như mô tả cho hàm tích hợp locals().

zip(*iterables, strict=False)

Lặp qua nhiều iterable song song, tạo ra các tuple với một phần tử từ mỗi iterable.

Ví dụ:

>>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
...     print(item)
...
(1, 'sugar')
(2, 'spice')
(3, 'everything nice')

Chính xác hơn: zip() trả về một iterator các tuple, trong đó tuple thứ i chứa phần tử thứ i từ mỗi iterable đối số.

Một cách khác để nghĩ về zip() là nó biến các hàng thành các cột, và các cột thành các hàng. Điều này tương tự như chuyển vị ma trận.

zip() là lười biếng: Các phần tử sẽ không được xử lý cho đến khi iterable được lặp qua, ví dụ bằng vòng lặp for hoặc bằng cách bao trong list.

Một điều cần xem xét là các iterable được truyền vào zip() có thể có độ dài khác nhau; đôi khi theo thiết kế, và đôi khi do lỗi trong mã đã chuẩn bị các iterable này. Python cung cấp ba cách tiếp cận khác nhau để giải quyết vấn đề này:

  • Theo mặc định, zip() dừng lại khi iterable ngắn nhất cạn kiệt. Nó sẽ bỏ qua các phần tử còn lại trong các iterable dài hơn, cắt bớt kết quả đến độ dài của iterable ngắn nhất:

    >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum']))
    [(0, 'fee'), (1, 'fi'), (2, 'fo')]
    
  • zip() thường được dùng trong các trường hợp mà các iterable được giả định có độ dài bằng nhau. Trong những trường hợp như vậy, khuyến nghị dùng tùy chọn strict=True. Đầu ra của nó giống như zip() thông thường:

    >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True))
    [('a', 1), ('b', 2), ('c', 3)]
    

    Không giống hành vi mặc định, nó kích hoạt ValueError nếu một iterable cạn kiệt trước các iterable còn lại:

    >>> for item in zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True):
    ...     print(item)
    ...
    (0, 'fee')
    (1, 'fi')
    (2, 'fo')
    Traceback (most recent call last):
      ...
    ValueError: zip() argument 2 is longer than argument 1
    

    Không có đối số strict=True, bất kỳ lỗi nào dẫn đến các iterable có độ dài khác nhau sẽ bị im lặng, có thể biểu hiện như một lỗi khó tìm ở một phần khác của chương trình.

  • Các iterable ngắn hơn có thể được đệm bằng một giá trị hằng số để tất cả các iterable có cùng độ dài. Điều này được thực hiện bởi itertools.zip_longest().

Các trường hợp biên: Với một đối số iterable duy nhất, zip() trả về một iterator các tuple 1 phần tử. Không có đối số, nó trả về một iterator rỗng.

Mẹo và thủ thuật:

  • Thứ tự đánh giá từ trái sang phải của các iterable được đảm bảo. Điều này cho phép một cú pháp để nhóm một chuỗi dữ liệu thành các nhóm n phần tử dùng zip(*[iter(s)]*n, strict=True). Điều này lặp lại cùng một iterator n lần sao cho mỗi tuple đầu ra có kết quả của n lần gọi iterator. Điều này có hiệu quả chia đầu vào thành các đoạn n phần tử.

  • zip() kết hợp với toán tử * có thể được dùng để giải nén một danh sách:

    >>> x = [1, 2, 3]
    >>> y = [4, 5, 6]
    >>> list(zip(x, y))
    [(1, 4), (2, 5), (3, 6)]
    >>> x2, y2 = zip(*zip(x, y))
    >>> x == list(x2) and y == list(y2)
    True
    

Thay đổi trong phiên bản 3.10: Đã thêm đối số strict.

__import__(name, globals=None, locals=None, fromlist=(), level=0)

Ghi chú

Đây là một hàm nâng cao không cần thiết trong lập trình Python hàng ngày, không giống như importlib.import_module().

Hàm này được gọi bởi câu lệnh import. Nó có thể được thay thế (bằng cách nhập module builtins và gán cho builtins.__import__) để thay đổi ngữ nghĩa của câu lệnh import, nhưng làm như vậy rất không được khuyến khích vì thường đơn giản hơn khi dùng import hooks (xem PEP 302) để đạt cùng mục tiêu và không gây ra vấn đề với mã giả định rằng triển khai import mặc định đang được sử dụng. Việc dùng trực tiếp __import__() cũng không được khuyến khích, nên dùng importlib.import_module() thay thế.

Hàm nhập module name, có thể dùng globalslocals đã cho để xác định cách giải thích tên trong ngữ cảnh package. fromlist cung cấp tên của các đối tượng hoặc submodule cần được nhập từ module được chỉ định bởi name. Triển khai tiêu chuẩn không dùng đối số locals của nó và chỉ dùng globals để xác định ngữ cảnh package của câu lệnh import.

level chỉ định nên dùng import tuyệt đối hay tương đối. 0 (mặc định) có nghĩa là chỉ thực hiện import tuyệt đối. Các giá trị dương cho level chỉ ra số lượng thư mục cha cần tìm kiếm tương đối so với thư mục của module đang gọi __import__() (xem PEP 328 để biết chi tiết).

Khi biến name có dạng package.module, thông thường, package cấp cao nhất (tên đến dấu chấm đầu tiên) được trả về, không phải module được đặt tên bởi name. Tuy nhiên, khi đối số fromlist không rỗng được cung cấp, module được đặt tên bởi name được trả về.

Ví dụ, câu lệnh import spam dẫn đến bytecode giống đoạn mã sau:

spam = __import__('spam', globals(), locals(), [], 0)

Câu lệnh import spam.ham dẫn đến lời gọi này:

spam = __import__('spam.ham', globals(), locals(), [], 0)

Lưu ý cách __import__() trả về module cấp cao nhất ở đây vì đây là đối tượng được ràng buộc với một tên bởi câu lệnh import.

Mặt khác, câu lệnh from spam.ham import eggs, sausage as saus dẫn đến:

_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage

Ở đây, module spam.ham được trả về từ __import__(). Từ đối tượng này, các tên cần nhập được lấy và gán cho các tên tương ứng.

Nếu bạn chỉ muốn nhập một module (có thể trong một package) theo tên, hãy dùng importlib.import_module().

Thay đổi trong phiên bản 3.3: Các giá trị âm cho level không còn được hỗ trợ (điều này cũng thay đổi giá trị mặc định thành 0).

Thay đổi trong phiên bản 3.9: Khi các tùy chọn dòng lệnh -E hoặc -I đang được dùng, biến môi trường PYTHONCASEOK hiện bị bỏ qua.

Footnotes