PYTHONL Telegram 4937
πŸ–₯ ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ, Π½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ: динамичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ мноТСством контСкст-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· `contextlib.ExitStack`

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ *N* Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ *M* Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ настроСк, Π° ΠΈΡ… количСство извСстно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ with … as …: Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚. ВмСсто Β«ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹Β» Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… with Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ExitStack:


from contextlib import ExitStack

filenames = ["a.log", "b.log", "c.log"]

with ExitStack() as stack:
files = [stack.enter_context(open(name)) for name in filenames]

# Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас список ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ
for f in files:
print(f.readline())
# здСсь ExitStack автоматичСски Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ всС Ρ„Π°ΠΉΠ»Ρ‹, Π΄Π°ΠΆΠ΅ Ссли ΠΈΡ… Π±Ρ‹Π»ΠΎ 1000


ΠŸΠΎΡ‡Π΅ΠΌΡƒ это ΠΊΡ€ΡƒΡ‚ΠΎ

- УправляСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом контСкстов: добавляСтС ΠΈΡ… Π² Ρ†ΠΈΠΊΠ», условно, Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.
- Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ rollback ΠΏΡ€ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ…: всё, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ExitStack, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.
- Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ: ΠΌΠΎΠΆΠ½ΠΎ динамичСски Β«ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΒ» Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ сСйчас (Ρ„Π°ΠΉΠ»Ρ‹, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, сСтСвыС соСдинСния).

πŸ”§ Π“Π΄Π΅ пригодится

- ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ².
- ВСстовыС стСнды с ΠΊΡƒΡ‡Π΅ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рСсурсов.
- ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ собствСнныС контСкст-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ «каскада ΠΈΠ· withΒ» β€” ΠΎΠ΄ΠΈΠ½ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ ExitStack.

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘14πŸ”₯11❀8



tgoop.com/pythonl/4937
Create:
Last Update:

πŸ–₯ ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ, Π½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ: динамичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ мноТСством контСкст-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· `contextlib.ExitStack`

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ *N* Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ *M* Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ настроСк, Π° ΠΈΡ… количСство извСстно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ with … as …: Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚. ВмСсто Β«ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹Β» Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… with Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ExitStack:


from contextlib import ExitStack

filenames = ["a.log", "b.log", "c.log"]

with ExitStack() as stack:
files = [stack.enter_context(open(name)) for name in filenames]

# Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас список ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ
for f in files:
print(f.readline())
# здСсь ExitStack автоматичСски Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ всС Ρ„Π°ΠΉΠ»Ρ‹, Π΄Π°ΠΆΠ΅ Ссли ΠΈΡ… Π±Ρ‹Π»ΠΎ 1000


ΠŸΠΎΡ‡Π΅ΠΌΡƒ это ΠΊΡ€ΡƒΡ‚ΠΎ

- УправляСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом контСкстов: добавляСтС ΠΈΡ… Π² Ρ†ΠΈΠΊΠ», условно, Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.
- Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ rollback ΠΏΡ€ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ…: всё, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ExitStack, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.
- Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ: ΠΌΠΎΠΆΠ½ΠΎ динамичСски Β«ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΒ» Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ сСйчас (Ρ„Π°ΠΉΠ»Ρ‹, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, сСтСвыС соСдинСния).

πŸ”§ Π“Π΄Π΅ пригодится

- ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ².
- ВСстовыС стСнды с ΠΊΡƒΡ‡Π΅ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рСсурсов.
- ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ собствСнныС контСкст-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ «каскада ΠΈΠ· withΒ» β€” ΠΎΠ΄ΠΈΠ½ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ ExitStack.

@pythonl

BY Python/ django


Share with your friend now:
tgoop.com/pythonl/4937

View MORE
Open in Telegram


Telegram News

Date: |

Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. Step-by-step tutorial on desktop: To edit your name or bio, click the Menu icon and select β€œManage Channel.” Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021.
from us


Telegram Python/ django
FROM American