天天看點

python day three

一、SET集合

    set集合是無序的,不重複的。

    1.建立

第一種:

s1 = {"123","456"}     #集合用大括号包起來,字元串用逗号隔開

第二種:

li = [11,22,33]

s2 = set(li)

#當執行set()的時候,實際上是調用set的__init__來對li裡邊的元素做一個for循環,然後轉成set。

    2.功能

1.s1.add() #增加元素

2.s1.clear() #清空集合内容

3.s1.copy()#淺複制

4.s1.difference  #a中存在,b中不存在

5.s1.symmetric_difference #a中存在,b中不存在拿出來 和 b中存在,a中不存在拿出來(也稱對稱差級)

6.s1.difference_update #a中存在,b中不存在拿出來,然後重新指派給左邊的變量s1

7.s1.symmetric_difference_update #a中存在,b中不存在拿出來 和 b中存在,a中不存在拿出來,然後重新指派給左邊的變量s1

8.s1.discard #移除特定元素,如果沒有元素不報錯

9.s1.remove #移動特定元素,如果沒有會報錯

10.s1.pop #随機移除,把移除的值賦給變量

11.s1.intersection #取兩個變量的交集(就是兩個變量裡邊相同的元素)

12.s1.inteersection_update #取兩個變量的交集,然後指派給左邊的變量s1

13.s1.isdisjoint #如果有交集,傳回True,否則傳回False

14.s1.issubset #一個變量是否是另一個變量的子序列

15.s1.union #并集,就是把兩個變量的元素聯合起來

16.s1.update #批量添加元素,接收一個可疊代的對象,例如:清單、元祖、字元串

    3.集合練習題

        有兩個字典,現在要把新的字典裡邊的内容添加到舊的字典裡,找出

        1.應該删除的項

        2.應該添加的項

        3.應該更新的項

        需求分析:

            1.首先确定可以用set功能來實作

            2.需要把字典的keys讀取出來轉成set集合

            3.找出舊字典應該删除、添加、更新的項

#舊字典

old_dict = {

    '#1':8,

    '#2':4,

    '#4':2,

}

#新字典

