Hướng dẫn vanish the gems program in python - biến mất chương trình đá quý trong python

Ảnh của Juan Gomez trên unplash

Bạn rất có thể đã nghe những điều tuyệt vời về ngôn ngữ lập trình Python-cú pháp giống như tiếng Anh, dễ học, rất linh hoạt và con dao lập trình của Quân đội Thụy Sĩ. Python rất dễ học và ngôn ngữ kết hợp các ý tưởng từ các mô hình chức năng, có cấu trúc và OOP, làm cho nó trở thành một ngôn ngữ cực kỳ mạnh mẽ và năng động. Trong trường hợp các ngôn ngữ khác có nhiều dòng mã để hoàn thành một nhiệm vụ, Python thường có thể làm tương tự bằng cách sử dụng một lớp lót đơn. Đó là niềm vui của lập trình trong Python. Và người mới bắt đầu và các chuyên gia cũng đang học các thủ thuật mới mỗi ngày.

Show

Bài viết này thảo luận về một vài tính năng quan trọng của ngôn ngữ Python thường bị bỏ qua hoặc không được hiểu rõ, cũng như một vài điểm nổi bật mà các nhà phát triển dày dạn nhất.

Cụ thể, bài viết này sẽ thảo luận:

  • Tererators và máy phát điện
  • Danh sách hiểu
  • Sử dụng các hàm bất kỳ () và tất cả ()
  • Sử dụng hàm zip ()
  • Các nhà khai thác so sánh chuỗi
  • Sử dụng các đối tượng có thể thay đổi làm đối số mặc định
  • Chức năng Lambda

Tererators và máy phát điện

Danh sách hiểu

Sử dụng các hàm bất kỳ () và tất cả ()

nums = [3,4,1,7,9,5]
for n in nums:
print(n, end=' ')
# 3 4 1 7 9 5

Sử dụng hàm zip ()

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o

Các nhà khai thác so sánh chuỗi

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4

Sử dụng các đối tượng có thể thay đổi làm đối số mặc định

Chức năng Lambda

Iterator là một chủ đề trong Python không dễ dàng được đánh giá cao và hiểu. Và vì vậy tôi sẽ cố gắng hợp lý hóa nó trong bài viết này.

Đầu tiên, từ IT ITRATE có nghĩa là để có được một mục từ một cái gì đó, một mục tại một thời điểm. Trong Python, một số loại tích hợp hỗ trợ lặp lại (chúng tôi nói rằng chúng là một đối tượng có thể đi được). Ví dụ.

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
4,
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
5,
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
6, v.v ... Điều này có nghĩa là gì? Điều này có nghĩa là bạn có thể lặp qua từng mục trong biến, giả sử,
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
4:

Hoặc, A

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
5:

Tương tự, hàm

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
9 trả về một đối tượng
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

0, là một
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1.

Iterator vs Iterborable

Trong Python, hai thuật ngữ luôn xuất hiện khi chúng ta nói về sự lặp lại - có thể lặp lại và lặp đi lặp lại.

nums = [3,4,1,7,9,5]
i = iter(nums)

Một

nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1 là một đối tượng mà bạn có thể lặp lại (chẳng hạn như
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
4,
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
5, v.v.), trong khi
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5 là một đối tượng mà bạn có thể lặp lại thông qua việc sử dụng hàm
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

6. Một
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5 được tạo khi bạn gọi hàm
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

8 trên đối tượng
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1.

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5

Mỗi

nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5 là một
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1, trong khi không phải mọi
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1 là
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5. Ví dụ, đối tượng
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
4 là
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1, nhưng nó không phải là
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5.

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''

Bối rối? Xem xét ví dụ sau:

nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

