Python基礎(chǔ)入門

1.輸出 print

打印
print語句也可以跟上多個字符串赶促,用逗號“,”隔開,print會依次打印每個字符串廓脆,遇到逗號“,”會輸出一個空格.
格式化
%運算符就是用來格式化字符串的宛瞄。在字符串內(nèi)部,%s表示用字符串替換上鞠,%d表示用整數(shù)替換,有幾個%?占位符芯丧,后面就跟幾個變量或者值芍阎,順序要對應(yīng)好。如果只有一個%?注整,括號可以省略能曾。
%d 整數(shù)
%f 浮點數(shù)
%s 字符串
%x 十六進制整數(shù)
其中度硝,格式化整數(shù)和浮點數(shù)還可以指定是否補0和整數(shù)與小數(shù)的位數(shù)肿轨,%s永遠(yuǎn)起作用,它會把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串蕊程。

2.輸入 raw_input()

當(dāng)輸入name = raw_input()并按下回車椒袍,Python交互式命令行就在等待你的輸入。這時藻茂,可以輸入任意字符驹暑,然后按回車后完成輸入。
raw_input()讀取的內(nèi)容永遠(yuǎn)以字符串的形式返回辨赐。

3.語法基礎(chǔ)

以#開頭的語句是注釋优俘,注釋是給人看的,可以是任意內(nèi)容掀序,解釋器會忽略掉注釋帆焕。其他每一行都是一個語句,當(dāng)語句以冒號“:”結(jié)尾時不恭,縮進的語句視為代碼塊
字符串
單雙引號皆可叶雹,但是不能混用财饥。Python允許用'''...'''的格式表示多行內(nèi)容.
字符串里面有很多字符都需要轉(zhuǎn)義,就需要加很多\折晦,為了簡化钥星,Python還允許用r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義。
打印中文和Unicode字符串使用 u'' ,u'xxx'轉(zhuǎn)換為UTF-8編碼的'xxx'用encode('utf-8')方法
空值满着。反過來谦炒,把UTF-8編碼表示的字符串'xxx'轉(zhuǎn)換為Unicode字符串u'xxx'用decode('utf-8')方法。
len()函數(shù)可以返回字符串的長度
空值是Python里一個特殊的值漓滔,用None表示编饺。None不能理解為0,因為0是有意義的响驴,而None是一個特殊的空值透且。

4.字符串轉(zhuǎn)換ord 和chr

Python提供了ord()和chr()函數(shù),可以把字母和對應(yīng)的數(shù)字相互轉(zhuǎn)換.

由于Python源代碼也是一個文本文件豁鲤,所以秽誊,當(dāng)你的源代碼中包含中文的時候,在保存源代碼時琳骡,就需要務(wù)必指定保存為UTF-8編碼锅论。當(dāng)Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取楣号,我們通常在文件開頭寫上這兩行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
5.判斷

判斷
if語句執(zhí)行有個特點最易,它是從上往下判斷,如果在某個判斷上是True藻懒,把該判斷對應(yīng)的語句執(zhí)行后,就忽略掉剩下的elif和else
只要x是非零數(shù)值视译、非空字符串、非空list等酷含,就判斷為True,否則為False

6.數(shù)據(jù)結(jié)構(gòu)

list
Python內(nèi)置的一種數(shù)據(jù)類型是列表:list椅亚。list是一種有序的集合,可以隨時添加和刪除其中的元素呀舔。用索引來訪問list中每一個位置的元素,記得索引是從0開始.list里面的元素的數(shù)據(jù)類型可以不同.
classmates = ['Michael', 'Bob', 'Tracy']
append追加,pop刪除,insert插入

tuple
另一種有序列表叫元組:tuple。tuple和list非常類似躯舔,但是tuple一旦初始化就不能修改驴剔,比如同樣是列出同學(xué)的名字
t = ('a', 'b', ['A', 'B'])
只有1個元素的tuple定義時必須加一個逗號,,來消除歧義.
Python在顯示只有1個元素的tuple時粥庄,也會加一個逗號,丧失,以免你誤解成數(shù)學(xué)計算意義上的括號。

dict
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
Python內(nèi)置了字典:dict的支持惜互,dict全稱dictionary布讹,在其他語言中也稱為map,使用鍵-值(key-value)存儲训堆,具有極快的查找速度描验。
dict提供的get方法,如果key不存在坑鱼,可以返回None膘流,或者自己指定的value.
要刪除一個key,用pop(key)方法鲁沥,對應(yīng)的value也會從dict中刪除.

正確使用dict非常重要呼股,需要牢記的第一條就是dict的key必須是不可變對象.

set
set和dict類似,也是一組key的集合画恰,但不存儲value彭谁。由于key不能重復(fù),所以允扇,在set中缠局,沒有重復(fù)的key。
s = set([1, 2, 3])
add添加考润,remove刪除
set可以看成數(shù)學(xué)意義上的無序和無重復(fù)元素的集合狭园,因此,兩個set可以做數(shù)學(xué)意義上的交集额划、并集等操作妙啃。

