Python每日學習筆記

來源:互聯網
上載者:User

標籤:value   AC   浮點   typeerror   instance   命名   產生   不可變   表示   

list:a=[1,2,3]   list值可變

tuple:b=(1,2,3) tuple值不可變

dict:c={‘a‘:1,‘b‘:2,‘c‘:3}  dict(key-value)key不可變
讀取c:c[‘a‘]

set:d=set([1,2,3])   set(key)無value key為傳入一個list


range(5)產生的序列是從0開始小於5的整數:
>>> list(range(5))
[0, 1, 2, 3, 4]

在Python中,定義一個函數要使用def語句
只允許整數和浮點數類型的參數。資料類型檢查可以用內建函數isinstance()實現:
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError(‘bad operand type‘)
    if x >= 0:
        return x
    else:
        return -x
預設參數:
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
調用power()時就可以只有一個參數了,n預設2

坑:
def add_end(L=[]):
    L.append(‘END‘)
    return L
>>> add_end()
[‘END‘]
但是,再次調用add_end()時,結果就不對了:
>>> add_end()
[‘END‘, ‘END‘]
>>> add_end()
[‘END‘, ‘END‘, ‘END‘]
原因解釋如下:
Python函數在定義的時候,預設參數L的值就被計算出來了,即[],因為預設參數L也是一個變數,它指向對象[],每次調用該函數,如果改變了L的內容,則下次調用時,預設參數的內容就變了,不再是函數定義時的[]了。
!!!定義預設參數要牢記一點:預設參數必須指向不變對象!
修改:def add_end(L=None):
    if L is None:
        L = []
    L.append(‘END‘)
    return L

可變參數:def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
在number前加了個* ,沒有*的話可以傳入list或者tuple
加了*就是接受tuple
當有一個nums = [1, 2, 3]
可以 calc(nums[0], nums[1], nums[2])
這樣繁瑣:可這樣:calc(*nums)
*nums表示把nums這個list或者tuple的所有元素作為可變參數傳進去

關鍵字參數:
def person(name, age, **kw):
    print(‘name:‘, name, ‘age:‘, age, ‘other:‘, kw)
關鍵字kw擴充函數的功能,和可變參數類似,也可以先組裝出一個dict,然後,把該dict轉換為關鍵字參數傳進:
>>> extra = {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
>>> person(‘Jack‘, 24, city=extra[‘city‘], job=extra[‘job‘])
name: Jack age: 24 other: {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
簡化寫法:
>>> extra = {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
>>> person(‘Jack‘, 24, **extra)
name: Jack age: 24 other: {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}在dict前面加兩個**,**extra表示把extra這個dict的所有key-value用關鍵字參數傳入到函數的**kw參數,kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數外的extra。

命名關鍵字參數:
檢查傳入的關鍵字
def person(name, age, **kw):
    if ‘city‘ in kw:
        # 有city參數
        pass
    if ‘job‘ in kw:
        # 有job參數
        pass
    print(‘name:‘, name, ‘age:‘, age, ‘other:‘, kw)但是調用者仍可以傳入不受限制的關鍵字參數
要想限制關鍵字,要命名關鍵字參數,只接收city和job作為關鍵字參數:
def person(name, age, *, city, job):
    print(name, age, city, job)
和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔字元*,*後面的參數被視為命名關鍵字參數。
如果函數定義中已經有了一個可變參數,後面跟著的命名關鍵字參數就不再需要一個特殊分隔字元*了:
def person(name, age, *args, city, job):
    print(name, age, args, city, job)



參數組合:
定義函數時可以用必選參數、預設參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數都可以組合使用。




切片:
>>> L = [‘Michael‘, ‘Sarah‘, ‘Tracy‘, ‘Bob‘, ‘Jack‘]
>>> r = []
>>> n = 3
>>> for i in range(n):
...     r.append(L[i])
...
>>> r
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]
 range(n)產生0到n-1的整數
切片(Slice)操作符:
>>> L[0:3]
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]
從0開始到3(不包括3索引)即0,1,2   如果第一個索引是0,還可以省略:L[:3]
L[-1]取倒數第一個元素
列:  L = list(range(100))
前10個數:
>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

後10個數:
>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

前11-20個數:
>>> L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前10個數,每兩個取一個:
>>> L[:10:2]
[0, 2, 4, 6, 8]

所有數,每5個取一個:
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

甚至什麼都不寫,唯寫[:]就可以原樣複製一個list:
>>> L[:]
[0, 1, 2, 3, ..., 99]
     
tuple也是一種list,唯一區別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結果仍是tuple:
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

字串‘xxx‘也可以看成是一種list,每個元素就是一個字元。因此,字串也可以用切片操作,只是操作結果仍是字串:
>>> ‘ABCDEFG‘[:3]
‘ABC‘
>>> ‘ABCDEFG‘[::2]
‘ACEG‘







Python每日學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.