class Fib: def __init__(self, max): self.max = max self.a = 0 self.b = 1 def __iter__(self): return self def __next__(self): fib = self.a if fib > self.max: raise StopIteration self.a, self.b = self.b, self.a + self.b return fib7 là một print(next(i))'''---------------------------------------------------------------------------StopIteration Traceback (most recent call last)<ipython-input-27-58c5a451ce44> in <module>----> 1 print(next(i))StopIteration: '''4, đó là một nums = [3,4,1,7,9,5]i = iter(nums)while True: try: print(next(i), end=' ') except StopIteration: break# 3 4 1 7 9 51. Khi bạn sử dụng vòng lặp fib = Fib(1000)0 để lặp qua nội dung của nó, nó sẽ tự động chuyển đổi class Fib: def __init__(self, max): self.max = max self.a = 0 self.b = 1 def __iter__(self): return self def __next__(self): fib = self.a if fib > self.max: raise StopIteration self.a, self.b = self.b, self.a + self.b return fib7 thành nums = [3,4,1,7,9,5]i = iter(nums)while True: try: print(next(i), end=' ') except StopIteration: break# 3 4 1 7 9 55. Khi bạn in ra giá trị của fib = Fib(1000)3, nó sẽ gọi hàm nums = [3,4,1,7,9,5]i = iter(nums)while True: try: print(next(i), end=' ') except StopIteration: break# 3 4 1 7 9 56 trên nums = [3,4,1,7,9,5]i = iter(nums)while True: try: print(next(i), end=' ') except StopIteration: break# 3 4 1 7 9 55 để có được giá trị tiếp theo. Khi không có thêm các yếu tố nào để nhận được từ nums = [3,4,1,7,9,5]i = iter(nums)while True: try: print(next(i), end=' ') except StopIteration: break# 3 4 1 7 9 55, hàm nums = [3,4,1,7,9,5]i = iter(nums)while True: try: print(next(i), end=' ') except StopIteration: break# 3 4 1 7 9 56 sẽ tăng ngoại lệ fib = Fib(1000)8 và vòng lặp fib = Fib(1000)0 sẽ chấm dứt ngay khi ngoại lệ này.

Tạo đối tượng Iterator

class Fib:                                        
def __init__(self, max):
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib

Bạn có thể chuyển đổi thủ công

nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

1 thành đối tượng iterator bằng hàm
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

8:Fib class contains the following:

  • Kết quả của hàm
    nums = [3,4,1,7,9,5]
    i = iter(nums)
    while True:
    try:
    print(next(i), end=' ')
    except StopIteration:
    break

    # 3 4 1 7 9 5

    8 là một đối tượng
    nums = [3,4,1,7,9,5]
    i = iter(nums)
    while True:
    try:
    print(next(i), end=' ')
    except StopIteration:
    break

    # 3 4 1 7 9 5

    5. Để có được từng mục trong đối tượng
    nums = [3,4,1,7,9,5]
    i = iter(nums)
    while True:
    try:
    print(next(i), end=' ')
    except StopIteration:
    break

    # 3 4 1 7 9 5

    5, bạn sẽ gọi hàm
    nums = [3,4,1,7,9,5]
    i = iter(nums)
    while True:
    try:
    print(next(i), end=' ')
    except StopIteration:
    break

    # 3 4 1 7 9 5

    6:
  • Mỗi lần bạn gọi hàm
    nums = [3,4,1,7,9,5]
    i = iter(nums)
    while True:
    try:
    print(next(i), end=' ')
    except StopIteration:
    break

    # 3 4 1 7 9 5

    6 trên trình lặp, giá trị tiếp theo trong ITEBLE sẽ được trả về. Khi mục cuối cùng đã đạt được và bạn gọi hàm
    nums = [3,4,1,7,9,5]
    i = iter(nums)
    while True:
    try:
    print(next(i), end=' ')
    except StopIteration:
    break

    # 3 4 1 7 9 5

    6, ngoại lệ
    fib = Fib(1000)
    8 sẽ được nâng lên:
  • Bạn có thể sao chép chức năng của vòng lặp
    fib = Fib(1000)
    0 bằng cách sử dụng đoạn mã sau:

Thực hiện các đối tượng lặp

fib = Fib(1000)

Có thể có những trường hợp khi bạn muốn tạo các đối tượng

nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5 của riêng mình. Hãy xem xét kịch bản sau - bạn muốn tạo chuỗi các số Fibonacci lên đến giá trị tối đa là 1000, nhưng bạn không cần tất cả các số cùng một lúc. Tất cả những gì bạn biết là bạn cần tạo ra các con số theo yêu cầu. Đây là một trường hợp sử dụng hoàn hảo cho các trình lặp. Đây là cách bạn có thể làm điều này bằng cách tạo đối tượng
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

5 của riêng bạn:

print(next(fib))  # 0
print(next(fib)) # 1
print(next(fib)) # 1
print(next(fib)) # 2
print(next(fib)) # 3

Trong nội bộ, lớp FIB chỉ cần lưu trữ ba biến -

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
12,
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
13 và
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
14.Fib class only needs to store three variables —
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
12,
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
13, and
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
14.

Nếu bạn muốn nhận tất cả các số trong chuỗi, bạn có thể sử dụng vòng lặp

fib = Fib(1000)
0:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
0

Ngoài ra, để buộc lớp FIB trả về tất cả các số cùng một lúc, hãy gọi nó bằng hàm danh sách ():Fib class to return all the numbers at once, call it using the list() function:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
1

Triển khai trình lặp bằng cách sử dụng máy phát điện

Mặc dù bạn có thể thực hiện

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
16 bằng cách sử dụng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
17 với các chức năng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
03 và
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
05, nhưng đôi khi nó có quá nhiều rắc rối. Một cách đơn giản hơn là sử dụng máy phát điện. Trình tạo cho phép bạn tạo trình lặp từ các chức năng. Như thường lệ, một ví dụ sẽ làm sạch không khí.

Trình tạo cho phép bạn tạo trình lặp từ các chức năng.

Một lần nữa, hãy xem xét ví dụ của ví dụ Fibonacci. Hãy tưởng tượng bây giờ yêu cầu thay đổi một chút. Thay vì tạo ra chuỗi số lên đến một số tối đa cụ thể, giờ đây bạn muốn tạo ra một chuỗi vô hạn của các số fibonacci. Bạn có thể thực hiện điều này bằng cách sử dụng một chức năng với một trình tạo:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
2

Điều này trông giống như một chức năng thông thường, ngoại trừ câu lệnh

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
20. Cụ thể, hàm
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
21 ở trên trả về
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
22Object.object.

Trình tạo là một hàm tạo ra một chuỗi các giá trị, thay vì một giá trị duy nhất.

Câu lệnh

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
20 giống như câu lệnh
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
24, với một ngoại lệ-khi câu lệnh
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
20 được thực thi, chương trình đình chỉ việc thực thi hàm, bảo tồn trạng thái của hàm và trả về giá trị; Lần tiếp theo người gọi gọi hàm () tiếp theo trên đối tượng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
22, việc thực thi hàm tiếp tục ở nơi trước đó.next() function on the
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
22 object, the execution of the function continues where it previously left off.

Một máy phát điện về cơ bản là một iterator.

Để xem cách thức hoạt động, hãy gọi hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
21 và gọi hàm
nums = [3,4,1,7,9,5]
i = iter(nums)
while True:
try:
print(next(i), end=' ')
except StopIteration:
break

# 3 4 1 7 9 5

6 trên đối tượng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
22:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
3

Điểm quan trọng từ ví dụ này là các trình lặp (và máy phát) rất tốt để tính toán các bộ kết quả lớn mà bạn không biết khi nào bạn sẽ cần tất cả các kết quả hoặc nơi bạn không muốn phân bổ bộ nhớ cho tất cả kết quả cùng một lúc.

Danh sách hiểu

Một trong những tính năng mang tính biểu tượng của Python là sự hiểu biết danh sách. Danh sách hiểu là một minh chứng hoàn hảo cho sự thanh lịch của Python-dễ đọc, dễ hiểu, đơn lẻ và mạnh mẽ.

Danh sách hiểu cho phép bạn tạo danh sách bằng cú pháp sau:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
4

Ví dụ: để tạo danh sách các số chẵn từ 0 đến 10, bạn có thể sử dụng câu lệnh sau:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
5

Tại đây, bạn tạo ra một loạt các giá trị từ 0 đến 11 (độc quyền), với kích thước bước là 2. nghĩa là, 0,2,4,6,8 và 10. sau đó bạn sử dụng vòng lặp để lặp qua bộ này của các số sử dụng biến

fib = Fib(1000)
3. Mỗi giá trị của n sau đó được thêm vào danh sách. Kết quả cuối cùng là:for loop to iterate through this set of numbers using the variable
fib = Fib(1000)
3. Each value of n is then added to the list. The end result is:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
6

Bạn cũng có thể thêm một biểu thức tùy chọn sau khi có thể lặp lại, như thế này:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
7

Câu lệnh trên sẽ tạo ra kết quả tương tự. Trong trường hợp này N sẽ chỉ đảm nhận tất cả các số từ 0 đến 11 (độc quyền) chia hết cho 2. Lưu ý rằng bạn không được phép có điều kiện

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
31 ở đây:n will only take on all the numbers from 0 to 11 (exclusive) that is divisible by 2. Note that you are not allowed to have an
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
31 condition here:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
8

Mặt khác, bạn cũng có thể đặt biểu thức của mình trước vòng lặp

fib = Fib(1000)
0, như thế này:

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
9

Trong tuyên bố trên, bạn đang kiểm tra xem N có chia hết cho 2. Nếu có, kết quả sẽ bao gồm N, nếu không nó sẽ bao gồm ____ ____133. Xin lưu ý rằng trong trường hợp này, tuyên bố

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
31 là bắt buộc.n is divisible by 2. If it is, the result will include n, else it will include “
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
33”. Do note that in this case, the
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
31 statement is mandatory.

Khi không sử dụng danh sách hiểu biết

Mặc dù danh sách hiểu là thanh lịch, có những lúc bạn không nên sử dụng nó. Bởi vì sự hiểu biết danh sách đòi hỏi tất cả các mục trong danh sách phải được tạo và lưu trữ trong bộ nhớ, nên nó rất kém hiệu quả khi nói đến việc xử lý số lượng lớn các mặt hàng.

Hãy xem xét trường hợp bạn muốn tổng hợp tất cả các số từ 1 đến 1000000000. Sử dụng danh sách hiểu, mã của bạn sẽ trông giống như:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
0

Vấn đề là trước tiên bạn cần tạo ra 1 tỷ số trong danh sách trước khi bạn có thể tổng hợp chúng bằng hàm sum (). Câu lệnh trên sử dụng rất nhiều bộ nhớ. Trong kịch bản này, tốt hơn là sử dụng một trình tạo, như thế này:sum() function. The above statement uses a lot of memory. In this scenario, it is better to use a generator, like this:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
1

Lưu ý: Máy phát điện được đính kèm với dấu ngoặc đơn.

Sử dụng các trình tạo, mỗi lần một số được tạo, nó được thêm vào tổng hiện tại và sau đó bị loại bỏ. Do đó, không cần lưu trữ 1 tỷ số trong bộ nhớ.

Sử dụng các hàm bất kỳ () và tất cả ()

Hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
35 kiểm tra một số khác (danh sách, tuple, bộ, trình tạo, v.v.) để xem liệu có bất kỳ mục nào là
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
36 không. Mặt khác, chức năng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
37 kiểm tra một điều khác để xem tất cả các mục là
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
36.

Sau đây kiểm tra danh sách để xem liệu bất kỳ mục nào trong

class Fib:                                        
def __init__(self, max):
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
7 đều là số thậm chí:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
2

Nếu bạn muốn xem tất cả các số trong num đều chẵn, thì hãy sử dụng hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
37:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
3

Vì vậy, đây là một bài kiểm tra để tự kiểm tra. Đưa ra một danh sách các từ, bạn có thể viết mã để kiểm tra xem có từ nào trong danh sách có chứa nguyên âm không (tức là ‘aeoiu,)?

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
4

Bây giờ, hãy tự mình thử trước khi bạn quay lại để trả lời.

Sẳn sàng? Xong?

Dưới đây là câu trả lời của tôi bằng cách sử dụng hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
35 và danh sách hiểu:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
5

Để hiểu câu lệnh trên, bạn bắt đầu với biểu thức bên phải nhất:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
6

Điều này trả về một máy phát điện. Sau đó, với mỗi từ, bạn kiểm tra từng ký tự để xem nó có chứa bất kỳ ký tự nào trong ‘AEIOU, không:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
7

Hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
35 thực hiện ngắn mạch-miễn là một ký tự nằm trong ‘Aeiou, không cần phải kiểm tra thêm. Và việc ngắn mạch này được mở rộng cho tất cả các từ trong danh sách:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
8

Nếu bất kỳ từ nào trong danh sách có một ký tự trong ‘AEIOU, thì hoạt động sẽ dừng và trả về

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
36.

Sử dụng hàm zip ()

Hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
44 kết hợp hai lần lặp lại với nhau. Xem xét các đoạn mã sau:

r = range(5)
for i in r:
print(i, end=' ')
# 0 1 2 3 4
9

Bạn có ba bộ ngày, mỗi ngày được lưu trữ trong ba danh sách riêng biệt. Nếu bạn muốn trích xuất tất cả các ngày, bạn có thể kết hợp chúng bằng hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
44:

nums = [3,4,1,7,9,5]
i = iter(nums)
0

Nhưng hàm ____144 trả về một đối tượng

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
47 mà bạn phải lặp lại để có được nội dung của nó. Cách dễ nhất là sử dụng danh sách hiểu, như thế này:
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
44 function returns a
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
47 object, which you must iterate over to get its content. The easiest way is to use list comprehension, like this:

nums = [3,4,1,7,9,5]
i = iter(nums)
1

Sau đó, bạn có thể chuyển đổi từng tuple trong danh sách thành đối tượng

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
48:

nums = [3,4,1,7,9,5]
i = iter(nums)
2

Các nhà khai thác so sánh chuỗi

Khi thực hiện so sánh, người ta thường kiểm tra xem một giá trị có nằm trong một phạm vi cụ thể không. Ví dụ: bạn muốn kiểm tra xem một biến có nhiều hơn 2 và dưới 6 không, và do đó mã thông thường trông như thế này:

nums = [3,4,1,7,9,5]
i = iter(nums)
3

Tuy nhiên, Python hỗ trợ các toán tử so sánh chuỗi chuỗi và do đó bạn có thể viết lại biểu thức so sánh ở trên như thế này:

nums = [3,4,1,7,9,5]
i = iter(nums)
4

Chắc chắn trông gọn gàng hơn và dễ hiểu hơn!

Không sử dụng các đối tượng có thể thay đổi làm đối số mặc định

Python hỗ trợ các đối số tùy chọn - Đối số nếu không được cung cấp sẽ được cung cấp một giá trị mặc định. Tính năng có vẻ đơn giản và đơn giản này có một số hành vi bất ngờ nếu bạn không cẩn thận. Xem xét những điều sau đây

nums = [3,4,1,7,9,5]
i = iter(nums)
5

Đối số thứ hai

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49 là tùy chọn. Nếu không được cung cấp một giá trị ____149 sẽ giả định một danh sách trống. Trong chức năng,
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
51 sẽ được thêm vào
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49. Để dễ dàng nhìn thấy giá trị của
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49, tôi in nó ra trong hàm.

Hãy để thử nghiệm Gọi chức năng với cả hai đối số được cung cấp:

nums = [3,4,1,7,9,5]
i = iter(nums)
6

Kết quả ở trên có vẻ hợp lý và hoạt động phù hợp với sự hiểu biết của chúng tôi. Bây giờ, hãy bỏ qua đối số thứ hai và gọi chức năng với

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
54. Vì đối số thứ hai hiện bị bỏ qua,
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49 nên giả định
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
56. Việc nối thêm một
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
54 đến
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
56 sẽ dẫn đến
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
59, như mong đợi:

nums = [3,4,1,7,9,5]
i = iter(nums)
7

Tuy nhiên, nếu bạn gọi lại chức năng với cùng một đối số, bây giờ bạn sẽ nhận được

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
60:

nums = [3,4,1,7,9,5]
i = iter(nums)
8

Gọi hàm một lần nữa mang lại

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
61:

nums = [3,4,1,7,9,5]
i = iter(nums)
9

Bạn sẽ mong đợi rằng mỗi khi bạn gọi hàm,

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49 sẽ được khởi tạo thành
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
56. Tuy nhiên, đây rõ ràng không phải là trường hợp. Hóa ra đối với các đối số tùy chọn, nếu giá trị mặc định là loại có thể thay đổi (danh sách là loại có thể thay đổi), giá trị mặc định sẽ chỉ được khởi tạo một lần. Khi hàm sau đó được gọi,
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49 sẽ tiếp tục giá trị hiện có của nó. Và điều này dẫn đến khá bất ngờ cho khá nhiều người.

Nói chung, không sử dụng các đối tượng có thể thay đổi làm giá trị cho các đối số tùy chọn.

Vì vậy, làm thế nào để bạn sửa chữa nó để hoạt động như bạn đã dự định? Dễ nhất là thực hiện khởi tạo

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
49 bên trong hàm và đặt nó thành
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
66 trong khai báo chức năng:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
0

Chức năng của bạn bây giờ sẽ hoạt động như dự định:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
1

Chức năng Lambda

Python hỗ trợ việc sử dụng các hàm Lambda. Các hàm Lambda là các hàm ẩn danh mà không có tên. Về bản chất, các hàm Lambda là các hàm biểu hiện đơn. Việc sử dụng phù hợp các chức năng Lambda có thể làm cho mã của bạn dễ đọc và có thể duy trì hơn. Hãy để cố gắng hiểu làm thế nào chức năng Lambda hoạt động.

Xem xét danh sách các số sau,

class Fib:                                        
def __init__(self, max):
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
7:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
2

Giả sử bạn muốn nhân mỗi số với một hằng số, giả sử, 2. Điều này có thể dễ dàng đạt được bằng cách sử dụng một số phương pháp. Một là mặc dù danh sách hiểu biết:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
3

Một phương pháp khác là sử dụng hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68. Hàm
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68 cho phép bạn áp dụng một hàm trên tất cả các yếu tố của một điều đáng tin cậy (như một danh sách), do đó ánh xạ (do đó tên của nó) nó từ giá trị này sang giá trị khác. Để hiểu làm thế nào chức năng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68 hoạt động, hãy để Lừa làm việc trên từng bước một.

Hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68 có hai đối số - một hàm và một hàm. Đối với chức năng, hãy để xác định một hàm gọi là
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
72, với tham số đầu vào và chuyển nó đến hàm
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
4

Khi xử lý các chức năng có chức năng khác (chẳng hạn như hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68), tôi luôn muốn xác định hàm và in ra các đối số trước để tôi có thể kiểm tra những gì được truyền vào hàm. Khi bạn chạy đoạn mã trên, không có gì được in ra. Điều này là do hàm
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
68 trả về một đối tượng
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
76, bản thân nó là một trình lặp (và do đó có thể lặp lại). Bạn có thể xác nhận nếu một đối tượng có thể lặp lại bằng cách sử dụng các câu lệnh sau:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
5

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
77 là một trình lặp, để bạn thấy đầu ra của hàm thay đổi (), bạn có thể sử dụng chuyển đổi nó thành
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
4 bằng hàm
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
79:change() function, you can use convert it to a
print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
4 using the
s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
79 function:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
6

Bây giờ bạn có thể thấy đầu ra sau:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
7

Vì vậy, bây giờ rõ ràng hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
72 đang làm gì - về cơ bản nó có tất cả các số trong danh sách
class Fib:                                        
def __init__(self, max):
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
7 từng cái một và sau đó trả về số.

Bây giờ, hãy để Lừa chỉ trả về mỗi số nhân với 2:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
8

Và đầu ra sẽ là:

print(next(i))    # 3
print(next(i)) # 4
print(next(i)) # 1
print(next(i)) # 7
print(next(i)) # 9
print(next(i)) # 5
9

Với một bức tranh rõ ràng hơn về những gì hàm

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
72 đang làm, bạn có thể tập trung vào việc chuyển đổi nó thành hàm Lambda.

Hãy nhớ rằng, một hàm Lambda không có tên và nó chỉ có thể chứa một biểu thức duy nhất.

Vì vậy, chức năng

s = 'Hello'
for c in s:
print(c, end=' ')
# H e l l o
72 hiện có thể được viết lại như sau:

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
0

Điều gì sẽ xảy ra nếu bạn muốn chuyển đổi các số thành chuỗi và tiền tố mỗi chuỗi với dấu hiệu ____ ____184? Bạn có thể làm điều đó bằng cách sử dụng chuỗi F:

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
1

F-String là một tính năng có sẵn với Python 3.6 trở lên

Làm thế nào về việc áp dụng thuế bán hàng 7% cho mỗi mặt hàng? Biến F-String hỗ trợ các biểu thức Python:

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
2

Điều gì sẽ xảy ra nếu thuế bán hàng chỉ áp dụng cho các mặt hàng từ 5 đô la trở lên? Bạn có thể làm điều đó bằng cách sử dụng các toán tử python ternary:

print(next(i))
'''
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-27-58c5a451ce44> in <module>
----> 1 print(next(i))
StopIteration:
'''
3

Miễn là nội dung của hàm có thể được hoàn thành trong một biểu thức duy nhất, bạn có thể sử dụng hàm lambda thay cho hàm thông thường.

Các chức năng Lambda rất hữu ích và đặc biệt tuyệt vời khi xử lý các khung dữ liệu gấu trúc.

Bản tóm tắt

Tôi hy vọng bây giờ bạn hiểu rõ hơn về một số tính năng gọn gàng trong Python. Nếu bạn nghĩ rằng tôi đã bỏ lỡ bất kỳ tính năng cụ thể nào đáng được đề cập, hãy cho tôi biết!

Đá quý trong Python là gì?

GEMS là một thư viện Python để lập trình các quy trình mô phỏng MDO, được xây dựng trên đỉnh Numpy2, SCIPY3 và MATPLOTLIB4.a Python library for programing MDO simulation processes, built on top of NumPy2, SciPy3 and Matplotlib4.

Python có dễ học không?

Python được xem xét rộng rãi trong số các ngôn ngữ lập trình dễ nhất cho người mới bắt đầu học hỏi. Nếu bạn quan tâm đến việc học ngôn ngữ lập trình, Python là một nơi tốt để bắt đầu. Nó cũng là một trong những người được sử dụng rộng rãi nhất.. If you're interested in learning a programming language, Python is a good place to start. It's also one of the most widely used.

Tại sao Python là phổ biến?

Python rất dễ học, nó sử dụng cú pháp đơn giản hóa với sự nhấn mạnh vào ngôn ngữ tự nhiên, cho một đường cong học tập dễ dàng hơn nhiều cho người mới bắt đầu.Và, vì Python có thể sử dụng miễn phí và được hỗ trợ bởi một hệ sinh thái cực kỳ lớn của các thư viện và gói, nó thường là ngôn ngữ lựa chọn đầu tiên cho các nhà phát triển mới. It uses a simplified syntax with an emphasis on natural language, for a much easier learning curve for beginners. And, because Python is free to use and is supported by an extremely large ecosystem of libraries and packages, it's often the first-choice language for new developers.

Ngôn ngữ Python được sử dụng để làm gì?

Python là ngôn ngữ lập trình máy tính thường được sử dụng để xây dựng các trang web và phần mềm, tự động hóa các tác vụ và tiến hành phân tích dữ liệu.Python là một ngôn ngữ đa năng, có nghĩa là nó có thể được sử dụng để tạo ra nhiều chương trình khác nhau và không chuyên về bất kỳ vấn đề cụ thể nào.build websites and software, automate tasks, and conduct data analysis. Python is a general-purpose language, meaning it can be used to create a variety of different programs and isn't specialized for any specific problems.