如果原生函數(shù)被覆蓋档泽,使用del funcName 就可以重新得到原生函數(shù)

7.函數(shù)的參數(shù)

Python的函數(shù)定義非常簡單俊戳,但靈活度卻非常大。除了正常定義的必選參數(shù)外馆匿,還可以使用默認(rèn)參數(shù)抑胎、可變參數(shù)和關(guān)鍵字參數(shù),使得函數(shù)定義出來的接口渐北,不但能處理復(fù)雜的參數(shù)阿逃,還可以簡化調(diào)用者的代碼。
數(shù)據(jù)類型檢查可以用內(nèi)置函數(shù)isinstance實現(xiàn).
默認(rèn)參數(shù)
def enroll(name, gender, age=6, city='Beijing'):定義一個擁有兩個默認(rèn)參數(shù)的函數(shù)

可變參數(shù)
def calc(*numbers): 定義一個可變參數(shù)的函數(shù)。
定義可變參數(shù)和定義list或tuple參數(shù)相比恃锉,僅僅在參數(shù)前面加了一個*號。在函數(shù)內(nèi)部破托,參數(shù)numbers接收到的是一個tuple,因此州既,函數(shù)代碼完全不變吴叶。但是蚌卤,調(diào)用該函數(shù)時奥秆,可以傳入任意個參數(shù)吭练,包括0個參數(shù)

關(guān)鍵字參數(shù)

def person(name, age, **kw):
    print 'name:', name, 'age:', age, 'other:', kw

可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple签赃。而關(guān)鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù)锦聊,這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict孔庭。

在Python中定義函數(shù)圆到,可以用必選參數(shù)卑吭、默認(rèn)參數(shù)豆赏、可變參數(shù)和關(guān)鍵字參數(shù)富稻,這4種參數(shù)都可以一起使用椭赋,或者只用其中某些纹份,但是請注意蔓涧,參數(shù)定義的順序必須是:必選參數(shù)笋额、默認(rèn)參數(shù)兄猩、可變參數(shù)和關(guān)鍵字參數(shù)。

8.高階特性

切片
切片(Slice)操作符

>>>L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>>L[0:3]
      ['Michael', 'Sarah', 'Tracy']

tuple也是一種list鸠姨,唯一區(qū)別是tuple不可變讶迁。因此巍糯,tuple也可以用切片操作祟峦,只是操作的結(jié)果仍是tuple徙鱼。
字符串'xxx'或Unicode字符串u'xxx'也可以看成是一種list袱吆,每個元素就是一個字符。因此迅箩,字符串也可以用切片操作溉愁,只是操作結(jié)果仍是字符串。

迭代
通過collections模塊的Iterable類型判斷
isinstance('abc', Iterable)

列表生成式
列表生成式即List Comprehensions奕塑,是Python內(nèi)置的非常簡單卻強大的可以用來創(chuàng)建list的生成式家肯。例如:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [m + n for m in 'ABC' for n in 'XYZ']//字符串全排列
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> L = ['Hello', 'World', 'IBM', 'Apple']//傳入函數(shù)
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

生成器 Generator

>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>

可以通過generator的next()方法讨衣,一個一個的打印元素。但通常都是用for循環(huán),因為生成器是可迭代的固蚤。
定義generator的另一種方法歹茶。如果一個函數(shù)定義中包含yield關(guān)鍵字惊豺,那么這個函數(shù)就不再是一個普通函數(shù)尸昧,而是一個generator

generator函數(shù)烹俗,在每次調(diào)用next()的時候執(zhí)行,遇到y(tǒng)ield語句返回累提,再次執(zhí)行時從上次返回的yield語句處繼續(xù)執(zhí)行磁浇。

9.高階函數(shù)

map
map()函數(shù)接收兩個參數(shù)置吓,一個是函數(shù),一個是序列友题,map將傳入的函數(shù)依次作用到序列的每個元素度宦,并把結(jié)果作為新的list返回。

>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce
reduce把一個函數(shù)作用在一個序列[x1, x2, x3...]上离唬,這個函數(shù)必須接收兩個參數(shù)划鸽,reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

filter
Python內(nèi)建的filter()函數(shù)用于過濾序列裸诽。
和map()類似丈冬,filter()也接收一個函數(shù)和一個序列。和map()不同的時实夹,filter()把傳入的函數(shù)依次作用于每個元素亮航,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素缴淋。

def is_odd(n)://在一個list中泄朴,刪掉偶數(shù),只保留奇數(shù)
    return n % 2 == 1
filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 結(jié)果: [1, 5, 9, 15]

sorted
sorted()函數(shù)也是一個高階函數(shù)钟沛,它還可以接收一個比較函數(shù)來實現(xiàn)自定義的排序

10.閉包

返回的函數(shù)在其定義內(nèi)部引用了局部變量args恨统,所以畜埋,當(dāng)一個函數(shù)返回了一個函數(shù)后悠鞍,其內(nèi)部的局部變量還被新函數(shù)引用

裝飾器
實例:

def bdcall(text):
    if callable(text):
        @functools.wraps(text)
        def wrapper(*args,**kw):
            print 'begin call %s: '%text.__name__
            text(*args,**kw)
            print 'end call %s: '%text.__name__
        return wrapper
    else:
        def decorator(func):
            @functools.wraps(func)
            def wrapper(*args,**kw):
                print 'text: %s : ' %text
                func(*args,**kw)
                print 'end call %s: '%func.__name__
            return wrapper
        return decorator

@bdcall('demo')  
def bdexe():
    print 'func exec'
bdexe()
print bdexe.__name__
@bdcall
def bdexe2():
    print 'func exec2'
bdexe2()
print bdexe2.__name__

輸出

text: demo: 
func exec
end call bdexe: 
bdexe
begin call bdexe2: 
func exec2
end call bdexe2: 
bdexe2

偏函數(shù)
Python的functools模塊提供了很多有用的功能模燥,其中一個就是偏函數(shù)(Partial function)。要注意心肪,這里的偏函數(shù)和數(shù)學(xué)意義上的偏函數(shù)不一樣纠吴。
函數(shù)參數(shù)通過設(shè)定默認(rèn)值戴已,可以降低函數(shù)調(diào)用的難度糖儡。而偏函數(shù)也可以做到這一點。
簡單總結(jié)functools.partial的作用就是桦沉,把一個函數(shù)的某些參數(shù)給固定状柯丁(也就是設(shè)置默認(rèn)值)埠褪,返回一個新的函數(shù)挤庇,調(diào)用這個新函數(shù)會更簡單嫡秕。

11.模塊

在Python中昆咽,一個.py文件就稱之為一個模塊(Module)。
通過包來組織模塊狭郑,避免沖突翰萨。
請注意亩鬼,每一個包目錄下面都會有一個init.py的文件,這個文件是必須存在的黄绩,否則爽丹,Python就把這個目錄當(dāng)成普通目錄粤蝎,而不是一個包初澎。init.py可以是空文件,也可以有Python代碼碑宴,因為init.py本身就是一個模塊延柠,而它的模塊名就是文件夾名稱捕仔。
模塊實例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Michael Liao'
import sys
def test():
    args = sys.argv
    if len(args)==1:
        print 'Hello, world!'
    elif len(args)==2:
        print 'Hello, %s!' % args[1]
    else:
        print 'Too many arguments!'

if __name__=='__main__':
    test()

第1行和第2行是標(biāo)準(zhǔn)注釋榜跌,第1行注釋可以讓這個hello.py文件直接在Unix/Linux/Mac上運行钓葫,第2行注釋表示.py文件本身使用標(biāo)準(zhǔn)UTF-8編碼础浮;
第4行是一個字符串豆同,表示模塊的文檔注釋影锈,任何模塊代碼的第一個字符串都被視為模塊的文檔注釋鸭廷;
第6行使用author變量把作者寫進去枣抱,這樣當(dāng)你公開源代碼后別人就可以瞻仰你的大名。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辆床,一起剝皮案震驚了整個濱河市佳晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讼载,老刑警劉巖轿秧,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異维雇,居然都是意外死亡淤刃,警方通過查閱死者的電腦和手機晒他,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門吱型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來津滞,“玉大人狐赡,你說我怎么就攤上這事鸟雏∮只睿” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么被去? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕾各。我一直安慰自己嚷硫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柏腻,像睡著了一般沃缘。 火紅的嫁衣襯著肌膚如雪水慨。 梳的紋絲不亂的頭發(fā)上掀亩,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天捉蚤,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祠够,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了主届?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎强挫,沒想到半個月后侦鹏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年椭住,在試婚紗的時候發(fā)現(xiàn)自己被綠了挖息。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绪抛。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡尖飞,死狀恐怖闹啦,靈堂內(nèi)的尸體忽然破棺而出窍奋,到底是詐尸還是另有隱情挚歧,我是刑警寧澤矮慕,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響末誓,放射性物質(zhì)發(fā)生泄漏扯俱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一基显、第九天 我趴在偏房一處隱蔽的房頂上張望蘸吓。 院中可真熱鬧,春花似錦撩幽、人聲如沸库继。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宪萄。三九已至,卻和暖如春榨惰,著一層夾襖步出監(jiān)牢的瞬間拜英,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工琅催, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留居凶,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓藤抡,卻偏偏與公主長得像侠碧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缠黍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一弄兜、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù)瓷式,在Python程序...
    績重KF閱讀 1,662評論 0 1
  • 1.數(shù)據(jù)類型 整數(shù)(int):1替饿,-100浮點數(shù)(float):1.23字符串(str):'abc',"xyz"布...
    辛立閱讀 656評論 0 1
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項目接著寫寫一名3年工作經(jīng)驗的J...
    燕京博士閱讀 7,558評論 1 118
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進階課程贸典,做筆記總結(jié)一下重點视卢。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,671評論 0 5
  • 本教程基于Python 3瓤漏,參考 A Byte of Python v1.92(for Python 3.0) 以...
    yuhuan121閱讀 3,047評論 1 6