Hướng dẫn can i use sum as a variable name in python? - tôi có thể sử dụng tổng làm tên biến trong python không?

Xin chào, tôi đã làm mã sau cho câu hỏi leetcode

Show
class Solution(object):
def addDigits(self, num):
    """
    :type num: int
    :rtype: int
    """
    while(1):
        if num in list( range(0,10) ):
            return num

        sum = sum( int(i) for i in str(num) )

        num = sum

Nó mang lại một lỗi

sum = 1
3. Nó được cố định bằng cách thay đổi biến
sum = 1
4 thành
sum = 1
5.

sum = 1
4 không nằm trong danh sách các tên biến bất hợp pháp (từ khóa) (Phần 2.3).

Vậy tại sao lỗi? Có phải đó, khi Python thấy

sum = 1
7, Python bắt đầu coi
sum = 1
4 là một biến và quên nó là một chức năng?

Khi được hỏi ngày 29 tháng 8 năm 2015 lúc 9:10Aug 29, 2015 at 9:10

Hướng dẫn can i use sum as a variable name in python? - tôi có thể sử dụng tổng làm tên biến trong python không?

9

Bạn chắc chắn có thể gọi các biến của mình là "tổng", "tệp" và "giảm". Và nó sẽ thực sự hoạt động nếu bạn đang làm điều đó trong phạm vi toàn cầu. Ví dụ :

In [6]: sum = sum(range(1,10))

Tổng sẽ bằng 45 và mọi thứ đều tuyệt vời. (Mặc dù thực tế bạn không thể sử dụng tổng chức năng nữa.)sum anymore.)

Nhưng khi bạn đang cố gắng sử dụng điều này bên trong hàm: phiên dịch xác định phạm vi riêng của nó cho các biến được xác định bên trong hàm.

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()

Bạn có thể mong đợi câu trả lời sẽ là "buildin_function_or_method" nhưng thực sự bạn sẽ gặp lỗi tương tự như trên. Hy vọng ai đó sẽ cung cấp giải thích tốt hơn cho các chi tiết của thông dịch viên Python.

Đã trả lời ngày 29 tháng 8 năm 2015 lúc 9:43Aug 29, 2015 at 9:43

ig-melnykig-melnykig-melnyk

2.7092 Huy hiệu vàng23 Huy hiệu bạc34 Huy hiệu đồng2 gold badges23 silver badges34 bronze badges

0

sum = 1
4 là một chức năng tích hợp. Đây không phải là một vấn đề trong chính nó, vì bạn có thể chỉ định lại nó, ví dụ: Các hoạt động sau đây chỉ tốt:

sum = 1

Vấn đề là nó cũng ở phía bên phải của bài tập trong một chức năng:

sum = sum( int(i) for i in str(num) )
      ---

Vì bạn đang sử dụng

sum = 1
4 làm biến cục bộ, tên ở phía bên phải cũng sẽ đề cập đến biến cục bộ này (và không phải là hàm tích hợp). Tại thời điểm này, bạn chưa đưa ra bất kỳ giá trị nào (đó là trước khi chuyển nhượng), nhưng bạn đang cố gắng sử dụng nó, vì vậy đó là một lỗi.

Chỉ cần đặt cho biến của bạn một tên khác.

Đã trả lời ngày 29 tháng 8 năm 2015 lúc 9:44Aug 29, 2015 at 9:44

Karoly Horvathkaroly HorvathKaroly Horvath

Phù bằng vàng 93K1111 gold badges113 silver badges174 bronze badges

Cập nhật với sự xem xét cho các bình luận bên dưới

tổng là chức năng tích hợp (mà bạn sử dụng trên dòng 11)

Vì vậy, bạn không thể sử dụng nó như một tên biến https://docs.python.org/2/l Library/fontions.html

Sau đây là một chút quá nhiều ý kiến

Lỗi hơi không rõ ràng trong trường hợp này vì trình thông dịch đã cố gắng sử dụng tổng như một biến thay vì hàm.

Đã trả lời ngày 29 tháng 8 năm 2015 lúc 9:35Aug 29, 2015 at 9:35

SrgrnsrgrnSrgrn

1.75016 huy hiệu bạc 30 huy hiệu đồng16 silver badges30 bronze badges

7

Chức năng tích hợp của Python,

sum = sum( int(i) for i in str(num) )
      ---
1 là một cách hiệu quả và pythonic để tổng hợp một danh sách các giá trị số. Thêm một số số lại với nhau là một bước trung gian phổ biến trong nhiều tính toán, vì vậy
sum = sum( int(i) for i in str(num) )
      ---
1 là một công cụ khá tiện dụng cho một lập trình viên Python.

Là một trường hợp sử dụng bổ sung và thú vị, bạn có thể kết hợp các danh sách và bộ dữ liệu bằng cách sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1, có thể thuận tiện khi bạn cần làm phẳng danh sách danh sách.

Trong hướng dẫn này, bạn sẽ học cách:

  • Tổng các giá trị số bằng tay bằng cách sử dụng các kỹ thuật và công cụ chunggeneral techniques and tools
  • Sử dụng Python từ
    sum = sum( int(i) for i in str(num) )
          ---
    
    1 để thêm một số giá trị số một cách hiệu quảPython’s
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
    to add several numeric values efficiently
  • Danh sách concatenate và bộ dữ liệu với
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
    with
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
  • Sử dụng
    sum = sum( int(i) for i in str(num) )
          ---
    
    1 để tiếp cận các vấn đề tổng hợp phổ biếnsummation problems
  • Sử dụng các giá trị phù hợp cho các đối số trong
    sum = sum( int(i) for i in str(num) )
          ---
    
    1arguments in
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
  • Quyết định giữa
    sum = sum( int(i) for i in str(num) )
          ---
    
    1 và các công cụ thay thế để tổng hợp và nối các đối tượngalternative tools to sum and concatenate objects

Kiến thức này sẽ giúp bạn tiếp cận hiệu quả và giải quyết các vấn đề tổng trong mã của bạn bằng cách sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 hoặc các công cụ thay thế và chuyên dụng khác.

Hiểu vấn đề tổng kết

Tóm tắt các giá trị số với nhau là một vấn đề khá phổ biến trong lập trình. Ví dụ: giả sử bạn có một danh sách các số [1, 2, 3, 4, 5] và muốn thêm chúng lại với nhau để tính tổng số tiền của chúng. Với số học tiêu chuẩn, bạn sẽ làm một cái gì đó như thế này:

1 + 2 + 3 + 4 + 5 = 15

Theo như toán học, biểu thức này khá đơn giản. Nó hướng dẫn bạn qua một loạt các bổ sung ngắn cho đến khi bạn tìm thấy tổng của tất cả các số.

Nó có thể thực hiện tính toán cụ thể này bằng tay, nhưng hãy tưởng tượng một số tình huống khác mà nó có thể không quá có thể. Nếu bạn có một danh sách các số đặc biệt dài, việc thêm bằng tay có thể không hiệu quả và dễ bị lỗi. Điều gì xảy ra nếu bạn không biết thậm chí biết có bao nhiêu mặt hàng trong danh sách? Cuối cùng, hãy tưởng tượng một kịch bản trong đó số lượng vật phẩm bạn cần thêm thay đổi một cách linh hoạt hoặc không thể đoán trước.

Trong các tình huống như thế này, cho dù bạn có một danh sách dài hay ngắn, Python có thể khá hữu ích để giải quyết các vấn đề tổng kết.summation problems.

Nếu bạn muốn tổng hợp các số bằng cách tạo giải pháp của riêng mình từ đầu, thì bạn có thể thử sử dụng vòng lặp

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
0:

>>>

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15

Ở đây, trước tiên bạn tạo

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
1 và khởi tạo nó thành
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
2. Biến này hoạt động như một bộ tích lũy trong đó bạn lưu trữ kết quả trung gian cho đến khi bạn nhận được kết quả cuối cùng. Vòng lặp lặp qua
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
3 và cập nhật
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
1 bằng cách tích lũy từng giá trị liên tiếp bằng cách sử dụng một bài tập tăng cường.

Bạn cũng có thể quấn vòng

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
0 trong một hàm. Bằng cách này, bạn có thể sử dụng lại mã cho các danh sách khác nhau:

>>>

>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15

Ở đây, trước tiên bạn tạo

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
1 và khởi tạo nó thành
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
2. Biến này hoạt động như một bộ tích lũy trong đó bạn lưu trữ kết quả trung gian cho đến khi bạn nhận được kết quả cuối cùng. Vòng lặp lặp qua
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
3 và cập nhật
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
1 bằng cách tích lũy từng giá trị liên tiếp bằng cách sử dụng một bài tập tăng cường.

>>>

>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

Khi bạn xác định chức năng đệ quy, bạn có nguy cơ chạy vào một vòng lặp vô hạn. Để ngăn chặn điều này, bạn cần xác định cả trường hợp cơ sở dừng đệ quy và trường hợp đệ quy để gọi hàm và bắt đầu vòng lặp ngầm.base case that stops the recursion and a recursive case to call the function and start the implicit loop.

Trong ví dụ trên, trường hợp cơ sở ngụ ý rằng tổng của danh sách không có độ dài là

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
2. Trường hợp đệ quy ngụ ý rằng tổng số là giá trị đầu tiên,
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
0, cộng với tổng của phần còn lại của các giá trị,
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
1. Bởi vì trường hợp đệ quy sử dụng một chuỗi ngắn hơn trên mỗi lần lặp, bạn dự kiến ​​sẽ chạy vào trường hợp cơ sở khi
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
3 là danh sách không có độ dài. Kết quả cuối cùng, bạn nhận được tổng của tất cả các mục trong danh sách đầu vào của bạn,
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
3.

Một tùy chọn khác để tổng hợp danh sách các số trong Python là sử dụng

>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 từ
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
5. Để có được tổng của một danh sách các số, bạn có thể vượt qua
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
6 hoặc hàm
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
7 thích hợp làm đối số đầu tiên cho
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4:

>>>

>>> from functools import reduce
>>> from operator import add

>>> reduce(add, [1, 2, 3, 4, 5])
15

>>> reduce(add, [])
Traceback (most recent call last):
    ...
TypeError: reduce() of empty sequence with no initial value

>>> reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
15

Bạn có thể gọi

>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 với mức giảm hoặc gấp,
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
0 cùng với
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1 làm đối số. Sau đó
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 sử dụng chức năng đầu vào để xử lý
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1 và trả về một giá trị tích lũy duy nhất.

Trong ví dụ đầu tiên, hàm giảm là

>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
4, lấy hai số và thêm chúng lại với nhau. Kết quả cuối cùng là tổng của các số trong đầu vào
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1. Như một nhược điểm,
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 tăng
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
7 khi bạn gọi nó với một
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1 trống rỗng.

Trong ví dụ thứ hai, hàm giảm là hàm

>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
7 trả về việc bổ sung hai số.

Vì các tổng như thế này là phổ biến trong lập trình, mã hóa một hàm mới mỗi khi bạn cần tổng hợp một số số là rất nhiều công việc lặp đi lặp lại. Ngoài ra, sử dụng

>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 là giải pháp dễ đọc nhất có sẵn cho bạn.

Python cung cấp một chức năng tích hợp chuyên dụng để giải quyết vấn đề này. Hàm được gọi là

sum = sum( int(i) for i in str(num) )
      ---
