<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ?

    Python學習筆記(一)

    ?????
    # ?_*_?coding:gb2312?_*_?:這樣制定程序的編碼;
    建議如果使用中文,最好用utf - 8 ?(用utf - 8的時候,),或者gb2312。
    ?????復數(shù)?
    可以直接表示復數(shù)a?
    = ? 1.5 ? + ? 0.5j ;?
    a.real?:取得實部
    a.imag?:取得虛部
    abs(a):取得模
    ?????數(shù)據(jù)類型轉(zhuǎn)換
    ?????float(),int(),long()
    ?????我們用a
    ** b?表示?a的b次方
    ?????開方依然是函數(shù)?sqrt(a)
    ?????最近一次表達式輸出,保存在?_??變量中
    ?????字符串可以通過幾種方式分行。可以在行加反斜杠做為繼續(xù)符,這表示下一行是當前行的邏輯沿續(xù)。
    eg:
    hello?
    = ? " This?is?a?rather?long?string?containing\n\
    several?lines?of?text?just?as?you?would?do? in ?C.\n\
    ????Note?that?whitespace?at?the?beginning?of?the?line?
    is \
    ?significant.
    "
    print ?hello
    然而,如果我們創(chuàng)建一個“行”(
    " raw " )字符串,\?n序列就不會轉(zhuǎn)為換行,源碼中的反斜杠和換行符n都會做為字符串中的數(shù)據(jù)處理。如下所示:?
    hello?
    = ?r " This?is?a?rather?long?string?containing\n\
    several?lines?of?text?much?as?you?would?do? in ?C. "
    print ?hello
    would?
    print :?
    會打印為:?
    This?
    is ?a?rather?long?string?containing\n\
    several?lines?of?text?much?as?you?would?do?
    in ?C.
    另外,字符串可以用一對三重引號”””或
    ''' 來標識。三重引號中的字符串在行尾不需要換行標記,所有的格式都會包括在字符串中。?
    print?"""
    Usage:?thingy?[OPTIONS]
    ?????-h????????????????????????Display?this?usage?message
    ?????-H?hostname???????????????Hostname?to?connect?to
    """
    produces?the?following?output:?
    生成以下輸出:?Usage:?thingy?[OPTIONS]
    ?????-h????????????????????????Display?this?usage?message
    ?????-H?hostname???????????????Hostname?to?connect?to
    聯(lián)想到HTML?中的pre標簽。
    ?????Python?已經(jīng)有了幾個復合數(shù)據(jù)類型,用于組織其它的值。最通用的是鏈表,它寫為中括之間用逗號分隔的一列值(子項),鏈表的子項不一定是同一類型的值。?
    >>>?a?=?['spam',?'eggs',?100,?1234]
    ?????內(nèi)置函數(shù)len()也同樣可以用于鏈表:?
    >>>?len(a)
    ?????if?語句
    if?x?==?1:
    ?…
    elif?x?==?0:

    else:
    ??…

    可能會有零到多個?elif?部分,else?是可選的。關鍵字“elif”?是“?else?if?”的縮寫,這個可以有效避免過深的縮進。if??elif??elif??序列用于替代其它語言中的?switch?或?case?語句。
    注意是elif?不是elseif。容易混淆吧。還有其中的冒號別忘了。
    ?????for語句
    for?x?in?a:
    ?????print?x,?len(x)
    類似java或者js中遍歷對象的形式。記得加上冒號。
    當然這和傳統(tǒng)意義上的for語句差別還是很大。
    ?????range()?函數(shù)
    如果你需要一個數(shù)值序列,內(nèi)置函數(shù)range()可能會很有用,它生成一個等差級數(shù)鏈表。?
    >>>?range(10)
    [0,?1,?2,?3,?4,?5,?6,?7,?8,?9]
    range(10)?生成了一個包含10個值的鏈表,它準確的用鏈表的索引值填充了這個長度為10的列表,所生成的鏈表中不包括范圍中的結(jié)束值。也可以讓range操作從另一個數(shù)值開始,或者可以指定一個不同的步進值(甚至是負數(shù),有時這也被稱為“步長”):?
    >>>?range(5,?10)
    [5,?6,?7,?8,?9]
    >>>?range(0,?10,?3)
    [0,?3,?6,?9]
    >>>?range(-10,?-100,?-30)
    [-10,?-40,?-70]
    需要迭代鏈表索引的話,如下所示結(jié)合使?用range()?和?len()?:?
    >>>?a?=?['Mary',?'had',?'a',?'little',?'lamb']
    >>>?for?i?in?range(len(a)):
    ?????print?i,?a[i]

    0?Mary
    1?had
    2?a
    3?little
    4?lamb
    在序列中循環(huán)時,索引位置和對應值可以使用enumerate()函數(shù)同時得到。?
    for?i,?v?in?enumerate(['tic',?'tac',?'toe']):
    ?????print?i,?v

    同時循環(huán)兩個或更多的序列,可以使用?zip()?整體解讀。?
    >>>?questions?=?['name',?'quest',?'favorite?color']
    >>>?answers?=?['lancelot',?'the?holy?grail',?'blue']
    >>>?for?q,?a?in?zip(questions,?answers):
    ?????print?'What?is?your?%s???It?is?%s.'?%?(q,?a)

    What?is?your?name???It?is?lancelot.
    What?is?your?quest???It?is?the?holy?grail.
    What?is?your?favorite?color???It?is?blue.

    ?????pass?語句
    pass?語句什么也不做。它用于那些語法上必須要有什么語句,但程序什么也不做的場合,例如:?
    >>>?while?True:
    ???????pass?
    ?????def?
    def?fib(n):????#?write?Fibonacci?series?up?to?n
    ?????"""Print?a?Fibonacci?series?up?to?n."""
    ?????a,?b?=?0,?1
    ?????while?b?<?n:
    ?????????print?b,
    ?????????a,?b?=?b,?a+b

    >>>?#?Now?call?the?function?we?just?defined:
    ?fib(2000)
    1?1?2?3?5?8?13?21?34?55?89?144?233?377?610?987?1597
    關鍵字?def?引入了一個函數(shù)定義。在其后必須跟有函數(shù)名和包括形式參數(shù)的圓括號。函數(shù)體語句從下一行開始,必須是縮進的。函數(shù)體的第一行可以是一個字符串值,這個字符串是該函數(shù)的?(文檔字符串(documentation?string)),也可稱作?docstring?。
    ?????深入鏈表
    append(?x)?
    把一個元素添加到鏈表的結(jié)尾,相當于?a[len(a):]?=?[x]?
    extend(?L)?
    通過添加指定鏈表的所有元素來擴充鏈表,相當于?a[len(a):]?=?L。?
    insert(?i,?x)?
    在指定位置插入一個元素。第一個參數(shù)是準備插入到其前面的那個元素的索引,例如a.insert(0,?x)?會插入到整個鏈表之前,而a.insert(len(a),?x)?相當于?a.append(x)。?
    remove(?x)?
    刪除鏈表中值為x的第一個元素。如果沒有這樣的元素,就會返回一個錯誤。?
    pop(?[i])?
    從鏈表的指定位置刪除元素,并將其返回。如果沒有指定索引,a.pop()返回最后一個元素。元素隨即從鏈表中被刪除。(方法中i兩邊的方括號表示這個參數(shù)是可選的,而不是要求你輸入一對方括號,你會經(jīng)常在Python?庫參考手冊中遇到這樣的標記。)?
    index(?x)?
    返回鏈表中第一個值為x的元素的索引。如果沒有匹配的元素就會返回一個錯誤。?
    count(?x)?
    返回x在鏈表中出現(xiàn)的次數(shù)。?
    sort(?)?
    對鏈表中的元素進行適當?shù)呐判颉?
    reverse(?)?
    倒排鏈表中的元素。?
    ?????函數(shù)化編程工具
    對于鏈表來講,有三個內(nèi)置函數(shù)非常有用:filter(),?map(),?和?reduce()。?
    "filter(function,?sequence)"返回一個序列(sequence),包括了給定序列中所有調(diào)用function(item)后返回值為true的元素。(如果可能的話,會返回相同的類型)。例如,以下程序可以計算部分素數(shù):?
    >>>?def?f(x):?return?x?%?2?!=?0?and?x?%?3?!=?0

    >>>?filter(f,?range(2,?25))
    [5,?7,?11,?13,?17,?19,?23]
    "map(function,?sequence)"?為每一個元素依次調(diào)用function(item)并將返回值組成一個鏈表返回。例如,以下程序計算立方:?
    >>>?def?cube(x):?return?x*x*x

    >>>?map(cube,?range(1,?11))
    [1,?8,?27,?64,?125,?216,?343,?512,?729,?1000]

    兩者區(qū)別:?map返回的是?函數(shù)結(jié)果序列。filter返回的是函數(shù)返回結(jié)果為true的參數(shù)。(相當于過濾)
    可以傳入多個序列,函數(shù)也必須要有對應數(shù)量的參數(shù),執(zhí)行時會依次用各序列上對應的元素來調(diào)用函數(shù)(如果某些序列比其它的短,就用None來代替)。如果把None做為一個函數(shù)傳入,則直接返回參數(shù)做為替代。例如:?
    >>>?seq?=?range(8)
    >>>?def?add(x,?y):?return?x+y

    >>>?map(add,?seq,?seq)
    [0,?2,?4,?6,?8,?10,?12,?14]
    "reduce(func,?sequence)"?返回一個單值,它是這樣構(gòu)造的:首先以序列的前兩個元素調(diào)用函數(shù),再以返回值和第三個參數(shù)調(diào)用,依次執(zhí)行下去。例如,以下程序計算1到10的整數(shù)之和:?
    >>>?def?add(x,y):?return?x+y

    >>>?reduce(add,?range(1,?11))
    55

    實際上這里就是從1加到10。
    可以傳入第三個參數(shù)做為初始值。如果序列是空的,就返回初始值,否則函數(shù)會先接收初始值和序列的第一個元素,然后是返回值和下一個元素,依此類推。例如:?
    >>>?def?sum(seq):
    ?????def?add(x,y):?return?x+y
    ?????return?reduce(add,?seq,?0)

    >>>?sum(range(1,?11))
    55
    >>>?sum([])
    0
    注意:?sum([])中的[]是不可以省略的。表示的是一個鏈表。
    ?????鏈表推導式?以后再看
    ?????del?
    有一個方法可從鏈表中刪除指定索引的元素:del?語句。這個方法也可以從鏈表中刪除切片(之前我們是把一個空鏈表賦給切片)。例如:?
    >>>?a?=?[-1,?1,?66.6,?333,?333,?1234.5]
    >>>?del?a[0]
    >>>?a
    [1,?66.6,?333,?333,?1234.5]
    >>>?del?a[2:4]
    >>>?a
    [1,?66.6,?1234.5]
    del?can?also?be?used?to?delete?entire?variables:?
    del?也可以用于刪除整個變量:?
    >>>?del?a
    ?????Dictionaries?字典
    一看這名字嚇了跳,結(jié)果和C++中的pair?或者java中的hashmap一個德性的事物。當然javascript用數(shù)組就行了。下面來看看python中字典的特點與具體應用。
    字典的主要操作是依據(jù)關鍵字來存儲和析取值。也可以用?del來刪除關鍵字:值對。如果你用一個已經(jīng)存在的關鍵字存儲值,以前為該關鍵字分配的值就會被遺忘。試圖析取從一個不存在的關鍵字中讀取值會導致錯誤。

    字典的?keys()方法返回由所有關鍵字組成的鏈表,該鏈表的順序不定(如果你需要它有序,只能調(diào)用關鍵字鏈表的sort()?方法)。使用字典的?has_key()方法可以檢查字典中是否存在某一關鍵字。
    eg:
    tel?=?{'jack':?4098,?'sape':?4139}
    tel['guido']?=?4127
    print?tel
    print?tel['jack']
    del?tel['sape']
    tel['irv']?=?4127
    print?tel
    print?tel.keys()
    print?tel.has_key('guido')

    在字典中循環(huán)時,關鍵字和對應的值可以使用?iteritems()方法同時解讀出來。?
    knights?=?{'gallahad':?'the?pure',?'robin':?'the?brave'}
    for?k,?v?in?knights.iteritems():
    print?k,?v
    ?????模塊
    不用多說,C++中有?include?,java中?import?
    ?????dir()
    內(nèi)置函數(shù)?dir()?用于按模塊名搜索模塊定義,它返回一個字符串類型的存儲列表
    import?sys

    print?dir(sys)
    ?['__displayhook__',?'__doc__',?'__excepthook__',?'__name__',?'__stderr__',?'__stdin__',?'__stdout__',?'_current_frames',?'_getframe',?'api_version',?'argv',?'builtin_module_names',?'byteorder',?'call_tracing',?'callstats',?'copyright',?'displayhook',?'dllhandle',?'exc_clear',?'exc_info',?'exc_type',?'excepthook',?'exec_prefix',?'executable',?'exit',?'exitfunc',?'getcheckinterval',?'getdefaultencoding',?'getfilesystemencoding',?'getrecursionlimit',?'getrefcount',?'getwindowsversion',?'hexversion',?'maxint',?'maxunicode',?'meta_path',?'modules',?'path',?'path_hooks',?'path_importer_cache',?'platform',?'prefix',?'setcheckinterval',?'setprofile',?'setrecursionlimit',?'settrace',?'stderr',?'stdin',?'stdout',?'subversion',?'version',?'version_info',?'warnoptions',?'winver']
    dir()?不會列出內(nèi)置函數(shù)和變量名。如果你想列出這些內(nèi)容,它們在標準模塊?__builtin__中定義:?
    >>>?import?__builtin__
    >>>?dir(__builtin__)

    ?????Packages

    包通常是使用用“圓點模塊名”的結(jié)構(gòu)化模塊命名空間。例如,名為?A.B?的模塊表示了名為?"B"?的包中名為?"A"?的子模塊。正如同用模塊來保存不同的模塊架構(gòu)可以避免全局變量之間的相互沖突,使用圓點模塊名保存像?NumPy?或?Python?Imaging?Library?之類的不同類庫架構(gòu)可以避免模塊之間的命名沖突。
    需要注意的是使用?from?package?import?item?方式導入包時,這個子項(item)既可以是包中的一個子模塊(或一個子包),也可以是包中定義的其它命名,像函數(shù)、類或變量。import?語句首先核對是否包中有這個子項,如果沒有,它假定這是一個模塊,并嘗試加載它。如果沒有找到它,會引發(fā)一個?ImportError?異常。?
    相反,使用類似import?item.subitem.subsubitem?這樣的語法時,這些子項必須是包,最后的子項可以是包或模塊,但不能是前面子項中定義的類、函數(shù)或變量。
    posted on 2008-04-10 09:34 -274°C 閱讀(1033) 評論(0)  編輯  收藏 所屬分類: python

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網(wǎng)站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914507
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: a级毛片免费播放| 亚洲成在人线在线播放无码| a高清免费毛片久久| 日韩亚洲精品福利| 色网站在线免费观看| 国产网站免费观看| 337p日本欧洲亚洲大胆人人| 香蕉高清免费永久在线视频| 亚洲精华国产精华精华液| 浮力影院第一页小视频国产在线观看免费 | 国产亚洲精彩视频| 又粗又硬免费毛片| 国产高潮流白浆喷水免费A片 | 亚洲综合久久夜AV | 韩国免费A级毛片久久| 国产精一品亚洲二区在线播放| 国产精品1024在线永久免费 | 亚洲阿v天堂在线2017免费| 国产精品V亚洲精品V日韩精品| 好男人资源在线WWW免费| 亚洲AV成人一区二区三区AV| 中文字幕在线观看免费视频| 亚洲国产综合在线| 日本一道本高清免费| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲一级片免费看| 久久青草国产免费观看| 亚洲免费电影网站| 国产一级淫片视频免费看| 一级毛片不卡免费看老司机| 亚洲精品无码午夜福利中文字幕| 久久久久国产精品免费网站| 亚洲ts人妖网站| 四虎永久在线精品免费影视| 国产一级婬片A视频免费观看| 亚洲欧洲日韩不卡| 午夜电影免费观看| 91福利免费网站在线观看| 亚洲成人黄色网址| 日批日出水久久亚洲精品tv| 在线观看片免费人成视频无码 |