2013-11-14 4 views
0

Может кто-нибудь объяснить, почему это Python код:Почему Python печатает это?

def function(string, i, j): 
    if (i < j): 
     i = i+1 
     string1 = string[i:j] return string1 
    else: 
     return string 
# main 
string = "four score and seven years ago" 
i = 5 
j = 9 
stringslice = function(string, i, j) 
print (stringslice) 
print (i, j) 

печатает:

cor 
5 9 

Я думал, что он должен напечатать следующее:

cor 
6 9 
+0

Сфера применения ... [Краткое описание правил обзора Python] (http://stackoverflow.com/a/292502/1762224) –

+0

@ user2989980 Добро пожаловать в SO, mate. Чтобы ваше членство здесь было полезным и приятным, пожалуйста, прочитайте соответствующие разделы справки здесь: http://stackoverflow.com/help/asking. В противном случае большинство ваших вопросов будут закрыты и, вероятно, опущены. Кроме того, попробуйте потратить некоторое время, пытаясь решить проблему самостоятельно, ища похожие вопросы и просто играя с вашим кодом. Этот вопрос очень типичный, задан много раз, и вы наверняка узнали бы эту проблему после прочтения некоторых вводных обучающих руководств по функциям и сфере применения python. – sashkello

ответ

3

двутавровых, который инкрементируется является локальным для этой функции и не влияет на i вашего основного кода. Поэтому, когда вы печатаете I его оригинал я

1

потому i=5 и j=9 были назначены за рамки функции, чтобы они были изменены только в функции, но когда вы печатаете их, они были вне функции, чтобы они никогда не были на самом деле изменились

больше на variable scope

1

При изменении значения внутри функции изменение не отражается снаружи.

В несколько иной презентации образом, в def function(string, i, j): мы имеем 3 формальные параметров, один из которых является i. Я могу позвонить, если с function("str", 3, j), и в вызывающем абоненте не будет i.

0

Скалярные/неизменные типы (ints, floats, strings) не изменяются функциями, вне самой функции.

Композитные типы модифицированы в ограниченном смысле. EG, если вы передаете словарь функции и изменяете ее в функции, тогда элементы словаря могут быть изменены, но если вы назначите другой словарь той же переменной, изменения не будут отображаться вне функции. IOW, вы можете изменить то, что содержит словарь, а не сам словарь.