Python入門筆記(二)

注:資料來源于慕課網Python入門
轉載請附上原文地址:http://www.lxweimin.com/p/54061dc018c0
上一篇筆記:Python入門筆記(一)

資料

Python官方文檔

目錄

  • 1.函數
  • 2.切片
  • 3.迭代
  • 4.列表生成式

一、函數

  • 要調用一個函數,需要知道函數名稱參數
    例如調用絕對值 **abs **函數:
abs(100)
abs(-20)
  • 數據類型轉換函數
int('123') # 123
str(1.23) # '1.23'
  • 定義函數
    在Python中,定義一個函數要使用** def 語句,依次寫出函數名、括號、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用 return **語句返回。
    例如定義一個絕對值函數
def my_abs(x): 
    if x >= 0: 
        return x  
    else: 
        return -x

請注意,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,并將結果返回。因此,函數內部通過條件判斷和循環可以實現非常復雜的邏輯。
如果沒有return語句,函數執行完畢后也會返回結果,只是結果為 None。
return None可以簡寫為return。

  • 返回值,函數可以返回多個值 例如
import math
def move(x, y, step, angle):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

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

  • 定義參數
    • 默認參數
      由于函數的參數按從左到右的順序匹配,所以默認參數只能定義在必需參數的后面:
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
  • 可變參數
    可變參數的名字前面有個 *** **號,我們可以傳入0個、1個或多個參數給可變參數:
def average(*args):
    sum=0.0
    n=0
    for x in args:
        sum=sum+x
        n+=1
    if n==0:
        return 0.0
    return sum/n
print average()
print average(1, 2)
print average(1, 2, 2, 3, 4)

二、切片

  • 對list切片
    取一個list的部分元素是非常常見的操作。對這種經常取指定索引范圍的操作,用循環十分繁瑣,因此,Python提供了切片(Slice)操作符,能大大簡化這種操作。
L[0:3]
#如果第一個索引是0,還可以省略
L[:3]

切片操作還可以指定第三個參數:

L[::2]

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。
第三個參數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。
把list換成tuple,切片操作完全相同,只是切片的結果也變成了tuple。

  • 字符串切片
    字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串:
def firstCharUpper(s):
    first=s[0]
    rest=s[1:]
    return first.upper()+rest
print firstCharUpper('hello')
print firstCharUpper('sunday')
print firstCharUpper('september')

三、迭代

在Python中,迭代是通過 for ... in 來完成的,而很多語言比如C或者Java,迭代list是通過下標完成的,比如Java代碼:

for (i=0; i<list.length; i++) {
    n = list[i];
}

** Python 的 for循環不僅可以用在list或tuple上,還可以作用在其他任何可迭代對象上。**
因此,迭代操作就是對于一個集合,無論該集合是有序還是無序,我們用 for 循環總是可以依次取出集合的每一個元素。

注意: 集合是指包含一組元素的數據結構,我們已經介紹的包括:
1. 有序集合:list,tuple,str和unicode;
2. 無序集合:set
3. 無序集合并且具有 key-value 對:dict
  • 迭代dict的value
    dict 對象有一個 values() 方法,這個方法把dict轉換成一個包含所有value的list,這樣,我們迭代的就是 dict的每一個 value
  1. values() 方法實際上把一個 dict 轉換成了包含 value 的list。
  2. 但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節省了生成 list 所需的內存。
  • 迭代dict的key和value
    dict有一個items方法,items() 方法把dict對象轉換成了包含tuple的list,我們對這個list進行迭代,可以同時獲得key和value:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
for key, values in d.items():
    print key,':',values

和 values() 有一個 itervalues() 類似, **items() **也有一個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不占用額外的內存。

四、列表生成式

  • 如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循環,不給出代碼了。
    但是循環太繁瑣,而列表生成式則可以用一行語句代替循環生成上面的list:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

寫列表生成式時,把要生成的元素 x * x 放到前面,后面跟 for 循環,就可以把list創建出來。
任務
請利用列表生成式生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100]
提示:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]

print [x*(x+1) for x in range(1,101,2)]
  • 復雜表達式
    在生成的表格中,對于沒有及格的同學,請把分數標記為紅色。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
    if score<60:
        return '<tr><td>%s</td><td style="color:red">%s</td></tr>' % (name, score)
    return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(d) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'

字符串可以通過 % 進行格式化,用指定的參數替代** **%s。字符串的join()方法可以把一個 list 拼接成一個字符串。
把打印出來的結果保存為一個html文件,就可以在瀏覽器中看到效果了

  • 條件過濾
    列表生成式的 for 循環后面還可以加上 if 判斷。例如:我們只想要偶數的平方,不改動 range()的情況下,可以加上 if 來篩選
[x * x for x in range(1, 11) if x % 2 == 0]

請編寫一個函數,它接受一個 list,然后把list中的所有字符串變成大寫后返回,非字符串元素將被忽略。

def toUppers(L):
    return [x.upper() for x in L if isinstance(x,str)]
print toUppers(['Hello', 'world', 101])
  1. isinstance(x, str) 可以判斷變量 x 是否是字符串;
  2. 字符串的 upper() 方法可以返回大寫的字母。
  • 多層表達式
    for循環可以嵌套,因此,在列表生成式中,也可以用多層 for 循環來生成列表。
>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

任務
利用 3 層for循環的列表生成式,找出對稱的 3 位數。例如,121 就是對稱數,因為從右到左倒過來還是 121。
題目要求的寫法:

print [x*100+y*10+z for x in range(1,10) for y in range(0,10) for z in range(1,10) if x==z]

簡化寫法:

print [x*100+y*10+x for x in range(1,10) for y in range(0,10)]

入門筆記記錄慕課網學習的Python入門

Python學習才剛剛開始

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Python 是一種相當高級的語言,通過 Python 解釋器把符合語法的程序代碼轉換成 CPU 能夠執行的機器碼...
    Python程序媛閱讀 1,941評論 0 3
  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,616評論 1 118
  • 最近在慕課網學習廖雪峰老師的Python進階課程,做筆記總結一下重點。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,735評論 0 5
  • PYTHON-進階-ITERTOOLS模塊小結轉自wklken:http://wklken.me/posts/20...
    C_Y_閱讀 1,020評論 0 2
  • 東野圭吾的《白夜行》是一部非常好看的小說,周五點開看了以后,就像著了魔一樣,看到很晚,周六的一整天除了看這本書,其...
    追夢的藍閱讀 321評論 0 0