2010-02-12 38 views
4

對不起。我並不想開始任何火焰。我的腳本經驗來自Perl,而我在Python中很新。在Perl中,我們可以獲得如下靈活性:

我只是想檢查一下,我是否可以像在Python中一樣具有靈活性。

在Python:

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

在Perl:

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

有什麼方法可以讓我避免INT/STR轉換?

+3

好像就像你需要在你的「讀取表單的模塊」和「打印輸出的模塊」之間的東西來實際理解傳入的數據,並將其存儲爲適當的類型。例如,在你確認了「page」之後,它應該成爲一個整數,然後你的代碼的其餘部分不需要擔心強制 - 它已經是正確的類型了(我會在Perl中這樣做,FWIW。) – jrockway 2010-02-12 03:30:47

+2

Perl版本將是: $ str = '這是字符串:' 。 ($ page + 1); – 2010-02-12 03:40:25

+0

如果您想編寫死亡代碼,請使用Perl。否則,歡迎您學習pythonic方法並編寫適當的Python代碼。一旦你沿着這條路線前進,你將不會錯過Perl。 – Ber 2010-02-12 08:14:19

回答

7

不,因爲Python是強類型的。如果你保持page爲int,你可以做到以下幾點:

s = 'This is string : %d' % (page + 1,) 
+1

然後,它會再次強迫你;使用%s代替上面的%r沒有問題。 – 2010-02-12 03:10:06

+0

@Nicholas:當然,但如果你使用'%s'代替,那麼你在執行字符串格式化時會失去'%d'所具有的功能。 – 2010-02-12 03:11:44

+5

這與強類型無關,只是將'str'和'int'加在一起的操作沒有定義。如果'1'+ 2'的結果是'12','3'或3,這是一個有意的選擇嗎? – 2010-02-12 03:59:40

0

號Python沒有多態性作爲perl的相同水平。你可以打印任何東西,並且很容易地混合和匹配浮點數和整數,很多事情(0,'',「」,()和[])都以False結束,但不是,它不是多態的perl。

+4

該問題是強類型與弱類型,而不是多態。 – 2010-02-12 03:09:04

+2

您可以想象,Perl值是具有多態返回類型的零參數的函數。 (但他們不是。) – jrockway 2010-02-12 03:29:13

+3

@jrockway:Scalar :: Util :: dualvar – ysth 2010-02-12 04:09:20

1

它看起來像pagestr

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' 
1

您可以使用:

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

...通過%(字符串格式化操作)插值到%s當字符串轉換是自動完成。

你不能繞過需要從字符串轉換爲整數。 Python永遠不會爲其他數據類型混合字符串。在各種上下文中,Python可以返回對象的字符串或「表示」,因此有一些隱式數據會轉換爲字符串形式。 (在這些引擎罩下調用.__str__().__repr__()對象方法)。

(雖然有些人不喜歡它,我個人認爲超載%字符串插值的概念比一個名爲sprintf()(如果你有操作符重載支持反正)語言功能更爲明智。

相關問題