Калькуляционный аргумент
- 1 year ago
- 0
- 0
В программировании , аргумент по умолчанию является аргументом функции , который при вызове необязательно указывать. В большинстве языков программирования, функции могут принимать один или несколько аргументов. Как правило, все аргументы должны быть указаны в полном объеме (как в языке программирования C ). Позже некоторые языки (например, C++ ) позволяли программисту в объявлении функции указывать значения некоторых аргументов. Таким образом функцию можно было вызывать передавая лишь обязательные аргументы.
Рассмотрим следующее объявление функции:
int my_func(int a, int b, int c=12);
Эта функция принимает три аргумента, последний из которых имеет значение по умолчанию 12. Программист может вызвать эту функцию двумя способами:
result = my_func(1, 2, 3);
result = my_func(1, 2);
В первом случае значение аргумента c определяется в вызове функции и равно трём. Во втором случае последний аргумент опущен и c примет значение двенадцать .
Аргументы по-умолчанию задаются начиная с последнего аргумента.
Значения аргументов по умолчанию для виртуальных методов не определяются во время исполнения по типу объекта, а берутся из типа указателя. В этом примере на экран консоли будет выведено
1 Derived
:
class Base
{
public: virtual void foo(int x=1) {
std::cout << x << " Base";
}
};
class Derived : public Base
{
public: void foo(int x=2) override {
std::cout << x << " Derived";
}
};
int main () {
Base* x = new Derived;
x->foo(); // "1 Derived"
return 0;
}
Для функций-членов значения аргументов по умолчанию можно указывать в определениях. Вызвать такие функции с подставленными значениями по умолчанию можно только если их определение встречается раньше вызова. Пример :
struct C {
void g(int i, int j = 99);
C(int a);
};
C::C(int =5) { }
void C::g(int i = 88, int j) { }
Некоторые другие языки, такие как Java , не поддерживают аргументы по умолчанию. Однако такое поведение может быть воспроизведено с помощью перегрузки метода с тем же именем и меньшим числом аргументов:
int MyFunc(int a, int b) {
return MyFunc(a, b, 12);
}
int MyFunc(int a, int b, int c) {
/* основная реализация */
}
Для каждого вызова функции, значения аргументов по умолчанию должны быть переданы вызываемой функции. Это приводит к повторяемости в коде. Аргументы по умолчанию избавляют позволяют избежать этого.
Если аргумент по умолчанию — это не просто литерал, а выражение, то это выражение может быть вычислено один раз для всей программы.
Python примечателен тем, что вычисляет выражения в аргументах по умолчанию лишь один раз, во время загрузки модуля. Если требуется вычисление значения в каждом вызове функции, можно присвоить аргументу сигнальное значение, (например,
None
в Python) а затем в первой строке функции, проверить его.
Например, аргументы по умолчанию в Python могут быть реализованы следующим образом:
import datetime
def f(a, b=None):
b = b or datetime.datetime.now()