Hướng dẫn how do you add commas as thousands separator for numbers in python? - làm thế nào để bạn thêm dấu phẩy làm dấu phân cách hàng nghìn cho các số trong python?

Tôi đang sử dụng Python 2.5 vì vậy tôi không có quyền truy cập vào định dạng tích hợp.

Tôi đã xem mã Django Intcomma [intcomma_recurs trong mã bên dưới] và nhận ra nó không hiệu quả, bởi vì nó đệ quy và cũng biên dịch regex trên mỗi lần chạy cũng không phải là một điều tốt. Điều này không cần thiết là một 'vấn đề' vì Django không thực sự tập trung vào loại hiệu suất cấp thấp này. Ngoài ra, tôi đã mong đợi một yếu tố khác biệt 10 về hiệu suất, nhưng nó chỉ chậm hơn 3 lần.

Vì tò mò, tôi đã thực hiện một vài phiên bản Intcomma để xem những lợi thế về hiệu suất là gì khi sử dụng Regex. Dữ liệu thử nghiệm của tôi kết thúc một lợi thế nhỏ cho nhiệm vụ này, nhưng đáng ngạc nhiên là không nhiều.

Tôi cũng rất vui khi thấy những gì tôi nghi ngờ: Sử dụng phương pháp Xrange ngược là không cần thiết trong trường hợp không có r-REX, nhưng nó làm cho mã trông tốt hơn một chút với chi phí hiệu suất ~ 10%.

Ngoài ra, tôi giả sử những gì bạn đang đi là một chuỗi và trông giống như một con số. Kết quả không được xác định khác.

from __future__ import with_statement
from contextlib import contextmanager
import re,time

re_first_num = re.compile[r"\d"]
def intcomma_noregex[value]:
    end_offset, start_digit, period = len[value],re_first_num.search[value].start[],value.rfind['.']
    if period == -1:
        period=end_offset
    segments,_from_index,leftover = [],0,[period-start_digit] % 3
    for _index in xrange[start_digit+3 if not leftover else start_digit+leftover,period,3]:
        segments.append[value[_from_index:_index]]
        _from_index=_index
    if not segments:
        return value
    segments.append[value[_from_index:]]
    return ','.join[segments]

def intcomma_noregex_reversed[value]:
    end_offset, start_digit, period = len[value],re_first_num.search[value].start[],value.rfind['.']
    if period == -1:
        period=end_offset
    _from_index,segments = end_offset,[]
    for _index in xrange[period-3,start_digit,-3]:
        segments.append[value[_index:_from_index]]
        _from_index=_index
    if not segments:
        return value
    segments.append[value[:_from_index]]
    return ','.join[reversed[segments]]

re_3digits = re.compile[r'[?

Bài Viết Liên Quan

Chủ Đề