2014-12-20 5 views
1

Почему невозможно дать функцию, операцию в python? Я знаю, что предоставление параметра функции означает, что параметр превращается в действительный параметр. Вот пример:Дать функцию в python (JES)

def function(beta + 'aei') # beta = 'randomstring' 
    print beta 

Я бы не для тупых, но у меня это сомнение в разъяснении .. :)

+1

Что вы намерены делать? – BrenBarn

ответ

0

Вы можете выполнять любые операции с параметром внутри функции.

def function(beta): 
    print beta + 'aei' 

Вы также можете изменить параметр внутри функции:

def function(beta): 
    beta = beta + 'aei' 
    print beta 
+0

Я в порядке с тем, что вы написали здесь. Я просто спрашиваю, есть ли причина для ошибки при выполнении функции def (beta + 'aei') ' –

+0

Что вы подразумеваете под «причиной»? Когда вы определяете функцию, вы указываете имена параметров и, возможно, значения по умолчанию. Любые операции, которые должны выполняться со значениями, должны выполняться либо внутри функции, либо в коде, который ее вызывает. – yole

+0

Хорошо, а что с функцией def (beta = 'string') 'beta определяется как глобальная переменная или локальная? Как сказал Platinum Azure –

0

Почему бы не просто осуществить операцию в функции утверждения?

def function(beta) # beta = 'randomstring' 
    print beta + 'aei' 

Если вы хотите значение по умолчанию для параметра beta, вы можете сделать это:

def function(beta='randomstring') 
    print beta + 'aei' 
+0

Выполнение этой функции def (beta = 'randomstring') 'означает принимать бета-версию в качестве глобального var? И мой вопрос в том, почему я не могу выполнить функцию def (beta + 'aei'). Что-то не так с изменяемым или неизменяемым объектом в python или .. Я не знаю! –

+0

Нет, 'beta' в этом случае не является глобальным. И что не так с синтаксисом, просто в том, что лексер языка не позволяет этого. Это было бы похоже на то, что ожидалось, что английский допускает предложения с более чем одним независимым предложением (без правильного соединителя): да, вы можете связать слова вместе таким образом, но это не правильный английский. То же самое здесь: после того, как функция представляет собой список имен параметров, а не операторов. –

1

Это не возможно, потому что лексический does not make an allowance for it.

funcdef  ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite 
decorators  ::= decorator+ 
decorator  ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE 
dotted_name ::= identifier ("." identifier)* 
parameter_list ::= (defparameter ",")* 
        | "*" [parameter] ("," defparameter)* ["," "**" parameter] 
        | "**" parameter 
        | defparameter [","]) 
parameter  ::= identifier [":" expression] 
defparameter ::= parameter ["=" expression] 
funcname  ::= identifier 

Отметьте, что defparameter - это то, что вы смотрите; он принимает только parameter и необязательно выражение назначения по умолчанию. Затем токен parameter принимает только identifier.

Кроме того, даже если бы вы были, чтобы выразить что-то вроде этого (что ближе, но все же недопустимый синтаксис):

def function(beta=beta + 'aei'): 
    print beta 

beta является неопределенным, пока вы на самом деле не ввести метод.

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