python基礎 Day13

  • 2020 年 8 月 20 日
  • 筆記

python Day13

  • 匿名函數(一句話函數,比較簡單的函數)

    • func=lambda a,b:a+b
      print(func(1,2))
      ###結果:3
      
    • func=lambda a:(a[0],a[2])
      print(func("dsfds"))
      
    • func_max=lambda a,b:a if a>b else b
      print(func_max(3,2))
      
  • 內置函數擴展

    • bin將10進位轉換為二進位並返回

    • oct將10進位轉化為八進位字元並返回

    • hex將10進位轉化為16進位並返回

    • divmodf :返回除數與被除數的結果

      print(divmod(10,3))
      ###結果(3, 1)
      
    • round:保留浮點數的小數位數

      print(round(3.2243252543,2))
      ###結果3.22
      
    • pow:求x的y次冪

      print(pow(2,3))
      ##結果 8
      
  
  + bytes
  
    ~~~python 
    s1="電話卡"
    print(bytes(s1,encoding="utf-8"))
    ##結果 b'\xe7\x94\xb5\xe8\xaf\x9d\xe5\x8d\xa1'
  • chr:輸入位置數字找出來其對應的字元

    print(chr(97))
    ## a
    
  • reversed返回的是一個翻轉的迭代器

    list1=[i for i in range(10)]
    obgj=reversed(list1)
    print(obgj)
    print(list(obgj))
    ###結果 :<list_reverseiterator object at 0x000001DD79831948>
          ## [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
    
    
  • zip 拉鏈的方法

    li=[1,23,4,4,55]
    tu1=("太白","猴哥","單反")
    s1="fsfsdfdsf"
    print(list(zip(li,tu1,s1)))
    ###結果[(1, '太白', 'f'), (23, '猴哥', 's'), (4, '單反', 'f')]
    
    
  • min,max的擴展用法

    #以絕對值的形式輸出列表的最小值
    ###凡是可以加key的,它會自動的將可迭代對象中的每個元素按照順序傳入對應的函數中
    li=[1,23,4,4,55,-1]
    print(min(li,key=abs))##key 後面跟著函數
    ##1
    ######
    l11=[('太白',18),("alex",73),("wusir",35),("口天吳",41)]
    def func(a):
        return a[1]
    print(min(l11,key=func))#min替換成sorted也是可以的
    ####結果:('太白', 18)
    
    
  • filter 列表推導式的篩選模式

    l1=[1,2,3,4,55]
    l2=list(filter(lambda x:x>3,l1))
    print(l2)
    ###結果[4, 55]
    
    
  • map 列表推導式的循環模式,吧列表中中每個元素輸入進去

    l1=[1,2,3,4,55]
    ret=map(lambda x:x**2,range(1,6))
    print(list(ret))
    ##結果是迭代器的模式
    
    
  • 閉包

    • 記憶體函數對外層函數非全局變數的引用(使用),就會形成閉包。被引用的非全局變數也稱做自由變數,這個自由變數會與內層函數產生一個綁定關係,自由變數不會再記憶體中消失。(保證數據的安全)

    • 閉包只能存在嵌套函數中

      def make_average():
          l1=[]
          def average(new_price):
              l1.append(new_price)
              total=sum(l1)/len(l1)
              return total
          return average
      avg=make_average()
      print(avg(1000))
      print(avg(2000))
      
      
  • 作業

    • 看程式碼寫結果

      def add(n,i):
          return n+i
      def test():
          for i in range(4):
              yield i
      g=test()
      for n in [1,10]:
          g=(add(n,i) for i in g)
      print(list(g))
      ###結果 [20, 21, 22, 23]
      ####解析
      因為第二次循環n一直就是10了
      list(g)=list((add(10,i) for i in add(10,i) for i in test()))
      list(g)=list((add(10,i) for i in add(10,i) for i in test[0,1,2,3]))
      list(g)=list((add(10,i) for i in ([10,11,12,13])         
      
      
    • 用map來處理字元串列表,把列表中所有人都變成sb,比如fengchao_sb

      name=["zhuxiayu","fengchao","wusir"]
      new_name=map(lambda x:x+"_sb",name)
      print(list(new_name))
      ###結果 ['zhuxiayu_sb', 'fengchao_sb', 'wusir_sb']
      
      
    • 用map來處理下述l,然後用lsit得到一個新的列表,列表中每人的名字都是sb結尾

      l=[{"name":"伺服器"},{"name":"伺服器2"}]
      new_l=map(lambda x:x["name"]+"sb",l)
      print(list(new_l))
      ###結果 ['伺服器sb', '伺服器2sb']
      
      
    • 寫程式碼,最終得到的結果是(每個元組第一個元素>2,第三個*至少是4個)

      l1=[1,2,3,4,5,6,7]
      l2=["oldboy","axle","wusir","白天","天日"]
      tu=("**","***","*****","********")
      new=zip(l1,l2,tu)
      new_list=list(new)
      ret=filter(lambda x:x[0]>2 and len(x[2])>3,new_list)
      print(list(ret))
      ###結果[(3, 'wusir', '*****'), (4, '白天', '********')]
      
      
    • 將l1按照列表中每個字典的values大小進行排序,形成一個新的列表

      l1=[{'sales_volumn':0},
          {'sales_volumn':108},
          {'sales_volumn':337},
          {'sales_volumn':475},
          {'sales_volumn':396},
          {'sales_volumn':172},
          {'sales_volumn':9},
          {'sales_volumn':58},
          {'sales_volumn':272},
          {'sales_volumn':456},
          {'sales_volumn':440},
          {'sales_volumn':239},
      ]
      print(list(sorted(l1,key=lambda x:x["sales_volumn"])))
      
      
    • 看程式碼寫結果

      v=[lambda :x for x in range(10)]
      print(v)
      print(v[0])
      ##結果:[<function <listcomp>.<lambda> at 0x000002AA60EBE168>, <function <listcomp>.<lambda> at 0x000002AA60EB93A8>, <function <listcomp>.<lambda> at 0x000002AA60FC4C18>, <function <listcomp>.<lambda> at 0x000002AA610B5A68>, <function <listcomp>.<lambda> at 0x000002AA610BC5E8>, <function <listcomp>.<lambda> at 0x000002AA610BCC18>, <function <listcomp>.<lambda> at 0x000002AA610C1EE8>, <function <listcomp>.<lambda> at 0x000002AA610C1438>, <function <listcomp>.<lambda> at 0x000002AA620BF3A8>, <function <listcomp>.<lambda> at 0x000002AA620BF438>]
      <function <listcomp>.<lambda> at 0x000002AA60EBE168>
      
      
      
    • 寫一個函數完成三次登錄功能,用戶的用戶名密碼從一個文件register中取出,register文件包含多個用戶名,密碼,用戶名密碼通過|隔開,每個人的用戶名密碼佔用文件中一行,完成三次實驗,三次實驗不成功則登錄失敗,失敗則返回false

      def get_user_dict():
          user_dict={}
          with open("register.txt",encoding="utf-8",mode="r") as file:
              for line in file:
                  username1,password1=line.strip("\n").split("|")
                  user_dict[username1]=password1
              return user_dict
      def log_in():
          user_dict=get_user_dict()
          count=1
          while count<4:
              username=input("please input your name:").strip("")
      
              password=input("please input your password").strip("")
              if username in user_dict and password==user_dict[username]:
                  print("登錄成功")
                  return True
              else:
                  count+=1
          else:
              return False
      log_in()