new_dict = {

    '#1':4,

    '#3':2,

old_set = set(old_dict.keys())  #把舊字典keys轉換成集合

new_set = set(new_dict.keys())  #把新字典keys轉換成集合

remove_set = old_set.difference(new_set)    #找出應該删除的

add_set = new_set.difference(old_set)       #找出應該添加的

update_set = old_set.intersection(new_set)  #找出應該更新的

print(remove_set,add_set,update_set)        #列印找出的删除、添加、更新

輸出:

{'#4'} {'#3'} {'#1', '#2'}

二、函數

    函數分為自定義函數和内置函數

    1、定義函數

1.函數關鍵字def

2.函數名

3.寫個()

4.函數體(具體内容)

5.傳回值

6.自定義的函數自己不被執行

例如:

def aa():

    函數體

在PyCharm中可以點選代碼左端空白處,可以打斷點執行代碼,檢視代碼執行流程。

    2、執行函數傳回值

函數利用try retrun來實作傳回值。

    try :

        函數體

    except:

        return False #失敗傳回False

    else:

        return True #成功傳回True

注意:

1.在函數中一旦執行了return,函數的執行過程立即終止,不會再往下走!

2.函數中如果沒有指定return,預設python傳回一個return值為None

    3、函數的基本參數

1.普通參數 #一一對應,嚴格按照順序執行,将實際參數指派給行為參數;

2.預設參數 #當函數執行的時候沒有給變量指派的時候,使用預設參數;設定預設參數的行為參數要放到最後,可以連着多個;

3.指定參數 #給指定的參數指派

(函數冒号左邊括号裡邊的叫做行為參數;執行函數的時候,括号裡邊的參數叫做實際參數。)

    4、函數的動态參數

1.行為參數之前加一個* 就可以接受多個實際參數(接收疊代參數清單、元組、字元串,不接收字典)輸出格式為元祖,按順序處理。

      def f1(*args):

          print ("abc","123")

      例一:當實際參數前不加*時,函數會把疊代參數整體作為一個元素放到元祖裡。

          def f1(*args):

              print (args)

          li = [11,22]

          f1(li)

          輸出:([11,22])

      例二:當實際參數前也加一個*時,函數會對疊代參數裡邊的所有元做一個for循環,然後指派到元祖裡;

          def f1(*args):

          f1(*li)

          輸出:(11,22)

2.行為參數之前加兩個* 就可以接受字典參數,輸出格式為字典,處理key、values鍵值對

      def f1(**args):

          print (args)

      f1('n1'='aaa','n2'='ddd')

      輸出:{'n1':'aaa','n2':'ddd'}

3.萬能參數(就是*args和**kwargs一起使用,它會自動識别是清單還是字典,然後指派給*args和**kwargs)

    5、利用動态函數實作format功能

格式:str.format

功能:實作格式化輸出方法(同萬能參數功能,都是通過*args和**kwargs)

例如:s = "i am {0},age{}".format('abc','123')  (括号裡邊的abc和123也可以寫成一個清單)

      s = "i am {0},age{}".format(*['abc','123'])

輸出:i am abc,age 123

    6、函數内容補充

例一:

def f1(a1,a2):

    return a1+a2

def f1(a1,a2):          #當運作到這裡的時候f1已經重新指派,記憶體段也不一樣了,

    return a1*a2

result = f1(8*8)

print (result)          #是以結果是64      

例二:

python函數中,當傳遞參數的時候,python預設為引用參數,不是重新複制參數指派。

def f1(a1):

    a1.append(111)

li= [11,22]

f1(li)             #這裡的li為引用,不是重新指派

print (li)         #結果為[11,22,999]

    7、全局變量

1.作用域内的變量隻能作用域内使用;

2.全局變量所有作用域都可以讀取,但不能修改;

3.局部變量優先于全局變量;

4.作用域要修改變量,需要在作用域中加global+變量名;

5.如果全局變量是清單或者字典時,作用域不加global可直接添加元素,但不能重新指派;如果重新指派,要加global+變量名;

(注意:所有全局變量名要都用大寫,友善區分)

    8、函數式程式設計實作登入和注冊

三、三元運算(也稱三目運算,if else的簡寫)

用來簡單的if else的運用;

正常的寫法:

    if 1 == 1:

        name = 'aaa'

        name = 'bbb'

三元運算寫法:

    name = 'aaa' if 1 == 1 else 'bbb'

四、lambda表達式

用作簡單函數的簡寫,對簡單的函數指派做操作,隻能寫一行。

    def f1(a):

        return a+100

lambda寫法:

    f1 = lambda 1: a+100    #return預設隐含了

五、内置函數

1. .abs()  #取絕對值

2. .all()  #接收可以被疊代的對象。當括号裡所有為真時,為真;括号裡隻有一個為假時,就為假。

3. .any()  #括号裡隻要有真,就為真。

4. .ascii()  #自動執行某對象的的__str__方式

5. .bin()  #接收十進制,然後轉成二進制 0b代表二進制

6. .oct()  #接收十進制,然後轉成八進制 0o代表八進制

7. .nex()  #接收十進制,然後轉成十六進制 0x代表十六進制

8. .bool() #真或假、True或False

9. .bytes()     #把字元串轉成位元組類型 例如:bytes(s,encoding"utf-8")

10. .bytearry() #把字元串轉成位元組類型,放到一個清單裡。

五、檔案操作

1.打開檔案

    f = open ('檔案名字','什麼方式')

    打開檔案的方式有:

        1.r 隻讀

        2.w 隻寫(清空之後再寫)

        3.x (如果檔案存在,就報錯;如果不存在,就建立再寫内容)

        4.a 追加  永遠是追加到光标所在位置的最後

        5.r+  讀寫

        6.w+  先清空再寫讀

        7.a+  讀寫,但是永遠是追加到最後

        8.x+  讀寫

        9.b 以二進制的方式讀寫

        10.b+  

2.操作檔案(檔案操作功能)

        1.read()

        2.tell()

        3.seek()

        4.write()

        5.close()

        6.flush()

        7.readable()

        8.seekable()

        9.readline()

        10.readlines()

        11.truncate()

        12.for循環檔案對象

           例如;

               f = open("aaa.txt",'r=')

                   for line in f:   #會把f裡邊的一行一行讀取出來指派給line

                       print (line) 

3.with 同時打開多個檔案

        with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:

  例一:同時打開兩個檔案,讀取第一個檔案,同時寫入第二個檔案,當寫到10行時退出;

        with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:

           times = 0

           for line in f1:

               times += 1

               if times <= 10:

                   f2.write(line)

               else:

                   break

 例二:當有個檔案,把檔案裡邊的aaa改成bbb

       with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:

               new_str = line.replace('aaa','bbb')

               f2.write(new_str)

     本文轉自506554897 51CTO部落格,原文連結:http://blog.51cto.com/506554897/1795360,如需轉載請自行聯系原作者