$ python
Python 2.6.5 (r265:79063, Mar 31 2010, 18:32:31)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x, y={}):
... y[x]=1
... print y
...
>>> f(1)
{1: 1}
>>> f(2)
{1: 1, 2: 1}
>>>
Они называют это деталями реализации.
Апдейт для непонятливых:
1. Мне не нужно объяснять, *почему* оно так работает. Я понимаю.
2. Я ничего против питона не имею. Очень приятный язык, лучше многих.
3. Но данное конкретное место вызывает у меня резкое отвращение.
Tags:
no subject
def f(x, y = ff()):
....
no subject
Вообще-то, достаточно разумная оптимизация -- зачем передавать объект в качестве дефолтного значения параметра (то есть не возвращать его наружу) и при этом менять его внутри функции?
no subject
no subject
no subject
no subject
no subject
no subject
Вот если a = {}, то a -- не константа, да. Но это не объясняет синтаксиса, в котором {} может означать невесть что.
no subject
>>> {}[1]=2; print {}
{}
>>> a={}; a[1]=2; print a
{1: 2}
no subject
{}.setdefault("key", "value")
no subject
{}[1] = 2
означает, что {} -- не константа.
no subject
def foo(x, y=dict()):
pass
все что до первого отступа -- часть конструкции def и выполняется "одновременно с ней" и одноразово. В замыкание попадает созданый экзепляр.
no subject
no subject
А в примере с a словарь как был a, так и остался.
Ты ещё скажи, что 0 -- не константа, так как к нему можно прибавить единицу. Просто языки типа C не позволяют идиотской записи 0++ или что-нибудь в этом роде, а питон позволяет идиотскую запись с пустым словарём, поскольку детали реализации такие.
no subject
... Государственный разъяснитель третьего ранга ...
no subject
... Ice tu ei, hoi Brutus? ...
no subject
$ ./4
0x100000f00
0x100000f00
для вот такого кода:
$ cat 4.c
#include
$ ./4
0x100000f00
0x100000f00
для вот такого кода:
$ cat 4.c
#include <stdio.h>
int main(){
f();
f();
}
void f(int a){
char *s = "Test";
printf("%p\n", s);
}
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject