$ 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
{}[1] = 2
означает, что {} -- не константа.
no subject
А в примере с a словарь как был a, так и остался.
Ты ещё скажи, что 0 -- не константа, так как к нему можно прибавить единицу. Просто языки типа C не позволяют идиотской записи 0++ или что-нибудь в этом роде, а питон позволяет идиотскую запись с пустым словарём, поскольку детали реализации такие.
no subject
{}.setdefault("key", "value")
no subject
def foo(x, y=dict()):
pass
все что до первого отступа -- часть конструкции def и выполняется "одновременно с ней" и одноразово. В замыкание попадает созданый экзепляр.
no subject
no subject
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
... Ice tu ei, hoi Brutus? ...
no subject
no subject
no subject
no subject
no subject
no subject