1 một cách thuận tiện. Vì nó là một chức năng tích hợp, bạn có thể sử dụng nó trực tiếp trong mã của mình mà không cần nhập bất cứ thứ gì.

Bắt đầu với Python từ sum = sum( int(i) for i in str(num) ) --- 1

Khả năng đọc là một trong những nguyên tắc quan trọng nhất đằng sau triết lý Python. Trực quan hóa những gì bạn đang yêu cầu một vòng lặp làm khi tổng hợp một danh sách các giá trị. Bạn muốn nó lặp qua một số số, tích lũy chúng trong một biến trung gian và trả lại tổng cuối cùng. Tuy nhiên, có lẽ bạn có thể tưởng tượng một phiên bản tổng kết dễ đọc hơn mà không cần một vòng lặp. Bạn muốn Python lấy một số số và tổng hợp chúng lại với nhau.

Bây giờ hãy nghĩ về cách

>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 không tổng kết. Sử dụng
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4 được cho là ít dễ đọc hơn và ít đơn giản hơn so với thậm chí giải pháp dựa trên vòng lặp.

Đây là lý do tại sao Python 2.3 đã thêm

sum = sum( int(i) for i in str(num) )
      ---
1 như một hàm tích hợp để cung cấp một giải pháp pythonic cho vấn đề tổng kết. Alex Martelli đã đóng góp chức năng, ngày nay là cú pháp ưa thích để tổng hợp danh sách các giá trị:

>>>

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0

Ồ! Điều đó gọn gàng, có phải là nó không? Nó đọc giống như tiếng Anh đơn giản và truyền đạt rõ ràng hành động mà bạn đang thực hiện trong danh sách đầu vào. Sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 dễ đọc hơn vòng lặp
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
0 hoặc cuộc gọi
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4. Không giống như
>>> def sum_numbers(numbers):
...     total = 0
...     for number in numbers:
...         total += number
...     return total
...

>>> sum_numbers([1, 2, 3, 4, 5])
15

>>> sum_numbers([])
0
4,
sum = sum( int(i) for i in str(num) )
      ---
1 không tăng
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
7 khi bạn cung cấp một khoảng trống có thể trống. Thay vào đó, nó có thể trả về
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
2.

Bạn có thể gọi

sum = sum( int(i) for i in str(num) )
      ---
1 với hai đối số sau:

  1. >>> def sum_numbers(numbers):
    ...     if len(numbers) == 0:
    ...         return 0
    ...     return numbers[0] + sum_numbers(numbers[1:])
    ...
    
    >>> sum_numbers([1, 2, 3, 4, 5])
    15
    
    1 là một đối số cần thiết có thể giữ bất kỳ python có thể điều chỉnh được. Các thông thường có thể chứa các giá trị số nhưng cũng có thể chứa danh sách hoặc bộ dữ liệu.
    is a required argument that can hold any Python iterable. The iterable typically contains numeric values but can also contain lists or tuples.
  2. >>> sum([1, 2, 3, 4, 5])
    15
    
    >>> sum([])
    0
    
    5 là một đối số tùy chọn có thể giữ giá trị ban đầu. Giá trị này sau đó được thêm vào kết quả cuối cùng. Nó mặc định là
    >>> numbers = [1, 2, 3, 4, 5]
    >>> total = 0
    
    >>> for number in numbers:
    ...     total += number
    ...
    
    >>> total
    15
    
    2.
    is an optional argument that can hold an initial value. This value is then added to the final result. It defaults to
    >>> numbers = [1, 2, 3, 4, 5]
    >>> total = 0
    
    >>> for number in numbers:
    ...     total += number
    ...
    
    >>> total
    15
    
    2.

Trong nội bộ,

sum = sum( int(i) for i in str(num) )
      ---
1 thêm
>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5 cộng với các giá trị trong
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1 từ trái sang phải. Các giá trị trong đầu vào
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1 thường là số, nhưng bạn cũng có thể sử dụng danh sách và bộ dữ liệu. Đối số tùy chọn
>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5 có thể chấp nhận một số, danh sách hoặc tuple, tùy thuộc vào những gì được chuyển cho
>>> def sum_numbers(numbers):
...     if len(numbers) == 0:
...         return 0
...     return numbers[0] + sum_numbers(numbers[1:])
...

>>> sum_numbers([1, 2, 3, 4, 5])
15
1. Nó có thể lấy một chuỗi.

Trong hai phần sau, bạn sẽ tìm hiểu những điều cơ bản về việc sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 trong mã của mình.

Đối số cần thiết: >>> def sum_numbers(numbers): ... if len(numbers) == 0: ... return 0 ... return numbers[0] + sum_numbers(numbers[1:]) ... >>> sum_numbers([1, 2, 3, 4, 5]) 15 1

Chấp nhận bất kỳ python nào có thể thay đổi như lập luận đầu tiên của nó làm cho

sum = sum( int(i) for i in str(num) )
      ---
1 chung, tái sử dụng và đa hình. Vì tính năng này, bạn có thể sử dụng
sum = sum( int(i) for i in str(num) )
      ---
1 với danh sách, bộ dữ liệu, bộ, đối tượng
In [6]: sum = sum(range(1,10))
07 và từ điển:

>>>

In [6]: sum = sum(range(1,10))
0

Trong tất cả các ví dụ này,

sum = sum( int(i) for i in str(num) )
      ---
1 tính tổng số học của tất cả các giá trị trong đầu vào có thể đánh giá cao bất kể loại của chúng. Trong hai ví dụ từ điển, cả hai gọi đến
sum = sum( int(i) for i in str(num) )
      ---
1 trả về tổng các khóa của từ điển đầu vào. Ví dụ đầu tiên tổng hợp các khóa theo mặc định và ví dụ thứ hai tổng hợp các khóa do cuộc gọi
In [6]: sum = sum(range(1,10))
10 trên từ điển đầu vào.

Nếu từ điển của bạn lưu trữ các số trong các giá trị của nó và bạn muốn tổng hợp các giá trị này thay vì các khóa, thì bạn có thể làm điều này bằng cách sử dụng

In [6]: sum = sum(range(1,10))
11 giống như trong ví dụ
In [6]: sum = sum(range(1,10))
10.

Bạn cũng có thể sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 với danh sách hiểu như một đối số. Ở đây, một ví dụ tính toán tổng của các bình phương của một phạm vi giá trị:

>>>

In [6]: sum = sum(range(1,10))
1

Python 2.4 đã thêm biểu thức máy phát vào ngôn ngữ. Một lần nữa,

sum = sum( int(i) for i in str(num) )
      ---
1 hoạt động như mong đợi khi bạn sử dụng biểu thức máy phát làm đối số:

>>>

In [6]: sum = sum(range(1,10))
2

Python 2.4 đã thêm biểu thức máy phát vào ngôn ngữ. Một lần nữa,

sum = sum( int(i) for i in str(num) )
      ---
1 hoạt động như mong đợi khi bạn sử dụng biểu thức máy phát làm đối số:

Ví dụ này cho thấy một trong những kỹ thuật pythonic nhất để tiếp cận vấn đề tổng kết. Nó cung cấp một giải pháp thanh lịch, có thể đọc được và hiệu quả trong một dòng mã duy nhất.

Đối số tùy chọn:

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5

>>>

In [6]: sum = sum(range(1,10))
3

Python 2.4 đã thêm biểu thức máy phát vào ngôn ngữ. Một lần nữa,

sum = sum( int(i) for i in str(num) )
      ---
1 hoạt động như mong đợi khi bạn sử dụng biểu thức máy phát làm đối số:

Ví dụ này cho thấy một trong những kỹ thuật pythonic nhất để tiếp cận vấn đề tổng kết. Nó cung cấp một giải pháp thanh lịch, có thể đọc được và hiệu quả trong một dòng mã duy nhất.

Đối số tùy chọn: >>> sum([1, 2, 3, 4, 5]) 15 >>> sum([]) 0 5

Đối số thứ hai và tùy chọn,

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5, cho phép bạn cung cấp một giá trị để khởi tạo quá trình tổng. Đối số này rất tiện dụng khi bạn cần xử lý các giá trị tích lũy theo tuần tự:

Ở đây, bạn cung cấp giá trị ban đầu là

In [6]: sum = sum(range(1,10))
17 đến
>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5. Hiệu ứng ròng là
sum = sum( int(i) for i in str(num) )
      ---
1 thêm giá trị này vào tổng tích lũy của các giá trị trong đầu vào. Lưu ý rằng bạn có thể cung cấp
>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5 như một đối số vị trí hoặc là đối số từ khóa. Tùy chọn thứ hai là cách rõ ràng hơn và dễ đọc hơn.

>>>

In [6]: sum = sum(range(1,10))
4

Python 2.4 đã thêm biểu thức máy phát vào ngôn ngữ. Một lần nữa,

sum = sum( int(i) for i in str(num) )
      ---
1 hoạt động như mong đợi khi bạn sử dụng biểu thức máy phát làm đối số:floating-point numbers. It’s worth noting the function’s behavior when you use the special symbols
In [6]: sum = sum(range(1,10))
32 and
In [6]: sum = sum(range(1,10))
33 in the calls
In [6]: sum = sum(range(1,10))
34 and
In [6]: sum = sum(range(1,10))
35. The first symbol represents an infinite value, so
sum = sum( int(i) for i in str(num) )
      ---
1 returns
In [6]: sum = sum(range(1,10))
32. The second symbol represents NaN (not a number) values. Since you can’t add numbers with non-numbers, you get
In [6]: sum = sum(range(1,10))
33 as a result.

Ví dụ này cho thấy một trong những kỹ thuật pythonic nhất để tiếp cận vấn đề tổng kết. Nó cung cấp một giải pháp thanh lịch, có thể đọc được và hiệu quả trong một dòng mã duy nhất.

Đối số tùy chọn: >>> sum([1, 2, 3, 4, 5]) 15 >>> sum([]) 0 5

Đối số thứ hai và tùy chọn,

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5, cho phép bạn cung cấp một giá trị để khởi tạo quá trình tổng. Đối số này rất tiện dụng khi bạn cần xử lý các giá trị tích lũy theo tuần tự:

>>>

In [6]: sum = sum(range(1,10))
5

Python 2.4 đã thêm biểu thức máy phát vào ngôn ngữ. Một lần nữa,

sum = sum( int(i) for i in str(num) )
      ---
1 hoạt động như mong đợi khi bạn sử dụng biểu thức máy phát làm đối số:

Ví dụ này cho thấy một trong những kỹ thuật pythonic nhất để tiếp cận vấn đề tổng kết. Nó cung cấp một giải pháp thanh lịch, có thể đọc được và hiệu quả trong một dòng mã duy nhất.

>>>

In [6]: sum = sum(range(1,10))
6

Đối số tùy chọn:

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5

Đối số thứ hai và tùy chọn, >>> sum([1, 2, 3, 4, 5]) 15 >>> sum([]) 0 5, cho phép bạn cung cấp một giá trị để khởi tạo quá trình tổng. Đối số này rất tiện dụng khi bạn cần xử lý các giá trị tích lũy theo tuần tự:

Ở đây, bạn cung cấp giá trị ban đầu là

In [6]: sum = sum(range(1,10))
17 đến
>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5. Hiệu ứng ròng là
sum = sum( int(i) for i in str(num) )
      ---
1 thêm giá trị này vào tổng tích lũy của các giá trị trong đầu vào. Lưu ý rằng bạn có thể cung cấp
>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5 như một đối số vị trí hoặc là đối số từ khóa. Tùy chọn thứ hai là cách rõ ràng hơn và dễ đọc hơn.

Nếu bạn không cung cấp giá trị cho

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5, thì nó mặc định là
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
2. Giá trị mặc định của
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
2 đảm bảo hành vi dự kiến ​​trả lại tổng số của các giá trị đầu vào.

Tổng giá trị số

Mục đích chính của sum = sum( int(i) for i in str(num) ) --- 1 là cung cấp một cách pythonic để thêm các giá trị số lại với nhau. Cho đến thời điểm này, bạn đã thấy cách sử dụng hàm để tổng số số nguyên. Ngoài ra, bạn có thể sử dụng sum = sum( int(i) for i in str(num) ) --- 1 với bất kỳ loại python số nào khác, chẳng hạn như In [6]: sum = sum(range(1,10)) 26, In [6]: sum = sum(range(1,10)) 27, In [6]: sum = sum(range(1,10)) 28 và In [6]: sum = sum(range(1,10)) 29.

Dưới đây là một vài ví dụ về việc sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 với các giá trị của các loại số khác nhau:

Ở đây, trước tiên bạn sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 với số điểm nổi. Nó đáng chú ý là hành vi của chức năng khi bạn sử dụng các biểu tượng đặc biệt
In [6]: sum = sum(range(1,10))
32 và
In [6]: sum = sum(range(1,10))
33 trong các cuộc gọi
In [6]: sum = sum(range(1,10))
34 và
In [6]: sum = sum(range(1,10))
35. Biểu tượng đầu tiên đại diện cho một giá trị vô hạn, do đó
sum = sum( int(i) for i in str(num) )
      ---
1 trả về
In [6]: sum = sum(range(1,10))
32. Biểu tượng thứ hai đại diện cho các giá trị NAN (không phải số). Vì bạn có thể thêm các số với những người không phải là người, bạn sẽ nhận được
In [6]: sum = sum(range(1,10))
33.

>>>

In [6]: sum = sum(range(1,10))
7

Bằng cách sử dụng

>>> sum([1, 2, 3, 4, 5])
15

>>> sum([])
0
5, bạn đặt giá trị ban đầu để khởi tạo tổng, cho phép bạn thêm các đơn vị liên tiếp vào phần phụ được tính toán trước đó. Vào cuối tuần, bạn sẽ có tổng số lượng đơn vị bán của công ty.

Tính toán giá trị trung bình của một mẫu

Một trường hợp sử dụng thực tế khác của

sum = sum( int(i) for i in str(num) )
      ---
1 là sử dụng nó như một tính toán trung gian trước khi thực hiện các tính toán thêm. Ví dụ, giả sử bạn cần tính toán trung bình số học của một mẫu của các giá trị số. Giá trị trung bình số học, còn được gọi là trung bình, là tổng số của các giá trị chia cho số lượng giá trị hoặc điểm dữ liệu, trong mẫu.average, is the total sum of the values divided by the number of values, or data points, in the sample.

Nếu bạn có mẫu [2, 3, 4, 2, 3, 6, 4, 2] và bạn muốn tính toán trung bình số học bằng tay, thì bạn có thể giải quyết hoạt động này:

(2 + 3 + 4 + 2 + 3 + 6 + 4 + 2) / 8 = 3.25

Nếu bạn muốn tăng tốc độ này bằng cách sử dụng Python, bạn có thể chia nó thành hai phần. Phần đầu tiên của tính toán này, nơi bạn đang thêm các số cùng nhau, là một nhiệm vụ cho

sum = sum( int(i) for i in str(num) )
      ---
1. Phần tiếp theo của thao tác, nơi bạn chia cho 8, sử dụng số lượng số trong mẫu của bạn. Để tính toán ước số của bạn, bạn có thể sử dụng
In [6]: sum = sum(range(1,10))
62:

>>>

In [6]: sum = sum(range(1,10))
8

Tại đây, cuộc gọi đến

sum = sum( int(i) for i in str(num) )
      ---
1 tính tổng số điểm dữ liệu trong mẫu của bạn. Tiếp theo, bạn sử dụng
In [6]: sum = sum(range(1,10))
62 để có được số lượng điểm dữ liệu. Cuối cùng, bạn thực hiện bộ phận cần thiết để tính toán trung bình số học của mẫu.

Trong thực tế, bạn có thể muốn biến mã này thành một hàm với một số tính năng bổ sung, chẳng hạn như tên mô tả và kiểm tra các mẫu trống:

>>>

In [6]: sum = sum(range(1,10))
9

Bên trong

In [6]: sum = sum(range(1,10))
65, trước tiên bạn kiểm tra xem mẫu đầu vào có bất kỳ điểm dữ liệu nào không. Nếu không, thì bạn sẽ tăng một
In [6]: sum = sum(range(1,10))
66 với một thông điệp mô tả. Trong ví dụ này, bạn sử dụng toán tử Walrus để lưu trữ số lượng điểm dữ liệu trong biến
In [6]: sum = sum(range(1,10))
67 để bạn giành chiến thắng cần phải gọi lại
In [6]: sum = sum(range(1,10))
62. Câu lệnh trả về tính toán trung bình số học của mẫu và gửi lại cho mã gọi.

Lưu ý rằng khi bạn gọi

In [6]: sum = sum(range(1,10))
65 với một mẫu thích hợp, bạn sẽ nhận được giá trị trung bình mong muốn. Nếu bạn gọi
In [6]: sum = sum(range(1,10))
65 với một mẫu trống, thì bạn sẽ nhận được
In [6]: sum = sum(range(1,10))
66 như mong đợi.

Tìm sản phẩm chấm của hai chuỗi

Một vấn đề khác bạn có thể giải quyết bằng cách sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 là tìm sản phẩm DOT của hai chuỗi có độ dài bằng nhau của các giá trị số. Sản phẩm DOT là tổng đại số của các sản phẩm của mỗi cặp giá trị trong các chuỗi đầu vào. Ví dụ: nếu bạn có các chuỗi (1, 2, 3) và (4, 5, 6), thì bạn có thể tính toán sản phẩm DOT của họ bằng tay bằng cách sử dụng bổ sung và nhân:

1 × 4 + 2 × 5 + 3 × 6 = 32

Để trích xuất các cặp giá trị liên tiếp từ các chuỗi đầu vào, bạn có thể sử dụng

In [6]: sum = sum(range(1,10))
73. Sau đó, bạn có thể sử dụng biểu thức máy phát để nhân mỗi cặp giá trị. Cuối cùng,
sum = sum( int(i) for i in str(num) )
      ---
1 có thể tổng hợp các sản phẩm:

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
0

Với

In [6]: sum = sum(range(1,10))
73, bạn tạo một danh sách các bộ dữ liệu với các giá trị từ mỗi chuỗi đầu vào. Các vòng biểu thức của trình tạo trên mỗi tuple trong khi nhân các cặp giá trị liên tiếp được sắp xếp trước đó bởi
In [6]: sum = sum(range(1,10))
73. Bước cuối cùng là thêm các sản phẩm với nhau bằng cách sử dụng
sum = sum( int(i) for i in str(num) )
      ---
1.

Mã trong ví dụ trên hoạt động. Tuy nhiên, sản phẩm DOT được xác định cho các chuỗi có độ dài bằng nhau, vậy điều gì xảy ra nếu bạn cung cấp các chuỗi với các độ dài khác nhau? Trong trường hợp đó,

In [6]: sum = sum(range(1,10))
73 bỏ qua các giá trị bổ sung từ chuỗi dài nhất, dẫn đến kết quả không chính xác.

Để đối phó với khả năng này, bạn có thể kết thúc cuộc gọi đến

sum = sum( int(i) for i in str(num) )
      ---
1 trong một chức năng tùy chỉnh và cung cấp một kiểm tra thích hợp cho độ dài của các chuỗi đầu vào:

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
1

Ở đây,

In [6]: sum = sum(range(1,10))
80 lấy hai chuỗi làm đối số và trả về sản phẩm DOT tương ứng của chúng. Nếu các chuỗi đầu vào có độ dài khác nhau, thì hàm tăng
In [6]: sum = sum(range(1,10))
66.

Nhúng chức năng vào một chức năng tùy chỉnh cho phép bạn sử dụng lại mã. Nó cũng cung cấp cho bạn cơ hội để đặt tên cho chức năng một cách mô tả để người dùng biết chức năng làm gì chỉ bằng cách đọc tên của nó.

Làm phẳng danh sách các danh sách

Làm phẳng danh sách các danh sách là một nhiệm vụ phổ biến trong Python. Giả sử bạn có một danh sách các danh sách và cần phải làm phẳng nó vào một danh sách duy nhất chứa tất cả các mục từ các danh sách lồng nhau ban đầu. Bạn có thể sử dụng bất kỳ cách tiếp cận nào để làm phẳng danh sách trong Python. Ví dụ: bạn có thể sử dụng vòng lặp

>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
0, như trong mã sau:

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
2

Bên trong

In [6]: sum = sum(range(1,10))
83, vòng lặp lặp lại trên tất cả các danh sách lồng nhau có trong
In [6]: sum = sum(range(1,10))
84. Sau đó, nó kết hợp chúng trong
In [6]: sum = sum(range(1,10))
85 bằng cách sử dụng một hoạt động gán tăng cường (
In [6]: sum = sum(range(1,10))
86). Kết quả là, bạn nhận được một danh sách phẳng với tất cả các mục từ các danh sách lồng nhau ban đầu.

Nhưng hãy giữ! Bạn đã học được cách sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 để nối các chuỗi trong hướng dẫn này. Bạn có thể sử dụng tính năng đó để làm phẳng danh sách các danh sách như bạn đã làm trong ví dụ trên không? Đúng! Đây là cách: làm thế nào:

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
3

Nó thật nhanh! Một dòng mã duy nhất và

In [6]: sum = sum(range(1,10))
88 hiện là một danh sách phẳng. Tuy nhiên, sử dụng
sum = sum( int(i) for i in str(num) )
      ---
1 dường như không phải là giải pháp nhanh nhất.

Một nhược điểm quan trọng của bất kỳ giải pháp nào ngụ ý sự kết hợp là đằng sau hậu trường, mọi bước trung gian đều tạo ra một danh sách mới. Điều này có thể khá lãng phí về mặt sử dụng bộ nhớ. Danh sách cuối cùng được trả lại chỉ là danh sách được tạo gần đây nhất trong số tất cả các danh sách được tạo ra ở mỗi vòng kết nối. Thay vào đó, sử dụng danh sách hiểu biết rằng bạn tạo và trả về chỉ một danh sách:

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
4

Nó thật nhanh! Một dòng mã duy nhất và

In [6]: sum = sum(range(1,10))
88 hiện là một danh sách phẳng. Tuy nhiên, sử dụng
sum = sum( int(i) for i in str(num) )
      ---
1 dường như không phải là giải pháp nhanh nhất.

Một nhược điểm quan trọng của bất kỳ giải pháp nào ngụ ý sự kết hợp là đằng sau hậu trường, mọi bước trung gian đều tạo ra một danh sách mới. Điều này có thể khá lãng phí về mặt sử dụng bộ nhớ. Danh sách cuối cùng được trả lại chỉ là danh sách được tạo gần đây nhất trong số tất cả các danh sách được tạo ra ở mỗi vòng kết nối. Thay vào đó, sử dụng danh sách hiểu biết rằng bạn tạo và trả về chỉ một danh sách:

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
5

Nó thật nhanh! Một dòng mã duy nhất và

In [6]: sum = sum(range(1,10))
88 hiện là một danh sách phẳng. Tuy nhiên, sử dụng
sum = sum( int(i) for i in str(num) )
      ---
1 dường như không phải là giải pháp nhanh nhất.

Một nhược điểm quan trọng của bất kỳ giải pháp nào ngụ ý sự kết hợp là đằng sau hậu trường, mọi bước trung gian đều tạo ra một danh sách mới. Điều này có thể khá lãng phí về mặt sử dụng bộ nhớ. Danh sách cuối cùng được trả lại chỉ là danh sách được tạo gần đây nhất trong số tất cả các danh sách được tạo ra ở mỗi vòng kết nối. Thay vào đó, sử dụng danh sách hiểu biết rằng bạn tạo và trả về chỉ một danh sách:

Phiên bản mới này của

In [6]: sum = sum(range(1,10))
83 hiệu quả hơn và ít lãng phí hơn về mặt sử dụng bộ nhớ. Tuy nhiên, các toàn diện lồng nhau có thể là một thách thức để đọc và hiểu.

Sử dụng

In [6]: sum = sum(range(1,10))
91 có lẽ là cách dễ đọc và pythonic nhất để làm phẳng danh sách danh sách:

Trong phiên bản

In [6]: sum = sum(range(1,10))
83 này, ai đó đọc mã của bạn có thể thấy rằng hàm này lặp lại trên mỗi
In [6]: sum = sum(range(1,10))
93 trong
In [6]: sum = sum(range(1,10))
84. Bên trong vòng lặp
>>> numbers = [1, 2, 3, 4, 5]
>>> total = 0

>>> for number in numbers:
...     total += number
...

>>> total
15
0 đầu tiên này, nó đã lặp lại trên mỗi
In [6]: sum = sum(range(1,10))
96 trong
In [6]: sum = sum(range(1,10))
93 để cuối cùng đưa ra danh sách
In [6]: sum = sum(range(1,10))
85 mới với
In [6]: sum = sum(range(1,10))
91. Giống như sự hiểu biết từ trước đó, giải pháp này chỉ tạo ra một danh sách trong quy trình. Một lợi thế của giải pháp này là nó rất dễ đọc.

Sử dụng các lựa chọn thay thế cho sum = sum( int(i) for i in str(num) ) --- 1

Như bạn đã học,

sum = sum( int(i) for i in str(num) )
      ---
1 rất hữu ích khi làm việc với các giá trị số nói chung. Tuy nhiên, khi nói đến việc làm việc với các số điểm nổi, Python cung cấp một công cụ thay thế. Trong
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
02, bạn sẽ tìm thấy một hàm gọi là
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
03 có thể giúp bạn cải thiện độ chính xác chung của các tính toán dấu phẩy động của bạn.

Bạn có thể có một nhiệm vụ mà bạn muốn kết hợp hoặc chuỗi một số lần lặp để bạn có thể làm việc với chúng như một. Đối với kịch bản này, bạn có thể tìm đến chức năng mô -đun

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
04
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
05.

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
6

Bạn cũng có thể có một nhiệm vụ mà bạn muốn kết hợp một danh sách các chuỗi. Bạn đã học được trong hướng dẫn này rằng không có cách nào để sử dụng

sum = sum( int(i) for i in str(num) )
      ---
1 để nối các chuỗi. Chức năng này chỉ được xây dựng để kết hợp chuỗi. Giải pháp thay thế pythonic nhất là sử dụng
In [6]: sum = sum(range(1,10))
51.

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
7

Tóm tắt số điểm nổi:

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
08

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
8

Nếu mã của bạn liên tục tổng số các số điểm nổi với

sum = sum( int(i) for i in str(num) )
      ---
1, thì bạn nên xem xét sử dụng
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
08 thay thế. Hàm này thực hiện các tính toán dấu phẩy động cẩn thận hơn
sum = sum( int(i) for i in str(num) )
      ---
1, giúp cải thiện độ chính xác của tính toán của bạn.

>>>

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
9

Theo tài liệu của mình,

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
03 Tránh mất độ chính xác bằng cách theo dõi nhiều khoản tiền trung gian. Tài liệu cung cấp ví dụ sau:

Với In [2]: def f(): print type(sum) sum = sum(range(1,10)) f() 03, bạn nhận được một kết quả chính xác hơn. Tuy nhiên, bạn nên lưu ý rằng In [2]: def f(): print type(sum) sum = sum(range(1,10)) f() 03 không giải quyết được lỗi đại diện trong số học dấu phẩy động. Ví dụ sau đây khám phá giới hạn này:

Trong các ví dụ này, cả hai chức năng trả về cùng một kết quả. Điều này là do sự bất khả thi của việc thể hiện chính xác cả hai giá trị

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
15 và
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
16 trong điểm nổi nhị phân:

>>>

sum = 1
0

Tuy nhiên, không giống như

sum = sum( int(i) for i in str(num) )
      ---
1,
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
03 có thể giúp bạn giảm sự lan truyền lỗi dấu phẩy động khi bạn thêm các số rất lớn và rất nhỏ lại với nhau:

Ồ! Ví dụ thứ hai là khá đáng ngạc nhiên và hoàn toàn đánh bại

sum = sum( int(i) for i in str(num) )
      ---
1. Với
sum = sum( int(i) for i in str(num) )
      ---
1, kết quả là bạn nhận được
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
21. Điều này khá xa so với kết quả chính xác của
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
22, khi bạn nhận được với
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
03.

>>>

sum = 1
1

Kết nối lặp lại với

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
24iterable unpacking operator (
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
33). This operator unpacks all the input iterables so that
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
05 can work with them and generate the corresponding iterator. The final step is to call
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
30 to build the desired flat list.

Dây nối với In [6]: sum = sum(range(1,10)) 51

Như bạn đã thấy,

sum = sum( int(i) for i in str(num) )
      ---
1 không liên kết hoặc tham gia chuỗi. Nếu bạn cần phải làm như vậy, thì công cụ ưa thích và nhanh nhất có sẵn trong Python là
In [6]: sum = sum(range(1,10))
51. Phương pháp này lấy một chuỗi các chuỗi làm đối số và trả về một chuỗi mới, được nối:

>>>

sum = 1
2

Sử dụng

In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
39 là cách hiệu quả nhất và pythonic để nối các chuỗi. Ở đây, bạn sử dụng một danh sách các chuỗi làm đối số và xây dựng một chuỗi duy nhất từ ​​đầu vào. Lưu ý rằng
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
39 sử dụng chuỗi mà bạn gọi phương thức làm dấu phân cách trong quá trình ghép. Trong ví dụ này, bạn gọi
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
39 trên một chuỗi bao gồm một ký tự không gian duy nhất (
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
42), do đó các chuỗi gốc từ
In [2]: def f():
   print type(sum)
   sum = sum(range(1,10))
f()
43 được phân tách bằng khoảng trắng trong chuỗi cuối cùng của bạn.

Sự kết luận

Bây giờ bạn có thể sử dụng chức năng tích hợp Python,

sum = sum( int(i) for i in str(num) )
      ---
1 để thêm nhiều giá trị số lại với nhau. Hàm này cung cấp một cách hiệu quả, dễ đọc và pythonic để giải quyết các vấn đề tổng trong mã của bạn. Nếu bạn xử lý các tính toán toán học yêu cầu tổng hợp các giá trị số, thì
sum = sum( int(i) for i in str(num) )
      ---
1 có thể là cứu cánh của bạn.summation problems in your code. If you’re dealing with math computations that require summing numeric values, then
sum = sum( int(i) for i in str(num) )
      ---
1 can be your lifesaver.

Trong hướng dẫn này, bạn đã học được cách:

  • Tổng các giá trị số bằng các kỹ thuật và công cụ chunggeneral techniques and tools
  • Thêm một số giá trị số một cách hiệu quả bằng cách sử dụng Python từ
    sum = sum( int(i) for i in str(num) )
          ---
    
    1Python’s
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
  • Trình tự Concatenate sử dụng
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
    using
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
  • Sử dụng
    sum = sum( int(i) for i in str(num) )
          ---
    
    1 để tiếp cận các vấn đề tổng hợp phổ biếnsummation problems
  • Sử dụng các giá trị phù hợp cho các đối số
    >>> def sum_numbers(numbers):
    ...     if len(numbers) == 0:
    ...         return 0
    ...     return numbers[0] + sum_numbers(numbers[1:])
    ...
    
    >>> sum_numbers([1, 2, 3, 4, 5])
    15
    
    1 và
    >>> sum([1, 2, 3, 4, 5])
    15
    
    >>> sum([])
    0
    
    5 trong
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
    >>> def sum_numbers(numbers):
    ...     if len(numbers) == 0:
    ...         return 0
    ...     return numbers[0] + sum_numbers(numbers[1:])
    ...
    
    >>> sum_numbers([1, 2, 3, 4, 5])
    15
    
    1 and
    >>> sum([1, 2, 3, 4, 5])
    15
    
    >>> sum([])
    0
    
    5 arguments
    in
    sum = sum( int(i) for i in str(num) )
          ---
    
    1
  • Quyết định giữa
    sum = sum( int(i) for i in str(num) )
          ---
    
    1 và các công cụ thay thế để tổng hợp và nối các đối tượngalternative tools to sum and concatenate objects

Với kiến ​​thức này, giờ đây bạn có thể thêm nhiều giá trị số lại với nhau theo cách pythonic, dễ đọc và hiệu quả.

Tên biến nào là bất hợp pháp trong Python?

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

Các tên biến có tổng và tổng giống nhau không?

Các quy tắc để viết tên biến trong tên biến Java trong Java là nhạy cảm trường hợp.Ví dụ: "Sum" và "Sum" sẽ được coi là hai biến khác nhau.Một biến có thể là bất kỳ định danh hợp lệ của bất kỳ độ dài nào.Một tên biến phải bắt đầu bằng bảng chữ cái, dấu hiệu đô la "$" hoặc ký tự dấu gạch dưới "_"."Sum" and "sum" will be considered as two different variables. A variables can be any valid identifier of any length. A variable name must start with an alphabet, the dollar sign "$", or the underscore character "_".

Bạn có thể đặt tên cho một biến bất cứ điều gì trong Python?

Python cho phép bạn đặt tên cho các biến theo ý thích của mình, miễn là các tên tuân theo các quy tắc này: tên biến có thể chứa các chữ cái, chữ số (0-9) hoặc ký tự dấu gạch dưới _.Tên biến phải bắt đầu bằng một chữ cái từ A-Z hoặc ký tự _ nhấn mạnh.Các chữ cái chữ thường hoặc chữ hoa được chấp nhận.: Variable names may contain letters, digits (0-9) or the underscore character _ . Variable names must begin with a letter from A-Z or the underscore _ character. Either lowercase or uppercase letters are acceptable.

Biến tổng là gì?

Các biến tổng có thể được sử dụng để tạo tổng số trên các tập dữ liệu, ví dụ:Để thêm các trường "Mục. Đơn vị" trong bảng để tính tổng giá.Tổng số như vậy được phép cho tất cả các biến số hoặc cho các biểu thức trả về giá trị số làm kết quả.used to create totals over data sets, e.g. to add up the "Item. UnitPrice" fields in a table in order to calculate the total price. Such totals are permitted for all numeric variables or for expressions that return a numeric value as the result.