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ề
Truenế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ệStopAsyncIterationsẽ được kích hoạt.Added in version 3.10.
- any(iterable, /)¶
Trả về
Truenế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 dorepr()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ủarepr()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
intcủ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à
TruehoặcFalse. 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ớpboollà một lớp con củaint(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àFalsevàTrue(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ốargsvàkws. Theo mặc định,sys.breakpointhook()gọipdb.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ảipdbmộ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ậpsys.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ườngPYTHONBREAKPOINT. Xemsys.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.breakpointvớ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
bytearraylà 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ểubytes, 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ứcstr.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, memoryview và Bytearray 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.byteslà phiên bản không thay đổi được củabytearray-- 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ề
Truenế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 khichr(8364)trả về chuỗi'€'. Đây là hàm nghịch đảo củaord().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ệ
ValueErrorsẽ đượ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
@classmethodlà 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ặceval(). 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ô-đunastđể 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ácNonesẽ được in ra).Các đối số tùy chọn flags và dont_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_flagtrên thực thể_Featuretrong mô-đun__future__. Các Compiler flags có thể được tìm thấy trong mô-đunast, 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à
-1sẽ 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ồm0(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ặc2(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ệ
SyntaxErrorhoặcValueErrornế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
compilevới các đối sốsourcevàfilename. 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ô-đuncode.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ệ
TypeErrorsẽ đượ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_AWAITvà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'('và')'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ưngcomplex('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ấtcomplexvaluetrong 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") |floatvaluesignabsfloatvalue("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ự
intvàfloat. Đối với một đối tượng Pythonxtổng quát,complex(x)sẽ ủy quyền cho phương thứcx.__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.imagvà 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__()và__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ớidel x.foobar. name không nhất thiết phải là một mã định danh Python (xemsetattr()).
- class dict(**kwargs)
- class dict(mapping, /, **kwargs)
- class dict(iterable, /, **kwargs)
Tạo một từ điển mới. Lớp
dictlà 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ô-đuncollections.
- 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ứcdir()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 % brất gần với a; nếua % bkhá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 doenumerate()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ạ globals và locals 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ẵnbuiltinssẽ đượ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 globals và locals 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ọieval()(ví dụ: thông qua câu lệnhnonlocal).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 là'exec', giá trị trả về củaeval()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àmglobals()và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 choeval()hoặcexec().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
execvớ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ố globals và locals 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àreturnkhô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àmexec(). 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ả globals và locals đề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
execnhận được hai đối tượng riêng biệt cho globals và locals, 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ợpbuiltinssẽ đượ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_freevarscủa đối tượng mã đó.Kích hoạt một auditing event
execvớ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()và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àmexec().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àmexec()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ố globals và locals 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 function là
None, 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àNonevà(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ấtfloatvaluetrong 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]digitpartfloatnumber:number[exponent] absfloatvalue:floatnumber|infinity|nanfloatvalue: [sign]absfloatvalueChữ 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ệ
OverflowErrorsẽ đượ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 chox.__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ànhtype(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ệTypeErrorsẽ được kích hoạt nếu quá trình tìm kiếm phương thức đạt tớiobjectmà format_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ạtTypeErrornế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
frozendictlà 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ô-đuncollections.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:`frozensetlà 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ô-đuncollections.
- 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ớix.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ệAttributeErrorsẽ được kích hoạt. name không nhất thiết phải là một mã định danh Python (xemsetattr()).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à
Truenế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ọigetattr(object, name)và kiểm tra xem nó có kích hoạt ngoại lệAttributeErrorhay 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ằnghash()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.
- 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
intcủ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.idvớ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ệ
EOFErrorsẽ đượ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.inputvới đối sốprompttrước khi đọc dữ liệu nhập vào.Kích hoạt một auditing event
builtins.input/resultvớ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ề
0nế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ặcbytearraybiể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đếnz(hoặcAđếnZ). 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ặc0x/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 khiint('010')và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
intvà đối tượng base có phương thứcbase.__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ụngbase.__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
intcó 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ệValueErrorsẽ được kích hoạt khi vượt quá giới hạn trong quá trình chuyển đổi một chuỗi sangint, hoặc khi việc chuyển đổi một sốintsang 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ề
Truenế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ềTruenế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ệTypeErrorsẽ được kích hoạt.TypeErrorcó 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ề
Truenế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ềTruenế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ệTypeErrorsẽ đượ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 đó,TypeErrorsẽ đượ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",StopIterationsẽ đượ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).
lentrả về lỗiOverflowErrorđối với các độ dài lớn hơnsys.maxsize, ví dụ nhưrange(2 ** 100).
- class list(iterable=(), /)
Thay vì là một hàm,
listthực chất là một kiểu trình tự có thể thay đổi, như đã được tài liệu hóa trong Lists và Sequence 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ặceval()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ặceval()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ạ dolocals()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 strict là
Truevà một trong các iterable bị cạn kiệt trước những cái khác, mộtValueErrorsẽ đượ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 xemitertools.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ộtValueErrorsẽ đượ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]và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ộtValueErrorsẽ đượ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]và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ạiStopIterationđượ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.
- 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
intcủ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+'và'w+b'mở và cắt bớt tệp. Các chế độ'r+'và'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ượngbytesmà 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ạngstr, 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ớimode='r+') sẽ có một chế độ đệm khác. Để vô hiệu hóa đệm trongTextIOWrapper, hãy xem xét dùng cờwrite_throughchoio.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 modulecodecsđể 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 newline là
None, 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 newline là
None, 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 là''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 closefd là
Falsevà 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.openlàm opener cho kết quả chức năng tương tự như truyềnNone).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ế độ. Khiopen()đượ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ủaio.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ủaio.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ủaio.RawIOBase,io.FileIO, được trả về.Xem thêm các module xử lý tệp, chẳng hạn như
fileinput,io(nơiopen()được khai báo),os,os.path,tempfile, vàshutil.Kích hoạt sự kiện kiểm tra
openvới các đối sốpath,mode,flags.Các đối số
modevàflagscó 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.IOErrortrước đây được kích hoạt, hiện là bí danh củaOSError.FileExistsErrorhiệ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.RawIOBasekhác vớiio.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ên97vàord('€')(ký hiệu Euro) trả về8364. Đây là hàm ngược củachr().Nếu đối số là đối tượng
byteshoặcbytearraycó độ dài 1, trả về giá trị byte duy nhất của nó. Ví dụ,ord(b'a')trả về số nguyên97.
- 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ưngpow(10, -2)trả về0.01. Đối với cơ số âm kiểuinthoặcfloatvà 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ần3j. Trong khi đó, đối với cơ số âm kiểuinthoặcfloatvớ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
intbase và exp, 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
38theo modulo97:>>> 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ủapowhiệ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, file và flush, 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ả sep và end đề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.stdoutsẽ đượ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ùngfile.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.xsẽ gọi getter,c.x = valuesẽ gọi setter, vàdel c.xgọ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
@propertybiến phương thứcvoltage()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,settervàdeletercó 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 (
xtrong trường hợp này).Đối tượng property trả về cũng có các thuộc tính
fget,fsetvàfdeltươ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,
rangethực ra là một kiểu sequence bất biến, như được mô tả trong Ranges và Sequence 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ếusys.displayhook()không thể truy cập, hàm này sẽ kích hoạtRuntimeError.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)vàround(-0.5)đều là0, vàround(1.5)là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 chonumber.__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)cho2.67thay vì kết quả mong đợi2.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
setmới, với các phần tử tùy chọn được lấy từ iterable.setlà 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,tuplevàdict, cũng như modulecollections.
- 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ớix.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 quagetattr()v.v.Ghi chú
Vì 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.sentinelkhô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ố start và step 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ặca[start:stop, i].Xem
itertools.islice()để biết phiên bản thay thế trả về một iterator.
- 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
@staticmethodlà 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
staticmethodnhư 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__và__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
strcủa object. Xemstr()để biết chi tiết.strlà class 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, xemmath.fsum(). Để nối một loạt các iterable, hãy xem xét dùngitertools.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_type làD -> B -> C -> A -> objectvà giá trị của type làB, thìsuper()tìm kiếmC -> 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()và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().
- class tuple(iterable=(), /)
Thay vì là một hàm,
tuplethực ra là một kiểu sequence bất biến, như được mô tả trong Tuples và Sequence 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ượngtypegiố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
typekhô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ùngtypes.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ặpforhoặc bằng cách bao tronglist.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ọnstrict=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
ValueErrornế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 iteratornlần sao cho mỗi tuple đầu ra có kết quả củanlầ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 modulebuiltinsvà gán chobuiltins.__import__) để thay đổi ngữ nghĩa của câu lệnhimport, 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ùngimportlib.import_module()thay thế.Hàm nhập module name, có thể dùng globals và locals đã 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 spamdẫn đến bytecode giống đoạn mã sau:spam = __import__('spam', globals(), locals(), [], 0)
Câu lệnh
import spam.hamdẫ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ệnhimport.Mặt khác, câu lệnh
from spam.ham import eggs, sausage as sausdẫ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
-Ehoặc-Iđang được dùng, biến môi trườngPYTHONCASEOKhiện bị bỏ qua.
Footnotes