2012-04-27 2 views
3

Я читал о питоне функциях и увидел этот код:Невозможно понять этот питон код

def happyBirthday(person): 
    print("Happy Birthday to you!") 
    print("Happy Birthday to you!") 
    print("Happy Birthday, dear " + person + ".") 
    print("Happy Birthday to you!") 

happyBirthday('Emily') 
happyBirthday('Andre') 

Я не мог понять, почему эти кронштейны были использованы для команд печати, и поэтому я удалил их.

def happyBirthday(person): 
    print "Happy Birthday to you!" 
    print "Happy Birthday to you!" 
    print "Happy Birthday, dear " + person + "." 
    print "Happy Birthday to you!") 

happyBirthday('Emily') 
happyBirthday('Andre') 

Даже после удаления этих скобок я получаю точно такие же результаты, поэтому я не уверен, какой из них правильный или должен ли я использовать эти скобки вообще. Действительно ли необходимо использовать эти скобки?

Еще одна вещь. , когда я использую скобки, тогда +person+ дает результат с Днем рождения, дорогой Андре. , но когда я использую ,person, то это дает результат как < «С днем ​​рождения, дорогой»,»„Андре“,„“>

Я не могу понять эти различия в результатах. Не могли бы вы пролить свет на это?

ответ

13

Действительно ли необходимо использовать эти скобки?

В Python 2.x, print есть инструкция, и скобки необязательны.

В Python 3.x, print() есть функция, и скобки являются обязательными.

Считается хорошей практикой использовать скобки даже в Python 2.x, чтобы облегчить возможный переход на Python 3.x.

Я не могу понять эти различия в результатах. Не могли бы вы пролить свет на это?

Вот что происходит, когда вы печатаете несколько разделенных запятыми вещи в Python 2.x:

In [1]: print(1,2,3) 
(1, 2, 3) 

выше интерпретируется как print заявление, за которым следует один аргумент, который является кортеж. Кортеж выполняется с помощью круглых скобок и запятых.

In [2]: print 1,2,3 
1 2 3 

выше интерпретируется как print заявления следуют три аргумента. Каждый аргумент печатается отдельно, с пробелами между ними.

Ни одна из версий не отличается большой совместимостью с Python 3: первая версия визуализируется по-разному, а вторая просто недействительна для кода Python 3.

Имея это в виду, я рекомендую вам придерживаться:

print("Happy Birthday, dear " + person + ".") 

Это дает те же результаты, как 2.x Python и Python 3.x.

+2

стоит отметить, почему это происходит. В Python 2.x print - это оператор (например, '' return'' или '' if''), а в 3.x - это функция (например, '' sum() '' или '' all() ''). –

+0

@ Lattyware: Хорошая точка, спасибо. – NPE

+0

и так как каждая функция. мы должны использовать скобки. Короче говоря, лучше использовать скобки. правильно? – faraz

3

В Python2 печать - это утверждение.В Python3 это функция

Для некоторых простых случаев это работает так же с круглыми скобками, но в целом это не так просто, как пощечины скобки вокруг оператора печати Портировать в Python3

например.

Python 2.7.2+ (default, Oct 4 2011, 20:06:09) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "hi", 
hi 
>>> print("hi",) 
('hi',) 

против

Python 3.2.2 (default, Sep 5 2011, 21:17:14) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "hi", 
    File "<stdin>", line 1 
    print "hi", 
      ^
SyntaxError: invalid syntax 
>>> print("hi",) 
hi 
+0

Я не использую python 3. Оба этих результата взяты из python 2.7 – faraz

+0

@faraz, очевидно, что в противном случае скобки будут обязательными. –

+0

Итак, получилось. – faraz

1

Как уже упоминалось, печать заявление в Python 2 Затем, когда вы делаете печать ('XXX'), вся

('xxx') 

интерпретируется первый. Одиночные парсеры игнорируются, поэтому это просто строка, которая печатается.

Когда вы выполняете 'string' + name + 'string', строки ther сначала конкатенируются (добавляются), в результате получается строка. Затем оценивается в parens, возвращается, а затем печатается.

На противоположном, когда вы делаете печать («х», «у», «г»), весь

('x', 'y', 'z') 

является кортеж, который печатается < «С Днем Рождения, дорогой «» „Андре“, „“>

+0

hmm, Ладно, что я сделал сейчас, я удалил + человека +, и теперь теперь эта строка только печатает («С днем ​​рождения, дорогая» «.»), Но я получаю результат как С Днем Рождения, дорогая. Почему это не играет роль кортежа? Я имею в виду, это не должно быть таким же, как ('x', 'y') – faraz

+0

Показать всю строку, plz – Guard

+0

А, понял. Я не помещал там запятую, и поэтому она не играла роль кортежа. Теперь, когда я вставляю запятую, он действует как кортеж. Вся строка была: print («С днем ​​рождения, дорогая», «.»), Которая не содержит запятую. Но когда я написал это как («С днем ​​рождения, дорогой», «.»), Он дает результат точно так же, как вы упомянули. Я получаю это сейчас. Спасибо – faraz

0

попробовать str(person) в печати staement