2013-03-29 2 views
1

Например, у меня есть функция, скажем alert(). Я хочу, чтобы функция также работала, если кто-то звонит alert_user(), оба имеют одинаковую функциональность. Я полагаю, что это будет что-то вроде этого:Как разрешить функцию для вызова двумя именами?

@synonym alert_user 
def alert(): 
    print('hi!') 

И это будет работать так:

>>> alert() 
hi! 
>>> alert_user() 
hi! 

Есть ли такая вещь?

+3

Я думаю, что это идет вразрез с философией Пайтона «Там должно быть одно-- и предпочтительно только один --obvious способ сделать это.» –

+1

@WaleedKhan: Это правда, но для этого могут быть законные причины (особенно, если вы вносите изменения в API, но должны сохранять старые имена для обратной совместимости в течение переходного периода, прежде чем старые имена будут удалены). – BrenBarn

+1

определите 'alert_user' следующим образом:' def alert_user(): alert() '. –

ответ

9

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

def alert(): 
    print('hi!') 
alert_user = alert 
+0

'raw_input = input' сделает' raw_input() 'доступным в Python 3. –

+0

Если это необходимо по какой-то причине, это был бы лучший способ сделать это – jamylak

3

Это даст вам то, что вы хотите

def alert(): 
    print('hi!') 

alert_user = alert 

>>> alert() 
hi! 
>>> alert_user() 
hi! 
2

Функция является первым гражданином уровня в питона. Просто добавьте alert_user = alert.

0

Как указано выше другими помощниками, вы можете определить предупреждение как функцию, а затем дать предупреждение переменному представлению.

alert_user = alert 

Благодаря Бен

Смежные вопросы