小编fiz*_*ear的帖子

Kotlin 中多个 init 块的用例?

我注意到 Kotlin 中的类可以有多个 init 块。如果是,它们将按顺序执行。

拥有多个的好用例是什么?

kotlin

9
推荐指数
2
解决办法
734
查看次数

为什么python在条件等待之前要求您获取锁

Python有一个称为的线程对象Condition,它阻塞一个线程,直到另一个线程调用notifiy()notify_all()在其上等待。wait()但是,在调用该方法之前,必须先调用acquire()以获取内部锁。wait()然后该方法释放锁并等待通知,此后它将继续重新获取锁,并且您可以运行一些需要线程安全的代码。我的问题是,为什么Condition调用该wait()方法时对象不只是在内部自动获取锁:

Python线程文档

必须使用关联的锁来调用其他方法。该wait()方法释放该锁,然后阻塞直到另一个线程通过调用notify()或唤醒它notify_all()。唤醒后,wait()重新获取锁并返回。也可以指定超时。

因此,在此代码中,我获取了锁,wait方法立即释放它,然后在通知它再次获取它之后,我最终释放了它。

lock = threading.Lock()
condition = threading.Condition(lock=lock)
...
condition.lock()    # acquire the lock
condition.wait()    #  waiting for another thread to notify me
condition.release() # release the lock

Run Code Online (Sandbox Code Playgroud)

为什么wait()呼叫不只是等待,然后在收到通知后立即获取锁,所以我看不到为什么要获取然后释放的锁

python multithreading python-internals

7
推荐指数
1
解决办法
243
查看次数

为什么在python f-strings中使用双花括号而不是反斜杠?

我们通常使用反斜杠来转义非法字符。

例如,转义双引号。

>>> "\"" == '"'
True
Run Code Online (Sandbox Code Playgroud)

在 f 字符串中,花括号用于占位。为了表示花括号,花括号被加倍。

例如,

>>> f"{{}}" == "{}"
True
Run Code Online (Sandbox Code Playgroud)

为什么在开发 f 弦时不喜欢这种直观的方法?有什么技术或设计原因吗?

>>> f'\{\}'
  File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash
Run Code Online (Sandbox Code Playgroud)

python string-formatting python-internals

5
推荐指数
1
解决办法
561
查看次数