Chức năng tích hợp¶
Trình thông dịch Python có sẵn một số hàm và kiểu được tích hợp sẵn. Chúng được liệt kê ở đây theo thứ tự bảng chữ cái.
Chức năng tích hợp |
|||
|---|---|---|---|
- abs(number, /)¶
Trả về giá trị tuyệt đối của một số. Đối số có thể là số nguyên, số dấu phẩy động hoặc đối tượng triển khai
__abs__(). Nếu đối số là số phức, độ lớn của nó sẽ được trả về.
- aiter(async_iterable, /)¶
Trả về asynchronous iterator cho 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 tất cả (lặp lại): cho phần tử trong iterable: nếu không phải là phần tử: trả về Sai trả về Đúng
- awaitable anext(async_iterator, /)¶
- awaitable anext(async_iterator, default, /)
Khi chờ đợi, hãy trả lại mục tiếp theo từ asynchronous iterator đã cho hoặc default nếu được cung cấp và trình vòng lặp đã hết.
Đây là biến thể không đồng bộ của nội dung
next()và hoạt động tương tự.Điều này gọi phương thức
__anext__()của async_iterator, trả về awaitable. Đang chờ điều này trả về giá trị tiếp theo của trình vòng lặp. Nếu default được cung cấp, nó sẽ được trả về nếu trình lặp đã hết, nếu không thìStopAsyncIterationsẽ được nâng lên.Added in version 3.10.
- any(iterable, /)¶
Trả về
Truenếu bất kỳ phần tử nào của iterable là đúng. Nếu iterable trống, trả vềFalse. Tương đương với:def bất kỳ (lặp lại): cho phần tử trong iterable: nếu phần tử: trả về Đúng trả về Sai
- ascii(object, /)¶
Giống như
repr(), 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 thoát khỏi các ký tự không phải ASCII trong chuỗi đượcrepr()trả về bằng cách sử dụng các ký tự thoát\x,\uhoặc\U. Điều này tạo ra một chuỗi tương tự như chuỗi được trả về bởirepr()trong Python 2.
- bin(integer, /)¶
Chuyển đổi một số nguyên thành chuỗi nhị phân có tiền tố "0b". 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, thì 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ụ:>>> bin(3) '0b11' >>> bin(-10) '-0b1010'
Nếu muốn hay không muốn tiền tố "0b", bạn có thể sử dụng một trong các cách sau.
>>> format(14, '#b'), format(14, 'b') ('0b1110', '1110') >>> f'{14:#b}', f'{14:b}' ('0b1110', '1110')
Xem thêm
enum.bin()để biểu thị các giá trị âm dưới dạng phần bù hai.Xem thêm
format()để biết thêm thông tin.
- class bool(object=False, /)¶
Trả về giá trị Boolean, tức là một trong
TruehoặcFalse. Đối số được chuyển đổi bằng truth testing procedure tiêu chuẩn. Nếu đối số sai hoặc bị bỏ qua, kết quả này trả vềFalse; nếu không, nó trả vềTrue. Lớpboollà lớp con củaint(xem Các loại số --- int, float, complex). Nó không thể được phân lớp thêm nữa. Phiên bản duy nhất của nó làFalsevàTrue(xem Kiểu Boolean - bool).Thay đổi trong phiên bản 3.7: Tham số hiện chỉ có vị trí.
- breakpoint(*args, **kws)¶
Chức năng này đưa bạn vào trình gỡ lỗi tại trang cuộc gọi. Cụ thể, nó gọi
sys.breakpointhook(), chuyển thẳngargsvàkws. Theo mặc định,sys.breakpointhook()gọipdb.set_trace()không có đối số. Trong trường hợp này, đây hoàn toàn là một chức năng tiện lợi nên bạn không cần phải nhậppdbmột cách rõ ràng hoặc nhập nhiều mã để vào trình gỡ lỗi. Tuy nhiên,sys.breakpointhook()có thể được đặt thành một số chức năng khác vàbreakpoint()sẽ tự động gọi chức năng đó, cho phép bạn truy cập vào trình gỡ lỗi mà bạn chọn. Nếusys.breakpointhook()không truy cập được, chức năng này sẽ tăngRuntimeError.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 sử dụng.Lưu ý rằng điều này không được đảm bảo nếu
sys.breakpointhook()đã được thay thế.Tăng 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 số nguyên có thể thay đổi trong phạm vi 0 <= x < 256. Nó có hầu hết các phương thức thông thường của chuỗi có thể thay đổi, được mô tả trong Các loại trình tự có thể thay đổi, cũng như hầu hết các phương thức mà loạibytescó, xem Hoạt động byte và bytearray.Tham số source tùy chọn có thể được sử dụng để khởi tạo mảng theo một số cách khác nhau:
Nếu đó là string, bạn cũng phải cung cấp các tham số encoding (và tùy chọn, errors);
bytearray()sau đó chuyển đổi chuỗi thành byte bằngstr.encode().Nếu là integer, mảng sẽ có kích thước đó và sẽ được khởi tạo bằng byte rỗng.
Nếu đó là một đối tượng tuân theo buffer interface, bộ đệm chỉ đọc của đối tượng sẽ được sử dụng để khởi tạo mảng byte.
Nếu là iterable, thì nó phải là một số nguyên có thể lặp lại trong phạm vi
0 <= x < 256, được sử dụng làm nội dung ban đầu của mảng.
Không có đối số, một mảng có kích thước 0 sẽ được tạo.
Xem thêm Các loại chuỗi nhị phân --- bytes, bytearray, memoryview và Đối tượng bytearray.
- class bytes(source=b'')
- class bytes(source, encoding, errors='strict')
Trả về một đối tượng "byte" mới là một chuỗi số nguyên bất biến trong phạm vi
0 <= x < 256.byteslà một phiên bản bất biến củabytearray-- nó có cùng các phương thức không biến đổi cũng như hành vi lập chỉ mục và cắt giống nhau.Theo đó, các đối số của hàm tạo được hiểu là dành cho
bytearray().Các đối tượng byte cũng có thể được tạo bằng chữ, xem Chuỗi và byte bằng chữ.
Xem thêm Các loại chuỗi nhị phân --- bytes, bytearray, memoryview, Đối tượng byte và Hoạt động byte và bytearray.
- callable(object, /)¶
Trả về
Truenếu đối số object có vẻ có thể gọi được,Falsenếu không. Nếu điều này trả vềTruethì vẫn có khả năng cuộc gọi không thành công, nhưng nếu làFalsethì việc gọi object sẽ không bao giờ 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ể hiện mới); các phiên bản 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 tiên bị xóa trong 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ự có điểm mã Unicode được chỉ định. Ví dụ:
chr(97)trả về chuỗi'a', trong khichr(8364)trả về chuỗi'€'. Đây là nghịch đảo củaord().Phạm vi hợp lệ cho đối số là từ 0 đến 1.114.111 (0x10FFFF trong cơ sở 16).
ValueErrorsẽ được tăng lên nếu nó 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 đó dưới dạng đối số đầu tiên ngầm định, giống như một phương thức cá thể nhận cá thể đó. Để khai báo một phương thức lớp, hãy sử dụng thành ngữ này:
lớp C: @classmethod def f(cls, arg1, arg2): ...
Biểu mẫu
@classmethodlà một hàm decorator -- xem định nghĩa hàm để biết 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 phiên bản (chẳng hạn nhưC().f()). Thể hiện bị bỏ qua ngoại trừ lớp của nó. Nếu một phương thức lớp được gọi cho một lớp dẫn xuất, thì đối tượng của lớp dẫn xuất sẽ được truyền dưới dạng đối số đầu tiên được ngụ ý.Các phương thức lớp khác với các phương thức tĩnh C++ hoặc Java. Nếu bạn muốn những thứ đó, 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 Hệ thống phân cấp loại tiêu chuẩn.Thay đổi trong phiên bản 3.9: Các phương thức lớp hiện có thể bao bọc các descriptors khác, chẳng hạn như
property().Thay đổi trong phiên bản 3.10: Các phương thức lớp hiện kế thừa các thuộc tính phương thức (
__module__,__name__,__qualname__,__doc__và__annotations__) và có thuộc tính__wrapped__mới.Không được dùng nữa kể từ phiên bản 3.11, đã bị xóa trong phiên bản 3.13: Các phương thức lớp không còn có thể bao bọc các descriptors khác như
property()nữa.
- compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)¶
Biên dịch source thành mã hoặc đối tượng AST. Các đối tượng mã có thể được thực thi bởi
exec()hoặceval(). source có thể là chuỗi bình thường, chuỗi byte hoặc đối tượng AST. Tham khảo tài liệu 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 sẽ cung cấp tệp mà mã được đọc; chuyển một số giá trị có thể nhận biết nếu nó không được đọc từ một tệp (
'<string>'thường được sử dụng).Đối số mode chỉ định loại mã nào phải đượ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 nó bao gồm một biểu thức duy nhất hoặc'single'nếu nó bao gồm một câu lệnh tương tác duy nhất (trong trường hợp sau, các câu lệnh biểu thức đánh giá một thứ khác ngoàiNonesẽ được in).Các đối số tùy chọn flags và dont_inherit kiểm soát compiler options nào sẽ được kích hoạt và future features nào sẽ được cho phép. Nếu không có (hoặc cả hai đều bằng 0), mã sẽ được biên dịch với cùng các cờ ảnh hưởng đến mã đang gọi
compile(). Nếu đối số flags được đưa ra và dont_inherit không phải (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 trong tương lai được chỉ định bởi đối số flags sẽ được sử dụng cùng với những đối số sẽ được sử dụng. Nếu dont_inherit là số nguyên khác 0 thì đối số flags chính là nó -- các cờ (các tính năng trong tương lai và tùy chọn trình biên dịch) trong mã xung quanh sẽ bị bỏ qua.Các tùy chọn trình biên dịch và các câu lệnh trong tương lai được chỉ định bằng các bit có thể được OR theo bit cùng nhau để chỉ định nhiều tùy chọn. Trường bit cần thiết để chỉ định một tính năng nhất định trong tương lai có thể được tìm thấy dưới dạng thuộc tính
compiler_flagtrên phiên bản_Featuretrong mô-đun__future__. 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 của
-1chọ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 rõ ràng là0(không tối ưu hóa;__debug__là đúng),1(xác nhận đã bị xóa,__debug__là sai) hoặc2(chuỗi tài liệu cũng bị xóa).Hàm này tăng
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ã Python thành biểu diễn AST, hãy xem
ast.parse().Tăng một auditing event
compilevới các đối sốsourcevàfilename. Sự kiện này cũng có thể được nêu ra bằng cách biên dịch ngầm.Ghi chú
Khi biên dịch một chuỗi có mã nhiều dòng ở chế độ
'single'hoặc'eval', đầu 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 đầy đủ và đầy đủ trong mô-đuncode.Cảnh báo
Có thể làm hỏng trình thông dịch Python với một chuỗi đủ lớn/phức tạp khi biên dịch thành đối tượng AST do giới hạn độ sâu ngăn xếp trong trình biên dịch AST của Python.
Thay đổi trong phiên bản 3.2: Được phép sử dụng các dòng mới của Windows và Mac. Ngoài ra, đầu vào ở chế độ
'exec'không còn phải kết thúc ở dòng mới nữa. Đã thêm tham số optimize.Thay đổi trong phiên bản 3.5: Trước đây,
TypeErrorđược nâng lên khi gặp byte rỗng trong source.Added in version 3.8:
ast.PyCF_ALLOW_TOP_LEVEL_AWAIThiện có thể được chuyển vào cờ để cho phép hỗ trợ choawait,async forvàasync withcấp cao nhất.
- class complex(number=0, /)¶
- class complex(string, /)
- class complex(real=0, imag=0)
Chuyển đổi một chuỗi hoặc số thành số phức hoặc tạo số phức từ phần thực và phần ảo.
Ví dụ:
>>> phức tạp('+1.23') (1,23+0j) >>> phức tạp('-4.5j') -4.5j >>> phức tạp('-1.23+4.5j') (-1,23+4,5j) >>> phức tạp('\t( -1.23+4.5J )\n') (-1,23+4,5j) >>> phức tạp('-Infinity+NaNj') (-inf+nanj) >>> phức hợp (1.23) (1,23+0j) >>> phức tạp(hình ảnh=-4.5) -4.5j >>> phức tạp(-1.23, 4.5) (-1,23+4,5j)
Nếu đối số là một chuỗi thì nó phải chứa phần thực (có cùng định dạng với
float()) hoặc phần ảo (có cùng định dạng nhưng có hậu tố'j'hoặc'J') hoặc cả phần thực và phần ảo (dấu hiệu của phần ảo là bắt buộc trong trường hợp này). Chuỗi có thể tùy ý được bao quanh bởi các khoảng trắng và các dấu ngoặc tròn'('và')', những dấu ngoặc đơn này sẽ bị bỏ qua. Chuỗi không được chứa khoảng trắng giữa'+','-', hậu tố'j'hoặc'J'và số thập phân. Ví dụ:complex('1+2j')vẫn ổn, nhưngcomplex('1 + 2j')lại tăngValueError. Chính xác hơn, đầu vào phải tuân theo quy tắc sản xuấtcomplexvaluetrong ngữ pháp sau, sau khi xóa dấu ngoặc đơn và các ký tự khoảng trắng ở đầu và cuối:complexvalue:
floatvalue|floatvalue("j" | "J") |floatvaluesignabsfloatvalue("j" | "J")Nếu đối số là một số thì hàm tạo sẽ đóng vai trò chuyển đổi số như
intvàfloat. Đối với một đối tượng Python chungx,complex(x)ủy quyền chox.__complex__(). Nếu__complex__()không được xác định thì nó sẽ quay trở lại__float__(). Nếu__float__()không được xác định thì nó sẽ quay trở lại__index__().Nếu hai đối số được cung cấp hoặc đối số từ khóa được sử dụng thì mỗi đối số có thể là bất kỳ loại số nào (bao gồm cả số phức). Nếu cả hai đối số đều là số thực, hãy trả về một số phức có thành phần thực real và thành phần ảo imag. Nếu cả hai đối số đều là số phức, hãy trả về số phức có thành phần thực
real.real-imag.imagvà thành phần ảoreal.imag+imag.real. Nếu một trong các đối số là số thực thì chỉ thành phần thực của nó được sử dụng trong các biểu thức trên.Xem thêm
complex.from_number()chỉ chấp nhận một đối số số duy nhất.Nếu tất cả đối số bị bỏ qua, trả về
0j.Loại phức tạp được mô tả trong Các loại số --- int, float, complex.
Thay đổi trong phiên bản 3.6: Cho phép nhóm các chữ số có dấu gạch dưới như trong chữ mã.
Thay đổi trong phiên bản 3.8: Trở lại
__index__()nếu__complex__()và__float__()không được xác định.Sắp loại bỏ từ phiên bản 3.14: Việc truyền số phức dưới dạng đối số real hoặc imag hiện không được dùng nữa; nó chỉ nên được thông qua dưới dạng một đối số vị trí duy nhất.
- delattr(object, name, /)¶
Đây là họ hàng của
setattr(). Các đối số là một đối tượng và một chuỗi. Chuỗi phải là tên của một trong các thuộc tính của đối tượng. Hàm xóa thuộc tính được đặt tên, miễn là đối tượng cho phép. Ví dụ:delattr(x, 'foobar')tương đương vớidel x.foobar. name không cần phải là 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. Đối tượng
dictlà lớp từ điển. Xemdictvà Các loại ánh xạ --- dict để biết tài liệu về lớp này.Đối với các vùng chứa khác, hãy xem các lớp
list,setvàtupletích hợp sẵn cũng như mô-đuncollections.
- dir()¶
- dir(object, /)
Không có đối số, trả về danh sách tên trong phạm vi cục bộ hiện tại. Với một đối số, hãy thử trả về danh sách các thuộc tính hợp lệ cho đối tượng đó.
Nếu đối tượng có một phương thức có tên là
__dir__()thì 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 triển khai chức năng__getattr__()hoặc__getattribute__()tùy chỉnh để tùy chỉnh cáchdir()báo cáo các thuộc tính của chúng.Nếu đối tượng không cung cấp
__dir__(), hàm sẽ cố gắng hết sức để thu thập thông tin từ thuộc tính__dict__của đối tượng, nếu được xác định và từ đối tượng loại 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ó__getattr__()tùy chỉnh.Cơ chế
dir()mặc định hoạt động khác nhau với các loại đối tượng khác nhau, vì nó cố gắng tạo ra thông tin có liên quan nhất, thay vì đầy đủ:Nếu đối tượng là một đối tượng mô-đun, danh sách 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, thì danh sách sẽ chứa tên các thuộc tính của nó và đệ quy các thuộc tính của các cơ sở của nó.
Mặt khác, danh sách chứa tên thuộc tính của đối tượng, tên thuộc tính của lớp và đệ quy các thuộc tính của các lớp cơ sở của lớp nó.
Danh sách kết quả được sắp xếp theo thứ tự abc. 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__', '__cached__', '__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ú
Vì
dir()được cung cấp chủ yếu để thuận tiện cho việc sử dụng tại dấu nhắc tương tác nên nó cố gắng cung cấp một bộ tên thú vị hơn là cố gắng cung cấp một bộ tên được xác định chặt chẽ hoặc nhất quán và hành vi chi tiết của nó có thể thay đổi giữa các bản phát hành. Ví dụ: thuộc tính siêu dữ liệu không có trong danh sách kết quả khi đối số là một lớp.
- divmod(a, b, /)¶
Lấy hai số (không phức tạp) 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 số nguyên. Với các loại 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ả giống như
(a // b, a % b). Đối với các số có 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 1 đơn vị. Trong mọi trường hợp,q * b + a % brất gần với a, nếua % bkhác 0 thì nó 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 liệt kê. iterable phải là một chuỗi, iterator hoặc một số đối tượng khác hỗ trợ phép lặp. Phương thức
__next__()của trình lặp được trả về bởienumerate()trả về một bộ chứa số đếm (từ start mặc định là 0) và các giá trị thu đượ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:
liệt kê def (lặp lại, bắt đầu = 0): n = bắt đầu cho phần tử trong iterable: năng suất n, phần tử n += 1
- eval(source, /, globals=None, locals=None)¶
- Tham số:
source (
str| code object) -- Một biểu thức Python.globals (
dict|None) -- Không gian tên chung (mặc định:None).locals (mapping |
None) -- Không gian tên cục bộ (mặc định:None).
- Trả về:
Kết quả của biểu thức được đánh giá.
- tăng:
Lỗi cú pháp được báo cáo là ngoại lệ.
Cảnh báo
Hàm này thực thi mã tùy ý. Gọi nó bằng đầu vào do người dùng cung cấp không đáng tin cậy 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à đánh giá dưới dạng biểu thức Python (về mặt kỹ thuật, là danh sách điều kiện) bằng cách sử dụng ánh xạ globals và locals làm không gian tên chung 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__, thì tham chiếu đến từ điển của mô-đun tích hợpbuiltinssẽ được chèn vào bên dưới khóa đó trước khi source được phân tích cú pháp. Ghi đè__builtins__có thể được sử dụng để hạn chế hoặc thay đổi các tên có sẵn, nhưng not 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 nội trang. Nếu ánh xạ locals bị bỏ qua, nó sẽ mặc định là từ điển globals. Nếu cả hai ánh xạ bị bỏ qua, nguồn sẽ được thực thi với globals và locals trong môi trường nơieval()được gọi. Lưu ý, eval() sẽ chỉ có quyền truy cập vào nested scopes (không phải cục bộ) trong môi trường kèm theo nếu chúng đã được tham chiếu trong phạm vi đ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'exec'làm đối số mode, giá trị trả về củaeval()sẽ làNone.Gợi ý: Việc thực thi các câu lệnh độ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ầu và cục bộ hiện tại, có thể hữu ích để chuyển choeval()hoặcexec()sử dụng.Nếu nguồn đã cho là một chuỗi thì các dấu cách và tab ở đầu và cuối sẽ bị loại bỏ.
Xem
ast.literal_eval()để biết hàm đánh giá các chuỗi có biểu thức chỉ chứa chữ.Tăng một auditing event
execvới đối tượng mã làm đối số. Các sự kiện biên dịch mã cũng có thể được nêu ra.Thay đổi trong phiên bản 3.13: Các đối số globals và locals hiện có thể được chuyển dưới dạng từ khóa.
Thay đổi trong phiên bản 3.13: Ngữ nghĩa của không gian tên locals mặc định đã được điều chỉnh như mô tả cho nội dung
locals().
- exec(source, /, globals=None, locals=None, *, closure=None)¶
Cảnh báo
Hàm này thực thi mã tùy ý. Gọi nó bằng đầu vào do người dùng cung cấp không đáng tin cậy sẽ dẫn đến các lỗ hổng bảo mật.
Hàm này hỗ trợ thực thi động mã Python. 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 dưới dạng một bộ câu lệnh Python sau đó được thực thi (trừ khi xảy ra lỗi cú pháp). [1] Nếu nó là một đối tượng mã, nó sẽ được thực thi đơn giản. Trong mọi trường hợp, mã được thực thi dự kiến sẽ hợp lệ dưới dạng đầu vào tệp (xem phần Nhập tập tin trong Tài liệu tham khảo). Xin lưu ý rằng các câu lệnh
nonlocal,yieldvàreturnkhông được sử dụng bên ngoài các định nghĩa hàm ngay cả trong ngữ cảnh mã được truyền tới hàmexec(). Giá trị trả về làNone.Trong mọi trường hợp, nếu bỏ qua các phần tùy chọn, mã sẽ được thực thi trong phạm vi hiện tại. Nếu chỉ cung cấp globals thì nó phải là một từ điển (chứ không phải một lớp con của từ điển), từ điển này sẽ được sử dụng cho cả biến toàn cục và biến cục bộ. Nếu globals và locals được đưa ra, chúng sẽ được sử dụng tương ứ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, toàn cục và cục bộ là cùng một từ điển.
Ghi chú
Khi
execcó hai đối tượng riêng biệt là globals và locals, mã sẽ được thực thi như thể nó được nhúng trong định nghĩa lớp. Điều này có nghĩa là các hàm và lớp được xác định 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 coi là biến lớp trong đị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 bên dưới khóa đó. Ghi đè__builtins__có thể được sử dụng để hạn chế hoặc thay đổi các tên có sẵn, nhưng not 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 nội trang.Đối số closure chỉ định một bao đóng - một bộ các ô. Nó chỉ hợp lệ khi object là đối tượng mã chứa free (closure) variables. Độ dài của bộ dữ liệu phải khớp chính xác với độ dài thuộc tính
co_freevarscủa đối tượng mã.Tăng một auditing event
execvới đối tượng mã làm đối số. Các sự kiện biên dịch mã cũng có thể được nêu ra.Ghi chú
Các hàm dựng sẵn
globals()vàlocals()lần lượt trả về không gian tên chung và cục bộ hiện tại, có thể hữu ích để chuyển xung quanh để sử dụng làm đối số thứ hai và thứ ba choexec().Ghi chú
locals mặc định hoạt động như được mô tả cho hàm
locals()bên dưới. Chuyển từ điển locals rõ ràng nếu bạn cần xem tác dụng của mã trê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: Các đối số globals và locals hiện có thể được chuyển dưới dạng từ khóa.
Thay đổi trong phiên bản 3.13: Ngữ nghĩa của không gian tên locals mặc định đã được điều chỉnh như mô tả cho nội dung
locals().
- filter(function, iterable, /)¶
Xây dựng một trình vòng lặp từ các phần tử của iterable mà function là đúng. iterable có thể là một chuỗi, một vùng chứa hỗ trợ phép lặp hoặc một trình vòng lặp. Nếu function là
None, hàm nhận dạng được giả định, nghĩa là tất cả các phần tử của iterable sai sẽ bị xóa.Lưu ý rằng
filter(function, iterable)tương đương với biểu thức trình tạo(item for item in iterable if function(item))nếu hàm không phải làNonevà(item for item in iterable if item)nếu hàm làNone.Xem
itertools.filterfalse()để biết hàm bổ sung trả về các phần tử của iterable mà function là sai.
- class float(number=0.0, /)¶
- class float(string, /)
Trả về số dấu phẩy động được xây dựng 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 >>> phao('+1E6') 1000000.0 >>> float('-Infinity') -inf
Nếu đối số là một chuỗi thì nó phải chứa một số thập phân, tùy ý đặt trước một dấu hiệu và tùy ý nhúng vào khoảng trắng. Dấu hiệ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 (không phải số) hoặc vô cực dương hoặc âm. Chính xác hơn, đầu vào phải tuân theo quy tắc sản xuấtfloatvaluetrong ngữ pháp sau, sau khi loại bỏ các ký tự khoảng trắng ở đầu và cuối: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 chữ thường không đáng kể, vì vậy, ví dụ: "inf", "Inf", "INFINITY" và "iNfINity" đều là cách viết được chấp nhận cho số dương vô cùng.
Mặt khác, nếu đối số là số nguyên hoặc số dấu phẩy động, thì số dấu phẩy động có cùng giá trị (trong độ chính xác dấu phẩy động của Python) sẽ được trả về. Nếu đối số nằm ngoài phạm vi của float Python,
OverflowErrorsẽ được nâng lên.Đối với một đối tượng Python chung
x,float(x)ủy quyền chox.__float__(). Nếu__float__()không được xác định thì nó sẽ quay trở lại__index__().Xem thêm
float.from_number()chỉ chấp nhận đối số số.Nếu không có đối số nào được đưa ra,
0.0sẽ được trả về.Loại float được mô tả trong Các loại số --- int, float, complex.
Thay đổi trong phiên bản 3.6: Cho phép nhóm các chữ số có dấu gạch dưới như trong chữ mã.
Thay đổi trong phiên bản 3.7: Tham số hiện chỉ có vị trí.
Thay đổi trong phiên bản 3.8: Quay trở lại
__index__()nếu__float__()không được xác định.
- format(value, format_spec='', /)¶
Chuyển đổi value thành biểu diễn "được định dạng", do format_spec điều khiển. Việc giải thích format_spec sẽ phụ thuộc vào loại đối số value; tuy nhiên, có một cú pháp định dạng chuẩn được hầu hết các loại tích hợp sẵn sử dụng: Đặc tả định dạng ngôn ngữ nhỏ.
Zz001zz mặc định là một chuỗi trống thường mang lại tác dụng tương tự như gọi
str(value).Lệnh gọi tới
format(value, format_spec)được dịch sangtype(value).__format__(value, format_spec), bỏ qua từ điển phiên bản khi tìm kiếm phương thức__format__()của giá trị. Một ngoại lệTypeErrorđược đưa ra nếu tìm kiếm phương thức đạt tớiobjectvà format_spec không trống hoặc nếu format_spec hoặc giá trị trả về không phải là chuỗi.Thay đổi trong phiên bản 3.4:
object().__format__(format_spec)tăngTypeErrornếu format_spec không phải là một chuỗi trống.
- class frozenset(iterable=(), /)
Trả về một đối tượng
frozensetmới, tùy chọn với các phần tử được lấy từ iterable.frozensetlà một lớp được tích hợp sẵn. Xemfrozensetvà Đặt các loại --- set, frozenset để biết tài liệu về lớp này.Đối với các vùng chứa khác, hãy xem các lớp
set,list,tuplevàdicttích hợp sẵn 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 thì kết quả 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, default sẽ được trả về nếu được cung cấp, nếu không thìAttributeErrorsẽ được nâng lên. name không cần phải là mã định danh Python (xemsetattr()).Ghi chú
Vì private name mangling xảy ra vào thời gian biên dịch, nên người ta phải đọc sai tên của thuộc tính riêng tư (thuộc tính có hai dấu gạch dưới ở đầu) theo cách thủ công để truy xuất nó bằng
getattr().
- globals()¶
Trả về từ điển triển khai không gian tên mô-đun hiện tại. Đối với mã bên trong các hàm, giá trị này được đặt khi hàm được xác định và giữ nguyên bất kể hàm được gọi ở đâu.
- hasattr(object, name, /)¶
Các đối số là 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,Falsenếu không. (Điều này được thực hiện bằng cách gọigetattr(object, name)và xem liệu nó có tăngAttributeErrorhay không.)
- hash(object, /)¶
Trả về giá trị băm của đối tượng (nếu có). Giá trị băm là số nguyên. Chúng được sử dụng để so sánh nhanh các khóa từ điển trong quá trình tra cứu từ điển. Các giá trị số so sánh bằng nhau có cùng giá trị băm (ngay cả khi chúng thuộc các loại khác nhau, 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, hãy lưu ý rằnghash()cắt bớt 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. (Chức năng này nhằm mục đích sử dụng tương tác.) Nếu không có đối số nào được đưa ra, hệ thống trợ giúp tương tác sẽ khởi động trên bảng điều khiển thông dịch. Nếu đối số là một chuỗi thì chuỗi đó sẽ được tra cứu dưới dạng tên của mô-đun, hàm, lớp, phương thức, từ khóa hoặc chủ đề tài liệu và trang trợ giúp sẽ được in trên bảng điều khiển. 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.
Lưu ý rằng nếu dấu gạch chéo (/) xuất hiện trong danh sách tham số của hàm khi gọi
help(), điều đó có nghĩa là các tham số trước dấu gạch chéo chỉ là vị trí. Để biết thêm thông tin, xem the FAQ entry on positional-only parameters.Chức năng này được thêm vào không gian tên tích hợp bởi mô-đun
site.
- hex(integer, /)¶
Chuyển đổi một số nguyên thành chuỗi thập lục phân chữ thường có tiền tố "0x". Nếu integer không phải là đối tượng
intcủa Python, thì 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 chuỗi thập lục phân viết hoa hoặc viết thường có tiền tố hay 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')
Xem thêm
format()để biết thêm thông tin.Xem thêm
int()để chuyển đổi chuỗi thập lục phân thành số nguyên sử dụng cơ số 16.Ghi chú
Để có được biểu diễn chuỗi thập lục phân cho float, hãy sử dụng phương thức
float.hex().
- id(object, /)¶
Trả về "danh tính" 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ó thời gian tồn tại không chồng chéo có thể có cùng giá trị
id().Đây là địa chỉ của đối tượng trong bộ nhớ.
Tăng một auditing event
builtins.idvới đối sốid.
- input()¶
- input(prompt, /)
Nếu có đối số prompt, nó sẽ được ghi vào đầu ra tiêu chuẩn mà không có dòng mới ở cuối. Sau đó, hàm sẽ đọc một dòng từ đầu vào, chuyển đổi nó thành một chuỗi (loại bỏ dòng mới ở cuối) và trả về dòng đó. Khi EOF được đọc,
EOFErrorsẽ được nâng lên. Ví dụ:>>> s = input('--> ') --> Monty Python's Flying Circus >>> s "Monty Python's Flying Circus"
Nếu mô-đun
readlineđã được tải thì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 phức tạp.Tăng auditing event
builtins.inputvới đối sốprompttrước khi đọc đầu vàoTăng auditing event
builtins.input/resultvới kết quả sau khi đọc dữ liệu đầu 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 xây dựng từ một số hoặc một chuỗi hoặc trả về
0nếu không có đối số nào được đưa ra.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ố xác định
__int__(),int(x)trả vềx.__int__(). Nếu đối số xác định__index__(), nó sẽ trả vềx.__index__(). Đối với các số có dấu phẩy động, điều này cắt ngắn về 0.Nếu đối số không phải là số hoặc nếu base được đưa ra thì đối số đó phải là một chuỗi,
byteshoặcbytearraybiểu thị một số nguyên trong cơ số base. Theo tùy chọn, chuỗi có thể được đặt trước bởi+hoặc-(không có khoảng trắng ở giữa), có các số 0 đứ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ố.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ị 0--9 có thể được biểu thị bằng bất kỳ chữ số thập phân Unicode nào. Các giá trị 10--35 có thể được biểu thị bằng
ađếnz(hoặcAđếnZ). Zz014zz mặc định là 10. Cơ sở được phép là 0 và 2--36. Các chuỗi Base-2, -8 và -16 có thể được thêm tiền tố tùy ý bằng0b/0B,0o/0Ohoặc0x/0X, giống như với các chữ số nguyên trong mã. Đối với cơ sở 0, chuỗi được diễn giải theo cách tương tự như integer literal in code, trong đó cơ sở thực tế là 2, 8, 10 hoặc 16 như được xác định bởi tiền tố. Cơ sở 0 cũng không cho phép các số 0 đứng đầu:int('010', 0)không hợp pháp, trong khiint('010')vàint('010', 8)thì có.Kiểu số nguyên được mô tả trong Các loại số --- int, float, complex.
Thay đổi trong phiên bản 3.4: Nếu base không phải là một phiên bản của
intvà đối tượng base có phương thứcbase.__index__, thì phương thức đó sẽ được gọi để lấy số nguyên cho cơ sở. Các phiên bản trước 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ố có dấu gạch dưới như trong chữ mã.
Thay đổi trong phiên bản 3.7: Tham số đầu tiên bây giờ chỉ có vị trí.
Thay đổi trong phiên bản 3.8: Quay trở lại
__index__()nếu__int__()không được xác định.Thay đổi trong phiên bản 3.11: Đầu vào chuỗi
intvà biểu diễn chuỗi 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ụ. MộtValueErrorđược nâng lên khi vượt quá giới hạn trong khi chuyển đổi một chuỗi thànhinthoặc khi chuyển đổiintthành một chuỗi sẽ vượt quá giới hạn. Xem tài liệu integer string conversion length limitation.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 phiên bản của đối số classinfo hoặc của lớp con (trực tiếp, gián tiếp hoặc virtual) của chúng. Nếu object không phải là đối tượng thuộc loại đã cho thì hàm luôn trả vềFalse. Nếu classinfo là một bộ gồm các đối tượng loại (hoặc đệ quy, các bộ khác như vậy) hoặc một Loại công đoàn có nhiều loại, hãy trả vềTruenếu object là một phiên bản của bất kỳ loại nào. Nếu classinfo không phải là một loại hoặc một bộ các loại và các bộ dữ liệu như vậy, thì một ngoại lệTypeErrorsẽ xuất hiện.TypeErrorcó thể không được nâng lên đối với loại không hợp lệ nếu lần kiểm tra trước đó thành công.Thay đổi trong phiên bản 3.10: classinfo có thể là Loại công đoàn.
- issubclass(class, classinfo, /)¶
Trả về
Truenếu class là lớp con (trực tiếp, gián tiếp hoặc virtual) của classinfo. Một lớp được coi là một lớp con của chính nó. classinfo có thể là một bộ của các đối tượng lớp (hoặc đệ quy, các bộ khác như vậy) hoặc Loại công đoàn, trong trường hợp đó trả vềTruenếu class 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ẽ xuất hiện.Thay đổi trong phiên bản 3.10: classinfo có thể là Loại công đoàn.
- iter(iterable, /)¶
- iter(callable, sentinel, /)
Trả về một đối tượng iterator. Đối số đầu tiên được diễn giải rất khác nhau tùy thuộc vào sự hiện diện của đối số thứ hai. Nếu không có đối số thứ hai, đối số duy nhất phải là đố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 chuỗi (phương thức__getitem__()với các đối số số nguyên bắt đầu từ0). Nếu nó không hỗ trợ một trong hai giao thức đó,TypeErrorsẽ được nâng lên. Nếu đối số thứ hai, sentinel, được đưa ra thì đối số đầu tiên phải là một đối tượng có thể gọi được. Trình vòng lặp được tạo trong trường hợp này sẽ gọi callable mà không có đối số cho mỗi lệnh gọi đến phương thức__next__()của nó; nếu giá trị trả về bằng sentinel thìStopIterationsẽ được nâng lên, nếu không thì giá trị sẽ được trả về.Xem thêm Các loại vòng lặp.
Một ứng dụng hữu ích của dạng
iter()thứ hai là xây dựng trình đọc khối. Ví dụ: đọc các khối có chiều rộng cố định từ tệp cơ sở dữ liệu nhị phân cho đến khi đạt đến cuối tệptừ functools nhập một phần với open('mydata.db', 'rb') là f: cho khối trong iter(partial(f.read, 64), b''): tiến trình_block(khối)
- len(object, /)¶
Trả về độ dài (số lượng phần tử) của một đối tượng. Đối số có thể là một chuỗi (chẳng hạn như một chuỗi, byte, bộ, danh sách hoặc phạm vi) hoặc một bộ sưu tập (chẳng hạn như từ điển, tập hợp hoặc tập hợp cố định).
lentăngOverflowErrortrên độ dài lớn hơnsys.maxsize, chẳng hạn nhưrange(2 ** 100).
- class list(iterable=(), /)
Thay vì là một hàm,
listthực sự là một loại trình tự có thể thay đổi, như được ghi lại trong Danh sách và Các loại trình tự --- 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 các tên biến làm khóa và các tham chiếu hiện tại của chúng làm giá trị.
Ở phạm vi mô-đun, cũng như khi sử dụng
exec()hoặceval()với một không gian tên duy nhất, hàm này trả về cùng một không gian tên nhưglobals().Ở phạm vi lớp, nó trả về không gian tên sẽ được chuyển tới hàm tạo siêu dữ liệu.
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ó sẽ trả về vùng tên cục bộ được truyền vào lệnh gọi hàm.Trong tất cả các trường hợp trên, mỗi lệnh gọi tới
locals()trong một khung thực thi nhất định sẽ trả về đối tượng ánh xạ same. Những thay đổi được thực hiện thông qua đối tượng ánh xạ được trả về từlocals()sẽ hiển thị dưới dạng các biến cục bộ được gán, gán lại hoặc xóa và việc gán, gán lại hoặc xóa các biến cục bộ sẽ ảnh hưởng ngay đến nội dung của đối tượng ánh xạ được trả về.Trong optimized scope (bao gồm các hàm, trình tạo và coroutine), mỗi lệnh gọi tớ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à mọi tham chiếu ô không cục bộ. 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 lệnh trả về là not được ghi lại vào các biến cục bộ tương ứng hoặc tham chiếu ô không cục bộ và việc gán, gán lại hoặc xóa các biến cục bộ và tham chiếu ô không cục bộ có ảnh hưởng đến not nội dung của từ điển được trả về trước đó hay không.Gọi
locals()như một phần của phần hiểu trong hàm, trình tạo hoặc coroutine tương đương với việc gọi nó trong phạm vi chứa, ngoại trừ việc bao gồm các biến lặp khởi tạo của phần hiểu. Trong các phạm vi khác, nó hoạt động như thể khả năng hiểu đang chạy như một hàm lồng nhau.Gọi
locals()như một phần của biểu thức trình tạo tương đương với việc gọi nó trong hàm tạo lồng nhau.Thay đổi trong phiên bản 3.12: Hành vi của
locals()theo cách hiểu đã đượ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 giống như được mô tả ở trên. Ngoài việc được xác định, 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 vòng lặp áp dụng function cho mọi mục của iterable, mang lại kết quả. Nếu các đối số iterables bổ sung được thông qua, function phải lấy nhiều đối số đó và được áp dụng song song cho các mục từ tất cả các lần lặp. Với nhiều lần lặp, trình lặp sẽ dừng khi hết lần lặp ngắn nhất. Nếu strict là
Truevà một trong các lần lặp đã hết trước các lần lặp khác, thìValueErrorsẽ được nâng lên. Đối với trường hợp đầu vào hàm đã được sắp xếp thành các bộ đố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 đối số có thể lặp lại hoặc mục lớn nhất trong số hai hoặc nhiều đối số.
Nếu một đối số vị trí được cung cấp thì đó phải là iterable. Mục lớn nhất trong vòng lặp được trả về. Nếu hai hoặc nhiều đối số vị trí được cung cấp, thì đối số vị trí lớn nhất sẽ được trả về.
Có hai đối số chỉ có từ khóa tùy chọn. Đối số key chỉ định hàm sắp xếp một đối số giống như hàm được sử dụng cho
list.sort(). Đối số default chỉ định một đối tượng cần trả về nếu iterable được cung cấp trống. Nếu iterable trống và default không được cung cấp thìValueErrorsẽ được nâng lên.Nếu nhiều mục là tối đa, hàm sẽ trả về mục đầu tiên gặp phải. Điều này phù hợp với các công cụ duy trì độ ổn định 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ỉ từ khóa default.
Thay đổi trong phiên bản 3.8: Zz001zz có thể là
None.
- class memoryview(object)
Trả về đối tượng "chế độ xem bộ nhớ" được tạo từ đối số đã cho. Xem Lượt xem bộ nhớ để 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 đối số có thể lặp lại hoặc mục nhỏ nhất trong hai hoặc nhiều đối số.
Nếu một đối số vị trí được cung cấp thì đó phải là iterable. Mục nhỏ nhất trong iterable được trả về. Nếu hai hoặc nhiều đối số vị trí được cung cấp, đối số vị trí nhỏ nhất sẽ được trả về.
Có hai đối số chỉ có từ khóa tùy chọn. Đối số key chỉ định hàm sắp xếp một đối số giống như hàm được sử dụng cho
list.sort(). Đối số default chỉ định một đối tượng cần trả về nếu iterable được cung cấp trống. Nếu iterable trống và default không được cung cấp thìValueErrorsẽ được nâng lên.Nếu có nhiều mục ở mức tối thiểu thì hàm sẽ trả về mục đầu tiên gặp phải. Điều này phù hợp với các công cụ duy trì độ ổn định 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ỉ từ khóa default.
Thay đổi trong phiên bản 3.8: Zz001zz có thể là
None.
- next(iterator, /)¶
- next(iterator, default, /)
Truy xuất mục 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ó sẽ được trả về nếu trình lặp đã hết, nếu không thìStopIterationsẽ được nâng lên.
- class object¶
Đây là lớp cơ sở cuối cù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 phiên bản của lớp Python. Khi hàm tạo được gọi, nó trả về một đối tượng không có đặc điểm mới. Hàm tạo không chấp 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, thì nó phải định nghĩa một phương thức__index__()trả về một số nguyên. Ví dụ:>>> oct(8) '0o10' >>> oct(-56) '-0o70'
Nếu bạn muốn chuyển đổi một 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ể sử 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')
Xem thêm
format()để biết thêm thông tin.
- 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 không thể mở được tệp,
OSErrorsẽ xuất hiện. Xem Đọc và ghi tập tin để biết thêm ví dụ về cách sử dụng chức năng này.file là path-like object cung cấp tên đường dẫn (tuyệt đối hoặc liên quan đến thư mục làm việc hiện tại) của tệp sẽ được mở hoặc một bộ mô tả tệp số nguyên của tệp sẽ được gói. (Nếu một bộ mô tả tệp đượ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. Nó 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 nó đã tồn tại),'x'để tạo độc quyền và'a'để thêm vào (trên hệ thống Unix some, có nghĩa là all ghi thêm vào cuối tệp bất kể vị trí tìm kiếm hiện tại). Ở chế độ văn bản, nếu encoding không được chỉ định thì mã hóa được sử dụng sẽ phụ thuộc vào nền tảng:locale.getencoding()được gọi để nhận mã hóa ngôn ngữ hiện tại. (Để đọc và ghi byte thô, hãy sử dụng chế độ nhị phân và không chỉ định encoding.) Các chế độ khả dụng là:Tính cách
Nghĩa
'r'mở để đọc (mặc định)
'w'mở để ghi, cắt bớt tập tin trước
'x'mở để tạo độc quyền, không thành công nếu tệp đã tồn tại
'a'mở để ghi, thêm vào cuối file nếu có
'b'chế độ nhị phân
't'chế độ văn bản (mặc định)
'+'mở để cập nhật (đọc và viết)
Chế độ mặc định là
'r'(mở để đọc văn bản, đồng nghĩa với'rt'). Chế độ'w+'và'w+b'mở và cắt bớt tập tin. Các chế độ'r+'và'r+b'mở tệp mà không cắt bớt.Như đã đề cập trong Tổng quan, Python phân biệt giữa I/O nhị phân và văn bản. Các tệp được 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 có bất kỳ giải mã nào. Ở 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ã lần đầu bằng cách sử dụng mã hóa phụ thuộc vào nền tảng hoặc sử dụng encoding được chỉ định nếu được cung cấp.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 cơ bản; tất cả quá trình xử lý đều được thực hiện bởi chính Python và do đó không phụ thuộc vào nền tảng.
buffering là số nguyên tùy chọn được sử dụng để đặt chính sách lưu vào bộ đệm. Chuyển 0 để tắt bộ đệm (chỉ được phép ở chế độ nhị phân), 1 để chọn bộ đệm dòng (chỉ có thể sử dụng khi viết ở chế độ văn bản) và số nguyên > 1 để biểu thị kích thước tính bằng byte của bộ đệm đoạn có 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 đệm nhị phân, nhưng
TextIOWrapper(tức là các tệp được mở bằngmode='r+') sẽ có bộ đệm khác. Để tắt tính năng đệm trongTextIOWrapper, hãy cân nhắc sử dụng cờwrite_throughchoio.TextIOWrapper.reconfigure(). Khi không có đối số buffering nào được đưa ra, chính sách đệm mặc định sẽ hoạt động như sau:Các tệp nhị phân được lưu vào bộ đệm theo các khối có kích thước cố định; kích thước của bộ đệm là
max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE)khi có sẵn kích thước khối thiết bị. 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 tính năng đệm dòng. Các tệp văn bản khác sử dụng chính sách được mô tả ở trên cho tệp nhị phân.
encoding là tên mã hóa dùng để giải mã hoặc mã hóa tập tin. Điều này chỉ nên được sử dụng trong chế độ văn bản. Mã hóa mặc định phụ thuộc vào nền tảng (bất kỳ
locale.getencoding()nào trả về), nhưng bất kỳ text encoding nào được Python hỗ trợ đều có thể được sử dụng. Xem mô-đuncodecsđể 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ã—không thể sử dụng chuỗi này ở chế độ nhị phân. Có nhiều trình xử lý lỗi tiêu chuẩn khác nhau (được liệt kê trong Trình xử lý lỗi), mặc dù mọi tên xử lý lỗi đã được đăng ký với
codecs.register_error()cũng hợp lệ. Các tên tiêu chuẩn bao gồm:'strict'để đưa ra ngoại lệValueErrornếu có lỗi mã hóa. Giá trị mặc định củaNonecũng có tác dụng tương tự.'ignore'bỏ qua lỗi. Lưu ý rằng việc bỏ qua lỗi mã hóa có thể dẫn đến mất dữ liệu.'replace'khiến một điểm đánh dấu thay thế (chẳng hạn như'?') được chèn vào nơi có dữ liệu không đúng định dạng.'surrogateescape'sẽ biểu thị bất kỳ byte không chính xác nào dưới dạng đơn vị mã thay thế thấp, từ U+DC80 đến U+DCFF. Các đơn vị mã thay thế này sau đó sẽ được chuyển trở lại thành các byte giống nhau khi sử dụng trình xử lý lỗisurrogateescapekhi ghi dữ liệu. Điều này rất hữu ích để xử lý các tệp ở dạng mã hóa không xác định.'xmlcharrefreplace'chỉ được hỗ trợ khi ghi vào tệp. Các ký tự không được mã hóa hỗ trợ sẽ được thay thế bằng tham chiếu ký tự XML&#nnn;thích hợp.'backslashreplace'thay thế dữ liệu không đúng định dạng bằng chuỗi thoát bị gạch chéo ngược của Python.'namereplace'(cũng chỉ được hỗ trợ khi viết) thay thế các ký tự không được hỗ trợ bằng chuỗi thoát\N{...}.
newline xác định cách phân tích các ký tự dòng mới từ luồng. Nó có thể là
None,'','\n','\r'và'\r\n'. Nó hoạt động như sau:Khi đọc đầu vào từ luồng, nếu newline là
None, chế độ dòng mới phổ quát sẽ đượ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à những dòng này được dịch sang'\n'trước khi được trả lại cho người gọi. Nếu là'', chế độ dòng mới phổ quát được bật nhưng phần cuối dòng được trả về cho người gọi chưa được dịch. Nếu nó có bất kỳ giá trị hợp pháp nào khác, các dòng đầu vào chỉ được kết thúc bởi chuỗi đã cho và kết thúc dòng được trả về cho người gọi chưa được dịch.Khi ghi đầu ra vào luồng, nếu newline là
Nonethì mọi ký tự'\n'được ghi sẽ được dịch sang dấu phân tách dòng mặc định của hệ thống,os.linesep. Nếu newline là''hoặc'\n'thì không có quá trình dịch thuật nào diễn ra. Nếu newline là bất kỳ giá trị pháp lý nào khác thì mọi ký tự'\n'được viết sẽ được dịch sang chuỗi đã cho.
Nếu closefd là
Falsevà một bộ mô tả tệp thay vì tên tệp được cung cấp, thì bộ mô tả tệp cơ bản sẽ được giữ mở khi đóng tệp. Nếu tên tệp được đặt là closefd phải làTrue(mặc định); nếu không sẽ xuất hiện lỗi.Bạn có thể sử dụng công cụ mở tùy chỉnh bằng cách chuyển một lệnh gọi có thể gọi là opener. Sau đó, bộ mô tả tệp cơ bản cho đối tượng tệp được lấy bằng cách gọi opener với (file, flags). opener phải trả về một bộ mô tả tệp đang mở (chuyển
os.openvì opener sẽ có chức năng tương tự như truyềnNone).Tệp mới được tạo là non-inheritable.
Ví dụ sau sử dụng tham số dir_fd của hàm
os.open()để mở tệp liên quan đến một thư mục nhất định:>>> nhập hệ điều hành >>> dir_fd = os.open('somedir', os.O_RDONLY) >>> công cụ mở def (đường dẫn, cờ): ... return os.open(path, flags, dir_fd=dir_fd) ... >>> với open('spamspam.txt', 'w', opener=opener) là f: ... print('Điều này sẽ được ghi vào somedir/spamspam.txt', file=f) ... >>> os.close(dir_fd) # don không rò rỉ bộ mô tả tập tin
Loại file object được hàm
open()trả về tùy thuộc vào chế độ. Khiopen()được sử dụng để mở tệp ở chế độ văn bản ('w','r','wt','rt', v.v.), nó sẽ trả về một lớp con củaio.TextIOBase(cụ thể làio.TextIOWrapper). Khi được sử dụng để mở tệp ở chế độ nhị phân có đệm, lớp được trả về là lớp con củaio.BufferedIOBase. Lớp chính xác khác nhau: ở chế độ đọc nhị phân, nó trả vềio.BufferedReader; trong chế độ ghi nhị phân và nối thêm nhị phân, nó trả vềio.BufferedWritervà ở chế độ đọc/ghi, nó trả vềio.BufferedRandom. Khi tính năng đệm bị vô hiệu hóa, luồng thô, một lớp con củaio.RawIOBase,io.FileIO, sẽ được trả về.Xem thêm các mô-đun xử lý tệp, chẳng hạn như
fileinput,io(trong đóopen()được khai báo),os,os.path,tempfilevàshutil.Tăng một auditing event
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ệnh gọi ban đầu.Thay đổi trong phiên bản 3.3:
Tham số opener đã được thêm vào.
Chế độ
'x'đã được thêm vào.IOErrortrước đây được nâng lên, bây giờ nó là bí danh củaOSError.FileExistsErrorhiện được nâng lên nếu tệp được mở ở chế độ tạo độc quyền ('x') đã tồn tại.
Thay đổi trong phiên bản 3.4:
Các tập tin bây giờ không thể kế thừa.
Thay đổi trong phiên bản 3.5:
Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ thì hàm này sẽ thử lại lệnh gọi hệ thống thay vì đưa ra 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:
Hỗ trợ được thêm vào để chấp nhận các đối tượng triển khai
os.PathLike.Trên Windows, việc mở bộ đệm bảng điều khiển có thể trả về một lớp con của
io.RawIOBasekhông phải làio.FileIO.
Thay đổi trong phiên bản 3.11: Chế độ
'U'đã bị loại bỏ.
- ord(character, /)¶
Trả về giá trị thứ tự của một ký tự.
Nếu đối số là chuỗi một ký tự, hãy 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à nghịch đảo củachr().Nếu đối số là đối tượng
byteshoặcbytearraycó độ dài 1, hãy trả về giá trị byte đơn của nó. Ví dụ:ord(b'a')trả về số nguyên97.
- pow(base, exp, mod=None)¶
Trả base về lũy thừa exp; nếu có mod, trả base về lũy thừa exp, modulo mod (được tính toán hiệu quả hơn
pow(base, exp) % mod). Dạng hai đối sốpow(base, exp)tương đương với việc sử dụng toán tử lũy thừa:base**exp.Khi các đối số là các kiểu số dựng sẵn với các kiểu toán hạng hỗn hợp, các quy tắc ép buộc cho các toán tử số học nhị phân sẽ được áp dụng. Đối với toán hạng
int, kết quả có cùng loại với toán hạng (sau khi ép buộc) trừ khi đối số thứ hai là số âm; trong trường hợp đó, tất cả các đối số được chuyển đổi thành float và kết quả float được phân phối. Ví dụ:pow(10, 2)trả về100, nhưngpow(10, -2)trả về0.01. Đối với cơ số âm thuộc loạiinthoặcfloatvà số mũ không nguyên, một kết quả phức tạp sẽ được đưa ra. Ví dụ:pow(-9, 0.5)trả về giá trị gần với3j. Trong khi đó, đối với cơ số âm thuộc loạiinthoặcfloatcó số mũ nguyên, kết quả float sẽ được đưa ra. Ví dụ:pow(-9, 2.0)trả về81.0.Đối với toán hạng
intbase và exp, nếu mod có mặt thì mod cũng phải thuộc loại số nguyên và mod phải khác 0. Nếu mod xuất hiện và exp âm thì 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ụ về tính toán nghịch đảo cho
38modulo97:>>> pow(38, -1, mod=97) 23 >>> 23 * 38 % 97 == 1 đúng
Thay đổi trong phiên bản 3.8: Đối với 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 mô-đun.Thay đổi trong phiên bản 3.8: Cho phép đối số từ khóa. Trước đây, chỉ có lập luận vị trí được hỗ trợ.
- print(*objects, sep=' ', end='\n', file=None, flush=False)¶
In objects vào luồng văn bản file, phân tách bằng sep và theo sau là end. sep, end, file và flush, nếu có, phải được đưa ra làm đối số từ khóa.
Tất cả các đối số không phải từ khóa đều được chuyển đổi thành chuỗi giống như
str()và được ghi vào luồng, được phân tách bằng sep và theo sau là end. Cả sep và end đều phải là chuỗi; chúng cũng có thể làNone, nghĩa là sử dụng các giá trị mặc định. Nếu không có objects,print()sẽ chỉ viết end.Đối số file phải là một đối tượng có phương thức
write(string); nếu nó không có hoặcNone,sys.stdoutsẽ được sử dụng. Vì các đối số được in được chuyển đổi thành chuỗi văn bản nên không thể sử dụngprint()với các đối tượng tệp ở chế độ nhị phân. Đối với những điều này, hãy sử dụngfile.write(...)thay thế.Bộ đệm đầu ra thường được xác định bởi file. Tuy nhiên, nếu flush là đúng thì luồng bị buộc phải xóa.
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 thuộc tính.
fget là một hàm để nhận giá trị thuộc tính. fset là một hàm để thiết lập giá trị thuộc tính. fdel là chức năng xóa giá trị thuộc tính. Và doc tạo chuỗi tài liệu cho thuộc tính.
Cách sử dụng thông thường là xác định thuộc tính được quản lý
x:lớp C: định nghĩa __init__(tự): self._x = Không def getx(tự): tự trả về._x def setx(tự, giá trị): self._x = giá trị def delx(tự): del self._x x = property(getx, setx, delx, "Tôi là thuộc tính 'x'.")
Nếu c là một phiên bản của C,
c.xsẽ gọi getter,c.x = valuesẽ gọi setter vàdel c.xdeleter.Nếu được cung cấp, doc sẽ là chuỗi tài liệu của thuộc tính thuộc tính. Nếu không, thuộc tính sẽ sao chép chuỗi tài liệu của fget (nếu nó tồn tại). Điều này giúp bạn có thể dễ dàng tạo các thuộc tính chỉ đọc bằng cách sử dụng
property()dưới dạng decorator:lớp Vẹt: định nghĩa __init__(tự): tự._điện áp = 100000 @property điện áp def (tự): """Lấy điện áp hiện tại.""" tự trả về._điện áp
Trình trang trí
@propertybiến phương thứcvoltage()thành "getter" cho thuộc tính chỉ đọc có cùng tên và nó đặt chuỗi tài liệu cho voltage thành "Lấy điện áp hiện tại".- @getter¶
- @setter¶
- @deleter¶
Một đối tượng thuộc tính có các phương thức
getter,settervàdeletercó thể sử dụng làm công cụ trang trí để tạo một bản sao của thuộc tính với hàm truy cập tương ứng được đặt thành hàm trang trí. Điều này được giải thích tốt nhất bằng một ví dụ:lớp C: định nghĩa __init__(tự): self._x = Không @property def x(tự): """Tôi là thuộc tính 'x'.""" tự trả về._x @x.setter def x(tự, giá trị): self._x = giá trị @x.deleter def x(tự): del self._x
Mã này hoàn toàn tương đương với ví dụ đầu tiên. Đảm bảo đặt cho các hàm bổ sung cùng tên với thuộc tính ban đầu (
xtrong trường hợp này.)Đối tượng thuộc tính được trả về cũng có các thuộc tính
fget,fsetvàfdeltương ứng với các đối số của hàm tạo.
Thay đổi trong phiên bản 3.5: Chuỗi tài liệu của các đối tượng thuộc tính hiện có thể ghi được.
- __name__¶
Thuộc tính giữ tên của thuộc tính. Tên của thuộc tính có thể được thay đổi trong thời gian 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 sự là một loại trình tự bất biến, như được ghi lại trong Phạm vi và Các loại trình tự --- 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 loại, hàm này cố gắng trả về một chuỗi sẽ mang lại một đối tượng có cùng giá trị khi được truyền tới
eval(); mặt khác, biểu diễn là một chuỗi được đặt trong dấu ngoặc nhọn chứa tên loại đố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 truy cập được, chức năng này sẽ tăngRuntimeError.Lớp này có một biểu diễn tùy chỉnh có thể được đánh giá
lớp người: def __init__(bản thân, tên, tuổi): self.name = tên self.age = tuổi chắc chắn __repr__(tự): return f"Person('{self.name}', {self.age})"
- reversed(object, /)¶
Trả về iterator ngược. Đối số phải là một đối tượng có phương thức
__reversed__()hoặc hỗ trợ giao thức tuần tự (phương thức__len__()và phương thức__getitem__()với các đố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 sau dấu thập phân. Nếu ndigits bị bỏ qua hoặc là
None, nó sẽ trả về số nguyên gần nhất với đầu vào của nó.Đối với các loại tích hợp 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 bằng nhau thì việc làm tròn sẽ được thực hiện theo lựa chọn chẵn (vì vậy, ví dụ: cảround(0.5)vàround(-0.5)đều là0vàround(1.5)là2). Mọi giá trị số nguyên đều hợp lệ cho ndigits (dương, 0 hoặc âm). Giá trị trả về là số nguyên nếu ndigits bị bỏ qua hoặcNone. Nếu không, giá trị trả về có cùng loại với number.Đối với một đối tượng Python chung
number,roundủy quyền chonumber.__round__.Ghi chú
Hành vi của
round()đối với số float có thể gây ngạc nhiên: ví dụ:round(2.675, 2)cung cấp2.67thay vì2.68như mong đợi. Đâ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 số float. Xem Số học dấu phẩy động: Các vấn đề và hạn chế để biết thêm thông tin.
- class set(iterable=(), /)
Trả về một đối tượng
setmới, tùy chọn với các phần tử được lấy từ iterable.setlà một lớp được tích hợp sẵn. Xemsetvà Đặt các loại --- set, frozenset để biết tài liệu về lớp này.Đối với các vùng chứa khác, hãy xem các lớp
frozenset,list,tuplevàdicttích hợp sẵn cũng như mô-đuncollections.
- setattr(object, name, value, /)¶
Đây là bản sao 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 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 cần phải là mã định danh Python như được xác định trong Tên (số nhận dạng và từ khóa) trừ khi đối tượng chọn thực thi điều đó, ví dụ như trong
__getattribute__()tùy chỉnh hoặc thông qua__slots__. Thuộc tính có tên không phải là mã định danh sẽ không thể truy cập được bằng ký hiệu dấu chấm nhưng có thể truy cập được thông quagetattr(), v.v..Ghi chú
Vì private name mangling xảy ra vào thời gian biên dịch, nên người ta phải đọc tên của thuộc tính riêng tư (thuộc tính có hai dấu gạch dưới ở đầu) theo cách thủ công để đặt nó bằng
setattr().
- 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 lát cắt cũng được tạo khi sử dụng slicing syntax. Ví dụ:
a[start:stop:step]hoặca[start:stop, i].Xem
itertools.islice()để biết phiên bản thay thế trả về iterator.
- sorted(iterable, /, *, key=None, reverse=False)¶
Trả về danh sách được sắp xếp mới từ các mục trong iterable.
Có hai đối số tùy chọn phải được chỉ định làm đối số từ khóa.
key chỉ định hàm của một đối số được 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à giá trị boolean. Nếu được đặt thành
Truethì các thành phần trong danh sách sẽ được sắp xếp như thể mỗi so sánh được đảo ngược.Sử dụng
functools.cmp_to_key()để chuyển đổi hàm cmp kiểu cũ thành hàm key.Chức năng
sorted()tích hợp được đảm bảo hoạt động ổn định. Một cách sắp xếp ổ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 rất hữu ích cho việc sắp xếp theo nhiều lần (ví dụ: sắp xếp theo bộ phận, sau đó theo cấp lương).Thuật toán sắp xếp chỉ sử dụng so sánh
<giữa các mục. Mặc dù việc xác định một phương thức__lt__()sẽ đủ để sắp xếp, nhưng PEP 8 khuyến nghị nên triển khai tất cả sáu phương thức rich comparisons. Điều này sẽ giúp tránh lỗi khi sử dụng cùng một dữ liệu với các công cụ đặt hàng khác nhưmax()dựa trên một phương thức cơ bản khác. Việc thực hiện tất cả sáu so sánh cũng giúp tránh nhầm lẫn đối với các so sánh loại hỗn hợp có thể gọi phương thức__gt__()được phản ánh.Để biết các ví dụ về sắp xếp và hướng dẫn sắp xếp ngắn gọn, hãy xem Kỹ thuật sắp xếp.
- @staticmethod¶
Chuyển đổi một phương thức thành một phương thức tĩnh.
Một phương thức tĩnh không nhận được đối số đầu tiên ngầm định. Để khai báo một phương thức tĩnh, hãy sử dụng thành ngữ này
lớp C: @staticmethod def f(arg1, arg2, argN): ...
Biểu mẫu
@staticmethodlà một hàm decorator -- xem định nghĩa hàm để biết chi tiết.Mộ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 phiên bản (chẳng hạn nhưC().f()). Hơn nữa, phương thức tĩnh descriptor cũng có thể gọi được nên nó có thể được sử 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 được tìm thấy trong Java hoặc C++. Ngoài ra, hãy xem
classmethod()để biết một biến thể hữu ích cho việc tạo các hàm tạo lớp thay thế.Giống như tất cả các trình trang trí, bạn cũng có thể gọi
staticmethodnhư một hàm thông thường và thực hiện điều gì đó với kết quả của nó. Điều này là 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ừ nội dung lớp và bạn muốn tránh việc tự động chuyển đổi sang phương thức cá thể. Đối với những trường hợp này, hãy sử dụng thành ngữ này:def thường xuyên_function(): ... lớp C: phương thức = staticmethod(regular_function)
Để biết thêm thông tin về các phương thức tĩnh, hãy xem Hệ thống phân cấp loại tiêu chuẩn.
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à chuỗi class tích hợp sẵn. Để biết thông tin chung về chuỗi, xem Loại chuỗi văn bản --- str.
- sum(iterable, /, start=0)¶
Tính tổng start và các mục của iterable từ trái sang phải và trả về tổng số. Các mục của iterable thường là số và giá trị bắt đầu không được phép là một chuỗi.
Đối với một số trường hợp sử dụng, có những lựa chọn thay thế tốt cho
sum(). Cách nhanh chóng, ưa thích để nối một chuỗi các chuỗi là gọi''.join(sequence). Để thêm các giá trị dấu phẩy động với độ chính xác mở rộng, hãy xemmath.fsum(). Để nối một loạt các lần lặp, hãy cân nhắc sử dụngitertools.chain().Thay đổi trong phiên bản 3.8: Tham số start có thể được chỉ định làm đối số từ khóa.
Thay đổi trong phiên bản 3.12: Tính tổng số float được chuyển sang thuật toán mang lại độ 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 môn hóa để tính tổng các số phức, sử dụng thuật toán tương tự như để tính tổ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ệnh gọi phương thức cho lớp cha hoặc lớp anh chị em của type. Điều này rất hữu ích để truy cập các phương thức kế thừa đã bị ghi đè trong một lớp.
object_or_type xác định method resolution order cần tìm kiếm. Việc 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àBthìsuper()sẽ 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 sử 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 hệ thống phân cấp kế thừa được cập nhật.Nếu đối số thứ hai bị bỏ qua, siêu đối tượng được trả về sẽ không bị ràng buộc. Nếu đối số thứ hai là một đối tượng thì
isinstance(obj, type)phải đúng. Nếu đối số thứ hai là một loại,issubclass(type2, type)phải đúng (điều này hữu ích cho các phương thức lớp).Khi được gọi trực tiếp trong một phương thức thông thường của một lớp, cả hai đối số có thể bị bỏ qua ("
super()không đối số"). Trong trường hợp này, type sẽ là lớp kèm theo 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ác biểu thức trình tạo, ngầm tạo ra các hàm lồng nhau.)Có hai trường hợp sử dụng điển hình cho super. Trong hệ thống phân cấp lớp có tính kế thừa duy nhất, super có thể được sử dụng để chỉ các lớp cha mà không cần đặt tên rõ ràng, do đó làm cho mã dễ bảo trì hơn. Việc sử dụng này gần giống với việc sử 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ợ đa kế thừa hợp tác trong môi trường thực thi động. Trường hợp sử dụng này là duy nhất đối với Python và không được tìm thấy trong các ngôn ngữ được biên dịch tĩnh hoặc các ngôn ngữ chỉ hỗ trợ kế thừa đơn. Điều này giúp có thể triển khai "sơ đồ kim cương" trong đó nhiều lớp cơ sở triển khai cùng một phương thức. Thiết kế tốt chỉ ra rằng các triển khai như vậy có cùng chữ ký gọi trong mọi trường hợp (vì thứ tự các cuộc gọi được xác định trong thời gian chạy, vì thứ tự đó thích ứng với những thay đổi trong hệ thống phân cấp lớp và vì thứ tự đó có thể bao gồm các lớp anh chị em chưa được biết trước khi chạy).
Đối với cả hai trường hợp sử dụng, lệnh gọi siêu lớp điển hình trông như thế này:
lớp C(B): phương thức def (tự, arg): super().method(arg) # This thực hiện tương tự như: # super(C, self).phương thức(arg)
Ngoài việc tra cứu phương thức,
super()còn hoạt động để tra cứu thuộc tính. Một trường hợp sử dụng có thể áp dụng cho việc này là gọi descriptors trong lớp cha hoặc lớp anh chị em.Lưu ý rằng
super()được triển khai như một phần của quy trình liên kết để tra cứu thuộc tính chấm rõ ràng, chẳng hạn nhưsuper().__getitem__(name). Nó làm như vậy bằng cách triển khai phương thức__getattribute__()của riêng mình để tìm kiếm các lớp theo thứ tự có thể dự đoán được nhằm hỗ trợ đa kế thừa hợp tác. Theo đó,super()không được xác định để tra cứu ngầm bằng cách sử dụng các câu lệnh hoặc toán tử nhưsuper()[name].Cũng lưu ý rằng, ngoài dạng đối số bằng 0,
super()không bị giới hạn sử dụng các phương thức bên trong. Dạng hai đối số chỉ định chính xác các đối số và đưa ra các tham chiếu thích hợp. Dạng đối số bằng 0 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 để truy xuất chính xác lớp được định nghĩa, cũng như truy cập phiên bản hiện tại cho các phương thức thông thường.Để có những gợi ý thực tế về cách thiết kế các lớp hợp tác bằng
super(), hãy xem guide to using super().Thay đổi trong phiên bản 3.14: Các đối tượng
superhiện làpickleablevàcopyable.
- class tuple(iterable=(), /)
Thay vì là một hàm,
tuplethực sự là một loại trình tự bất biến, như được ghi lại trong Bộ dữ liệu và Các loại trình tự --- list, tuple, range.
- class type(object, /)¶
- class type(name, bases, dict, /, **kwargs)
Với một đối số, trả về loại object. Giá trị trả về là một đối tượng kiểu và nói chung là cùng một đối tượng được trả về bởi
object.__class__.Hàm tích hợp
isinstance()được khuyên dùng để kiểm tra loại đố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 thực chất là một 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__. Bộ bases chứa các lớp cơ sở và trở thành thuộc tính__bases__; nếu trống,object, cơ sở cuối cùng của tất cả các lớp, sẽ được thêm vào. Từ điển dict chứa các định nghĩa thuộc tính và phương thức cho nội dung lớp; nó có thể được sao chép hoặc gói trước khi trở thành thuộc tính__dict__. Hai câu lệnh sau đây tạo các đối tượngtypegiống hệt nhau:>>> class X: ... a = 1 ... >>> X = type('X', (), dict(a=1))
Xem thêm:
Đối số từ khóa được cung cấp cho dạng ba đối số được chuyển đến máy siêu dữ liệu thích hợp (thường là
__init_subclass__()) giống như cách mà các từ khóa trong định nghĩa lớp (ngoài metaclass).Xem thêm Tùy chỉnh việc tạo lớp.
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 sử dụng biểu mẫu một đối số để lấy loại đối tượng nữa.
- vars()¶
- vars(object, /)
Trả về thuộc tính
__dict__cho mô-đun, lớp, phiên bả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ư mô-đun và phiên bả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ó các hạn chế ghi trên thuộc tính__dict__của chúng (ví dụ: các lớp sử dụngtypes.MappingProxyTypeđể ngăn cập nhật từ điển trực tiếp).Không cần đối số,
vars()hoạt động giống nhưlocals().Một ngoại lệ
TypeErrorđược đưa ra nếu một đối tượng được chỉ định nhưng nó không có thuộc tính__dict__(ví dụ: nếu lớp của nó xác định 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 mà không có đối số đã được cập nhật như mô tả cho nội dung
locals().
- zip(*iterables, strict=False)¶
Lặp lại song song nhiều lần lặp, tạo ra các bộ dữ liệu với một mục từ mỗi bộ.
Ví dụ:
>>> cho mục trong zip([1, 2, 3], ['đường', 'gia vị', 'mọi thứ đều ngon']): ... in(mục) ... (1, 'đường') (2, 'gia vị') (3, 'mọi thứ đều tốt đẹp')
Chính thức hơn:
zip()trả về một trình vòng lặp của các bộ dữ liệu, trong đó bộ dữ liệu thứ i chứa phần tử thứ i từ mỗi đối số lặp lại.Một cách khác để nghĩ về
zip()là nó biến hàng thành cột và cột thành hàng. Điều này tương tự như transposing a matrix.zip()lười biếng: Các phần tử sẽ không được xử lý cho đến khi lặp lại được, ví dụ: bằng vòng lặpforhoặc bằng cách gói tronglist.Một điều cần cân nhắc là các lần lặp được truyền tới
zip()có thể có độ dài khác nhau; đôi khi là do thiết kế và đôi khi là do lỗi trong mã đã chuẩn bị các lần lặp này. Python đưa ra 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 khi hết lần lặp ngắn nhất. Nó sẽ bỏ qua các mục còn lại trong các lần lặp dài hơn, cắt kết quả thành độ dài của lần lặp ngắn nhất>>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'])) [(0, 'phí'), (1, 'fi'), (2, 'fo')]
zip()thường được sử dụng trong trường hợp các lần lặp được coi là có độ dài bằng nhau. Trong những trường hợp như vậy, bạn nên sử 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 như hành vi mặc định, nó sẽ tăng
ValueErrornếu một lần lặp hết trước các hành vi khác:>>> 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
Nếu không có đối số
strict=True, mọi lỗi dẫn đến các lần lặp có độ dài khác nhau sẽ bị tắt tiếng, có thể biểu hiện dưới dạng lỗi khó tìm thấy trong một phần khác của chương trình.Các lần lặp ngắn hơn có thể được đệm bằng một giá trị không đổi để làm cho tất cả các lần lặp có cùng độ dài. Việc này được thực hiện bởi
itertools.zip_longest().
Các trường hợp cạnh: Với một đối số có thể lặp lại duy nhất,
zip()trả về một trình vòng lặp gồm 1 bộ dữ liệu. Không có đối số, nó trả về một trình vòng lặp trống.Mẹo và thủ thuật:
Thứ tự đánh giá từ trái sang phải của các lần lặp được đảm bảo. Điều này tạo nên một thành ngữ để phân cụm chuỗi dữ liệu thành các nhóm có độ dài n bằng cách sử dụng
zip(*[iter(s)]*n, strict=True). Điều này lặp lại same iteratornlần để mỗi bộ dữ liệu đầu ra có kết quả của các lệnh gọintới iterator. Điều này có tác dụng chia đầu vào thành các đoạn có độ dài n.zip()kết hợp với toán tử*có thể được sử dụng để giải nén danh sách>>> x = [1, 2, 3] >>> y = [4, 5, 6] >>> danh sách(zip(x, y)) [(1, 4), (2, 5), (3, 6)] >>> x2, y2 = zip(*zip(x, y)) >>> x == danh sách(x2) và y == danh sách(y2) đúng
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ằng câu lệnh
import. Nó có thể được thay thế (bằng cách nhập mô-đunbuiltinsvà gán chobuiltins.__import__) để thay đổi ngữ nghĩa của câu lệnhimport, nhưng strongly không nên làm như vậy vì việc sử dụng móc nhập thường đơn giản hơn (xem PEP 302) để đạt được cùng mục tiêu và không gây ra sự cố với mã giả định việc triển khai nhập mặc định đang được sử dụng. Việc sử dụng trực tiếp__import__()cũng không được khuyến khích thay vì sử dụngimportlib.import_module().Hàm nhập mô-đun name, có khả năng sử dụng globals và locals đã cho để xác định cách diễn giải tên trong ngữ cảnh gói. fromlist cung cấp tên của các đối tượng hoặc mô-đun con cần được nhập từ mô-đun do name cung cấp. Việc triển khai tiêu chuẩn hoàn toàn không sử dụng đối số locals của nó và chỉ sử dụng globals của nó để xác định ngữ cảnh gói của câu lệnh
import.level chỉ định nên sử dụng nhập tuyệt đối hay tương đối.
0(mặc định) có nghĩa là chỉ thực hiện nhập tuyệt đối. Các giá trị dương cho level cho biết số lượng thư mục mẹ cần tìm kiếm tương ứng với thư mục của mô-đun đ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, gói cấp cao nhất (tên cho đến dấu chấm đầu tiên) được trả về, not mô-đun được đặt tên bởi name. Tuy nhiên, khi một đối số fromlist không trống được đưa ra, mô-đun được đặt tên bởi name sẽ được trả về.Ví dụ: câu lệnh
import spamdẫn đến mã byte giống như đoạn mã sau:thư rác = __import__('spam', Globals(), Locals(), [], 0)
Câu lệnh
import spam.hamdẫn đến cuộc gọi nàythư rác = __import__('spam.ham', Globals(), Locals(), [], 0)
Lưu ý cách
__import__()trả về mô-đun toplevel ở đây vì đây là đối tượng được liên kết với một tên bằng 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(), ['trứng', 'xúc xích'], 0) trứng = _temp.egg saus = _temp.sausage
Ở đây, mô-đun
spam.hamđược trả về từ__import__(). Từ đối tượng này, tên cần nhập sẽ được truy xuất và gán cho tên tương ứng của chúng.Nếu bạn chỉ muốn nhập một mô-đun (có thể nằm trong một gói) theo tên, hãy sử 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 sử dụng, biến môi trườngPYTHONCASEOKhiện bị bỏ qua.
Chú thích cuối trang