上一章中已經講到連接兩個字符串的一種方法。復習一下:
~~~
>>> a= 'py'
>>> b= 'thon'
>>> a+b
'python'
~~~
既然這是一種方法,言外之意,還有另外一種方法。
## 連接字符串的方法2
在說方法2之前,先說明一下什么是占位符,此前在講解變量(參數)的時候,提到了占位符,這里對占位符做一個比較嚴格的定義:
來自[百度百科](http://baike.baidu.com/view/873819.htm)的定義:
> 顧名思義,占位符就是先占住一個固定的位置,等著你再往里面添加內容的符號。
根據這個定義,在python里面規定了一些占位符,通過這些占位符來說明那個位置應該填寫什么類型的東西,這里暫且了解兩個占位符:%d——表示那個位置是整數,%s——表示那個位置應該是字符串。下面看一個具體實例:
~~~
>>> print "one is %d"%1one is 1
~~~
要求打印(print)的內容中,有一個%d占位符,就是說那個位置應該放一個整數。在第二個%后面,跟著的就是那個位置應該放的東西。這里是一個整數1。我們做下面的操作,就可以更清楚了解了:
~~~
>>> a=1
>>> type(a)
<type 'int'> #a是整數
>>> b="1"
>>> type(b)
<type 'str'> #b是字符串
>>> print "one is %d"%a
one is 1
>>> print "one is %d"%b #報錯了,這個占位符的位置應該放整數,不應該放字符串。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
~~~
同樣道理,%s對應的位置應該放字符串,但是,如果放了整數,也可以。只不過是已經轉為字符串對待了。但是不贊成這么做。在將來,如果使用mysql(一種數據庫)的時候,會要求都用%s做為占位符,這是后話,聽聽有這么回事即可。
~~~
>>> print "one is %s"%b
one is 1
>>> print "one is %s"%a #字符串是包容的
one is 1
~~~
好了。啰嗦半天,占位符是不是理解了呢?下面我們就用占位符來連接字符串。是不是很有意思?
~~~
>>> a = "py"
>>> b = "thon"
>>> print "%s%s"%(a,b) #注
python
~~~
**注:**仔細觀察,如果兩個占位符,要向這兩個位置放東西,代表的東西要寫在一個圓括號內,并且中間用逗號(半角)隔開。
## 字符串復制
有一個變量,連接某個字符串,也想讓另外一個變量,也連接這個字符串。一種方法是把字符串再寫一邊,這種方法有點笨拙,對于短的到無所謂了。但是長的就麻煩了。這里有一種字符串復制的方法:
~~~
>>> a = "My name is LaoQi. I like python and can teach you to learn it."
>>> print a
My name is LaoQi. I like python and can teach you to learn it.
>>> b = a
>>> print b
My name is LaoQi. I like python and can teach you to learn it.
>>> print a
My name is LaoQi. I like python and can teach you to learn it.
~~~
復制非常簡單,類似與賦值一樣。可以理解為那個字符串本來跟a連接著,通過b=a,a從自己手里分處一股繩子給了b,這樣兩者都可以指向那個字符串了。
## 字符串長度
要向知道一個字符串有多少個字符,一種方法是從頭開始,盯著屏幕數一數。哦,這不是計算機在干活,是鍵客在干活。鍵客,不是劍客。劍客是以劍為武器的俠客;而鍵客是以鍵盤為武器的俠客。當然,還有賤客,那是賤人的最高境界,賤到大俠的程度,比如岳不群之流。
鍵客這樣來數字符串長度:
~~~
>>> a="hello"
>>> len(a)
5
~~~
使用的是一個函數len(object)。得到的結果就是該字符串長度。
~~~
>>> m = len(a) #把結果返回后賦值給一個變量
>>> m
5
>>> type(m) #這個返回值(變量)是一個整數型
<type 'int'>
~~~
## 字符大小寫的轉換
對于英文,有時候要用到大小寫轉換。最有名駝峰命名,里面就有一些大寫和小寫的參合。如果有興趣,可以來這里看[自動將字符串轉化為駝峰命名形式的方法](https://github.com/qiwsir/algorithm/blob/master/string_to_hump.md)。
在python中有下面一堆內建函數,用來實現各種類型的大小寫轉化
- S.upper() #S中的字母大寫
- S.lower() #S中的字母小寫
- S.capitalize() #首字母大寫
- S.istitle() #單詞首字母是否大寫的,且其它為小寫,**注**網友白羽毛指出,這里表述不準確。非常感謝他。為了讓看官對這些大小寫問題有更深刻理解,我從新寫下面的例子,請看官審查。再次感謝白羽毛。
- S.isupper() #S中的字母是否全是大寫
- S.islower() #S中的字母是否全是小寫
看例子:
~~~
>>> a = "qiwsir,python"
>>> a.upper() #將小寫字母完全變成大寫字母
'QIWSIR,PYTHON'
>>> a #原數據對象并沒有改變
'qiwsir,python'
>>> b = a.upper()
>>> b
'QIWSIR,PYTHON'
>>> c = b.lower() #將所有的小寫字母變成大寫字母
>>> c
'qiwsir,python'
>>> a
'qiwsir,python'
>>> a.capitalize() #把字符串的第一個字母變成大寫
'Qiwsir,python'
>>> a #原數據對象沒有改變
'qiwsir,python'
>>> b = a.capitalize() #新建立了一個
>>> b
'Qiwsir,python'
>>> a = "qiwsir,github" #這里的問題就是網友白羽毛指出的,非常感謝他。
>>> a.istitle()
False
>>> a = "QIWSIR" #當全是大寫的時候,返回False
>>> a.istitle()
False
>>> a = "qIWSIR"
>>> a.istitle()
False
>>> a = "Qiwsir,github" #如果這樣,也返回False
>>> a.istitle()
False
>>> a = "Qiwsir" #這樣是True
>>> a.istitle()
True
>>> a = 'Qiwsir,Github' #這樣也是True
>>> a.istitle()
True
>>> a = "Qiwsir"
>>> a.isupper()
False
>>> a.upper().isupper()
True
>>> a.islower()
False
>>> a.lower().islower()
True
~~~
順著白羽毛網友指出的,再探究一下,可以這么做:
~~~
>>> a = "This is a Book"
>>> a.istitle()
False
>>> b = a.title() #這樣就把所有單詞的第一個字母轉化為大寫
>>> b
'This Is A Book'
>>> a.istitle() #判斷每個單詞的第一個字母是否為大寫
False
~~~
字符串問題,看來本講還不能結束。下一講繼續。有看官可能要問了,上面這些在實戰中怎么用?我正想為你的,請鍵客設計一種實戰情景,能不能用上所學。
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python