Можем ли мы получить следующую гибкость в Python, как в Perl - PullRequest
4 голосов
/ 12 февраля 2010

Извините. Я не пытаюсь зажечь пламя. Мой опыт написания сценариев взят из Perl, и я довольно новичок в Python.

Я просто хочу проверить, могу ли я иметь такую ​​же степень гибкости, как в Python.

В Python:

page = form.getvalue("page")
str = 'This is string : ' + str(int(page) + 1)

В Perl:

$str = 'This is string : ' . ($page + 1);

Можно ли как-нибудь избежать преобразования int / str?

Ответы [ 4 ]

7 голосов
/ 12 февраля 2010

Нет, поскольку Python строго типизирован. Если вы сохраните page как int, вы можете сделать следующее:

s = 'This is string : %d' % (page + 1,)
1 голос
/ 12 февраля 2010

Вы можете использовать:

mystr = "This string is: %s" % (int(page) + 1)

... преобразование строки будет автоматическим при интерполяции в %s через % (оператор форматирования строки).

Нельзя обойтись без необходимости преобразования строки в целое число. Python никогда не будет сопоставлять строки для других типов данных. В различных контекстах Python может возвращать строку или «представление» объекта, поэтому существуют неявные преобразования данных в строковые формы. (Под капотом они вызывают .__str__() или .__repr__() методы объекта).

(Хотя некоторым людям это не нравится, я лично думаю, что понятие перегрузки % для интерполяции строк гораздо более разумно, чем функция с именем sprintf() (если у вас есть язык с поддержкой перегрузки операторов в любом случае).

1 голос
/ 12 февраля 2010

Похоже, page это str

page = form.getvalue("page")
S = 'This is string : %d'%(int(page)+1)

иначе сделать страницу int

page = int(form.getvalue("page"))
S = 'This is string : %d'%(page+1)

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

>>> class strplus(int):
...  def __radd__(self, other):
...   return str(int(other).__add__(self))
... 
>>> page = form.getvalue("page")
>>> page + strplus(1)
'3'
0 голосов
/ 12 февраля 2010

Нет. Python не имеет такой же уровень полиморфизма, как Perl. Вы можете печатать что угодно, и смешивать и сопоставлять плавающие и целые числа довольно легко, и многие вещи (0, '', "", () и []) все заканчиваются False, но нет, это не perl с точки зрения полиморфизма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...