Stylecop говорит мне добавлять это ключевое слово, но это избыточно - какие-либо последствия производительности?

Попробуйте это

ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD'), (40, 'EEE')]

ListInt = []
ListStr = []

for item in ListTuples:
    strAux = ''
    intAux = ''
    for i in range(0, len(item)):

        if(isinstance(item[i], str)):
            strAux+=item[i] 
        else:
            intAux+=str(item[i])


    ListStr.append(strAux)
    ListInt.append(intAux)


print(ListStr)

'''TO CONVERT THE STR LIST TO AN INT LIST'''
output= list(map(int, ListInt)) 
print(output)

Выход будет [100, 80, 20, 40, 40]

5
задан bnieland 7 January 2013 в 20:23
поделиться

6 ответов

Это для ясности и предотвратить любую неоднозначность между участником класса и локальной переменной или параметром с тем же именем.

IL, в который это компилирует, не будет несколько отличаться.

12
ответ дан 18 December 2019 в 09:10
поделиться

Большая часть времени только для ясности, но несколько раз она требуется.

using System;

class Foo
{
    String bar;

    public Foo(String bar)
    {
        this.bar = bar;
    }
}

Здесь Вам будет нужно this поскольку это служит для устранения неоднозначности между полем bar и параметр конструктора bar. Очевидно, менять имя параметра или поля могло выполнить то же самое.

3
ответ дан 18 December 2019 в 09:10
поделиться

Кроме примеров ясности, если единственное другое допустимое использование "этого" ключевого слова должно передать текущий экземпляр объекта как параметр.

0
ответ дан 18 December 2019 в 09:10
поделиться

В C# это - ссылка на текущий экземпляр класса (это - я в VB.NET). Это используется обычно для полного определения участника класса. Например, рассмотрите этот класс C#:

public class MyClass
{
    int rate;

    private void testMethod()
    {
        int x;

        x = this.rate;
    }
}

это не требуется в коде выше, но добавляет мгновенную ясность при чтении кода, что уровень принадлежит классу, а не методу (поиск Так, Вы найдете много мнений об использовании этого). Это - семантическое поведение, то же в VB - и его использование не налагает потерю производительности.

0
ответ дан 18 December 2019 в 09:10
поделиться

Во всех случаях нет никакого различия в производительности с/без this - компилятор все еще делает это неявно, вводя a ldarg.0 в IL.

Только для полноты, существует еще одно обязательное использование this (исключая разрешение неоднозначности, ctor- объединение в цепочку и передача this к другим методам): дополнительные методы. Для вызова дополнительного метода на текущем экземпляре необходимо квалифицировать с this (даже при том, что для обычного метода это было бы неявно).

Конечно, в большинстве случаев, Вы просто добавили бы регулярный метод экземпляра для класса или базового класса...

class Foo {
    void Test() {
        this.Bar(); // fine
        Bar(); // compiler error
    }
}
static class FooExt {
    public static void Bar(this Foo foo) { }
}
3
ответ дан 18 December 2019 в 09:10
поделиться

Это только для ясности, и можно спорить о том, что лучше. Python не поддерживает исключение "сам" идентификатор вообще.

Кроме того, с CLR вещам последовательно нравится это падение через языки? Таким образом, если ответ - то, что компилятор даже не касается этого ключевого слова, и это только для презентации и ясности, затем то же верно для VB.NET?

В JVM наверняка (и также для CLR, я почти уверен) всегда генерируется код для "этого" ключевого слова, даже если это опущено из источника - таким образом, это похоже, если это ключевое слово всегда добавляется. Так, я не думаю, что любой компилятор.NET мог генерировать другой вывод, таким образом, не может быть потери производительности.

Затем это зависит от языка. Например, JScript (и даже JScript.NET) не позволяет опускать "это", как Python, потому что существуют функции (таким образом, "this.a ()" вызов метода, "()" вызов функции), и потому что компилятор не знает членов никаких типов - они только известны во времени выполнения (хорошо, это не невозможная проблема для решения действительно, другая проблема более релевантна).

0
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: