python2.7學習記錄

一.兩個學習網址(2.7已通過時,建議直接學習3)html

http://blog.csdn.net/longxibendi/article/details/41949215python

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000linux

二.開發工具:pycharm算法

破解參考http://www.cnblogs.com/evlon/p/4934705.htmlwindows

快捷鍵http://www.cnblogs.com/zhangpengshou/p/3555767.html數組

三.python切換到指定目錄:使用os包的chdir函數可以改變當前工做路徑,linux和windows操做系統中並無區別。瀏覽器

import os
#獲取當前工做目錄
>>>os.getcwd()
#更改當前工做目錄
>>>os.chdir('d:\')
>>>os.getcwd()

四.打印中文:開頭加上#coding=utf-8 就ok了服務器

五.語法app

1.>>>python hello.py
File "<stdin>", line 1 python hello.py
SyntaxError:invalid syntax
出錯是由於你已經進入python解釋器,而不是 在cmd環境裏
若是要運行helloworld.py這個文件,你須要在cmd裏直接運行。
顯示是這樣的C:\Users\Administrator\Desktop>python hello.py函數

2.raw_input,可讓用戶輸入字符串,並存放到一個變量裏。好比輸入用戶的名字:>>> name = raw_input(),3+的版本用input()代替了raw_input()
name = raw_input('please enter your name: ')
print 'hello,', name

3.用r''表示''內部的字符串默認不轉義
用'''...'''的格式表示多行內容
空值是Python裏一個特殊的值,用None表示

在Python中,等號=是賦值語句,能夠把任意數據類型賦值給變量,同一個變量能夠反覆賦值,並且能夠是不一樣類型的變量。這種變量自己類型不固定的語言稱之爲動態語言,與之對應的是靜態語言。靜態語言在定義變量時必須指定變量類型,若是賦值的時候類型不匹配,就會報錯。

理解變量在計算機內存中的表示也很是重要。當咱們寫:a = 'ABC'時,Python解釋器幹了兩件事情:
在內存中建立了一個'ABC'的字符串;
在內存中建立了一個名爲a的變量,並把它指向'ABC'。
也能夠把一個變量a賦值給另外一個變量b,這個操做其實是把變量b指向變量a所指向的數據。
Python支持多種數據類型,在計算機內部,能夠把任何數據都當作一個「對象」,而變量就是在程序中用來指向這些數據對象的,對變量賦值就是把數據和變量給關聯起來。

在Python中,一般用所有大寫的變量名錶示常量

整數除法永遠是整數,即便除不盡。要作精確的除法,只需把其中一個整數換成浮點數作除法就能夠。。3+的整型除法返回浮點數,要獲得整型結果用//

6、編碼

因爲計算機是美國人發明的,所以,最先只有127個字母被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱爲ASCII編碼。

全世界有上百種語言,日本把日文編到Shift_JIS裏,韓國把韓文編到Euc-kr裏,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。所以,Unicode應運而生。Unicode把全部語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。

如今,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼一般是2個字節。

若是把ASCII編碼的A用Unicode編碼,只須要在前面補0就能夠,所以,A的Unicode編碼是00000000 01000001。新的問題又出現了:若是統一成Unicode編碼,亂碼問題今後消失了。可是,若是你寫的文本基本上所有是英文的話,用Unicode編碼比ASCII編碼須要多一倍的存儲空間,在存儲和傳輸上就十分不划算。

因此,本着節約的精神,又出現了把Unicode編碼轉化爲「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。若是你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。

如今計算機系統通用的字符編碼工做方式:在計算機內存中,統一使用Unicode編碼,當須要保存到硬盤或者須要傳輸的時候,就轉換爲UTF-8編碼。用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件;瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器。

7、一些存儲結構

1.Python內置的一種數據類型是列表:list。list是一種有序的集合,能夠隨時添加和刪除其中的元素。用len()函數能夠得到list元素的個數。用-1作索引,直接獲取最後一個元素。
list裏面的元素的數據類型能夠不一樣,list元素也能夠是另外一個list,空list如 L = []長度爲0
追加 classmates.append('Adam')
插入 classmates.insert(1, 'Jack')
刪除list末尾的元素,用pop()方法 classmates.pop()
刪除指定位置i的元素,用pop(i)方法 classmates.pop(1)
某個元素替換成別的元素,能夠直接賦值給對應的索引位置 classmates[1] = 'Sarah'

2.另外一種有序列表叫元組:tuple。tuple和list很是相似,可是tuple一旦初始化就不能修改。tuple的每一個元素的指向永遠不變。

3.dict全稱dictionary,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度。
爲何dict查找速度這麼快?由於dict的實現原理和查字典是同樣的。假設字典包含了1萬個漢字,咱們要查某一個字,一個辦法是把字典從第一頁日後翻,直到找到咱們想要的字爲止,這種方法就是在list中查找元素的方法,list越大,查找越慢。第二種方法是先在字典的索引表裏(好比部首表)查這個字對應的頁碼,而後直接翻到該頁,找到這個字,不管找哪一個字,這種查找速度都很是快,不會隨着字典大小的增長而變慢。dict就是第二種實現方式,給定一個名字,好比'Michael',dict在內部就能夠直接計算出Michael對應的存放成績的「頁碼」,也就是95這個數字存放的內存地址,直接取出來,因此速度很是快。你能夠猜到,這種key-value存儲方式,在放進去的時候,必須根據key算出value的存放位置,這樣,取的時候才能根據key直接拿到value。

和list比較,dict有如下幾個特色:查找和插入的速度極快,不會隨着key的增長而增長;須要佔用大量的內存,內存浪費多。
而list相反:查找和插入的時間隨着元素的增長而增長;佔用空間小,浪費內存不多。
因此,dict是用空間來換取時間的一種方法。這個經過key計算位置的算法稱爲哈希算法(Hash)。要保證hash的正確性,做爲key的對象就不能變。在Python中,字符串、整數等都是不可變的,所以,能夠放心地做爲key。而list是可變的,就不能做爲key。最經常使用的key是字符串。

爲何dict須要的內存要比list的多 內存中是怎麼保存key與value的:列表應該能夠數組,能夠鏈表,由於它能夠存取,也能夠添加刪改。 字典的話,應該是鏈表的數組吧。key值應該是哈希表,value存放應該沒有關係,根據key值能夠計算出value 存放的地址,那麼必然在key值裏還存放着另外的內容,即特別的內容來計算對應value的內存地址,因此須要的空間就多-靜水湯湯

4.set和dict相似,也是一組key的集合,但不存儲value。因爲key不能重複,因此,在set中,沒有重複的key,重複元素在set中自動被過濾。經過add(key)方法添加元素到set中,經過remove(key)方法刪除元素。set能夠當作數學意義上的無序和無重複元素的集合,所以,兩個set能夠作數學意義上的交集、並集等操做。

 8、函數

1.抽象是數學中很是常見的概念,舉個例子: 計算數列的和,好比:1 + 2 + 3 + ... + 100,寫起來十分不方便,因而數學家發明了求和符號∑
藉助抽象,咱們才能不關心底層的具體計算過程,而直接在更高的層次上思考問題。寫計算機程序也是同樣,函數就是最基本的一種代碼抽象的方式。函數名其實就是指向一個函數對象的引用,徹底能夠把函數名賦給一個變量,至關於給這個函數起了一個「別名」。

2.在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,而後,在縮進塊中編寫函數體,函數的返回值用return語句返回。
咱們以自定義一個求絕對值的my_abs函數爲例:
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

3.若是想定義一個什麼事也不作的空函數,能夠用pass語句:
def nop():
    pass
pass語句什麼都不作,那有什麼用?實際上pass能夠用來做爲佔位符,好比如今還沒想好怎麼寫函數的代碼,就能夠先放一個pass,讓代碼能運行起來。
pass還能夠用在其餘語句裏,好比:
if age >= 18:
    pass
缺乏了pass,代碼運行就會有語法錯誤。

4.對參數類型作檢查,只容許整數和浮點數類型的參數。數據類型檢查能夠用內置函數isinstance實現
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

5.在語法上,返回一個tuple能夠省略括號,而多個變量能夠同時接收一個tuple,按位置賦給對應的值,因此,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。

6.使用默認參數有什麼好處?最大的好處是能下降調用函數的難度。如學生註冊時不須要提供年齡和城市,只提供必須的兩個姓名和密碼,只有與默認參數不符的學生才須要提供額外的信息。默認參數必須指向不變對象!緣由:Python函數在定義的時候,默認參數L的值就被計算出來了,即[],由於默認參數L也是一個變量,它指向對象[],每次調用該函數,若是改變了L的內容,則下次調用時,默認參數的內容就變了,再也不是函數定義時的[]了。如默認參數是[],可是函數彷佛每次都「記住了」上次添加了'END'後的list。
def add_end(L=[]):
    L.append('END')
    return L

7.可變參數:Python容許你在list或tuple前面加一個*號,把list或tuple的元素變成可變參數傳進去。
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

8.可變參數容許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數容許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。示例 def person(name, age, **kw)
關鍵字參數有什麼用?它能夠擴展函數的功能。好比,在person函數裏,咱們保證能接收到name和age這兩個參數,可是,若是調用者願意提供更多的參數,咱們也能收到。試想你正在作一個用戶註冊的功能,除了用戶名和年齡是必填項外,其餘都是可選項,利用關鍵字參數來定義這個函數就能知足註冊的需求。

9.參數定義的順序必須是:必選參數、默認參數、可變參數和關鍵字參數。如 def func(a, b, c=0, *args, **kw)在函數調用的時候,Python解釋器自動按照參數位置和參數名把對應的參數傳進去。對於任意函數,均可以經過相似func(*args, **kw)的形式調用它,不管它的參數是如何定義的。
>>>func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
10.尾遞歸防止棧溢出,沒好好看。http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00137473836826348026db722d9435483fa38c137b7e685000
相關文章
相關標籤/搜索