Вы не можете передавать операторы напрямую, вам нужна такая функция:
from operator import eq
string1 = "guybrush"
string2 = "guybrush threepwood"
def compare(op):
print(op(string1, string2))
compare(eq)
>>>False
Оператор in немного сложнее, так как operator
не имеет оператора in
. но имеет contains
operator.contains(a, b)
так же, как b in a
, но это не будет работать в вашем случае, так как порядок строк установлен. В этом случае вы можете просто определить свою собственную функцию:
def my_in(a, b): return a in b
compare(my_in)
>>>True
Лучший способ определить поток через его управляемый идентификатор:
Thread.CurrentThread.ManagedThreadId;
Так как финализатор всегда работает в потоке GC, можно создать финализатор, который сохранит идентификатор потока (или объект потока) в valiable помехах.
Образец:
public class ThreadTest {
public static Thread GCThread;
~ThreadTest() {
ThreadTest.GCThread = Thread.CurrentThread;
}
}
в Вашем коде просто создают экземпляр этого класса и делают сборку "мусора":
public static void Main() {
ThreadTest test = new ThreadTest();
test = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(ThreadTest.GCThread.ManagedThreadID);
}
Y код Минимума мог быть улучшен немного...
public static void Main()
{
ThreadTest test = new ThreadTest();
test = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(ThreadTest.GCThread.ManagedThreadID);
}
Если отладка является опцией, можно легко найти это использованием WinDbg + SoS.dll. !threads
управляйте отображает все управляемые потоки в приложении, и поток финализатора конкретно выделяется с комментарием.
Я не думаю, что это возможно даже использование API отладки, посмотрите это сообщение в блоге для большего количества информации.