day-14

1. 匿名函數

一種沒有函數名的函數,由於沒有函數名,因此沒法直接調用,只能和某些方法結合在一塊兒使用。編程

1.1 語法

lambda 參數:返回值

1.2 與內置函數連用

匿名函數一般與 max()、sorted()、filter()、sorted() 方法聯用。app

1.2.1 與 max() 連用

# 取出字典中薪資最高的人的名字
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}
# 直接使用 max() 方法---不能實現

print(max(salary_dict))  # 只能比較字典的 key


# 使用函數---能夠實現
def func(k):
    return salary_dict[k]


print(max(salary_dict, key=func))

# 使用匿名函數---能夠實現

print(max(salary_dict, key=lambda name: salary_dict[name]))
# key=lambda name: salary_dict[name] 的做用
# 1. 首先明確 salary_dict 是可迭代對象,後面的語句會將 salary_dict 內的對象(鍵值對)逐個取出
# name: salary_dict[name]
# 2. 第一步獲得了字典內全部的鍵值對,salary_dict[name] 將全部的值放在一塊兒,進行 max() 函數的運算,獲得這些值中的最大值,name 表示咱們須要拿到的值

運行結果:函數

tank
jason
jason

Process finished with exit code 0

1.2.2 與 fileter() 連用

# 篩選出大於 5 的元素 
lt = [1, 2, 3, 4, 5, 6, 7, 8, 9]

res = filter(lambda i: i > 5, lt)
res = list(res)
print(res)

運行結果:翻譯

[6, 7, 8, 9]

Process finished with exit code 0

1.2.3 與 map() 連用

# 經過某種關係產生映射,如數學中的han'shu
lt = [1, 2, 3, 4]
res = map(lambda item: item ** 2, lt)
res = list(res)
print(res)

運行結果:code

[1, 4, 9, 16]

Process finished with exit code 0

1.2.4 與 sorted() 連用

# 將列表裏的人按照薪資大小排序
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000,
}

print(sorted(salary_dict, key=lambda name: salary_dict[name],reverse=True))

運行結果:對象

['jason', 'tank', 'nick', 'sean']

1.2.5 自定義 sorted() 方法(瞭解)

# 瞭解
def sorted(iter, key=None, reverse=None):
    iter.sort()

    if key:
        # key 是一個函數對象
        lt = []
        lt2 = []
        for i in iter:
            res = key(i)
            lt.append(res)
            lt2.append(i)
        lt.sort()

        lt3 = []
        for i in lt:
            for j in lt2:
                if j[1] == i:
                    lt3.append(j)

        if reverse:
            lt3.reverse()
        return lt3

    if reverse:
        iter.reverse()
    return iter


salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000,
}
salary_list = list(salary_dict.items())
print(salary_list) # [('nick', 3000), ('jason', 100000), ('tank', 5000), ('sean', 2000), ('z', 1000)]
print(sorted(salary_list, key=lambda i: i[1],
             reverse=None))  # [('sean', 2000), ('nick', 3000), ('tank', 5000), ('jason', 100000)]

2. 內置函數

2.1 掌握

  • bytes()排序

    # 將字符解碼成二進制
    res = bytes('中國', encoding='utf8')
    print(res)

    運行結果:索引

    b'\xe4\xb8\xad\xe5\x9b\xbd'
  • chr()ord()字符串

    # chr()參考ASCII碼錶將數字轉成對應字符;ord()將字符轉換成對應的數字。
    print(chr(97))
    print(ord('a'))

    運行結果:

    a
    97
  • divmod()

    # 返回兩個數的商和餘數
    print(divmod(10, 4))  # 取整/取餘

    運行結果:

    (2, 2)
  • enumerate()

    # 迭代得到列表的索引和值
    lt = ['a', 'b', 'c']
    for i in enumerate(lt):
        print(it)

    運行結果:

    (0, 'a')
    (1, 'b')
    (2, 'c')
  • eval()

    # 把字符串翻譯成數據類型,字符串去掉引號知足什麼數據類型的條件,就是什麼數據類型
    lis = '[1,2,3]'
    lis_eval = eval(lis)
    print(type(lis_eval),lis_eval)

    運行結果:

    <class 'list'> [1, 2, 3]
  • hash()

    # 獲取一個對象的哈希值
    print(hash(0))
    print(hash('0'))

    運行結果:

    0
    3174128774324462608

2.2 瞭解

  • abs()

    # 求絕對值
    print(abs(-13))

    運行結果:

    13
  • all()

    # 可迭代對象內元素所有爲真,則返回真
    print(all([1, 2, 3, 0]))
    print(all([]))

    運行結果:

    False
    True
  • any()

    #可迭代對象中有一個元素爲真,則爲真
    print(any([1, 2, 3, 0]))
    print(any([]))

    運行結果:

    True
    False
  • bin()

    # 二進制轉換
    print(bin(17))

    運行結果:

    0b10001
  • oct()

    # 八進制轉換
    print(oct(17))

    運行結果:

    0o21
  • hex()

    # 十六進制轉換
    print(hex(17))

    運行結果:

    0x11
  • dir()

    # 列舉出全部模塊的功能
    import time
    print(dir(time))

    運行結果:

    ['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset']
  • frozenset()

    # 不可變集合
    s = frozenset({1, 2, 3})
    print(s)

    運行結果:

    frozenset({1, 2, 3})
  • globals()locals()

    # 查看全局變量名;查看局部變量名

    運行結果:

  • pow()

    # 冪運算
    print(pow(3, 2))

    運行結果:

    9
  • round()

    # 四捨五入
    print(round(10.333))

    運行結果:

    10
  • slice()

    # 索引取值
    s = slice(1, 5, 2)  # 1start,5stop,2step
    lt = [1, 2, 3, 4, 5, 6, 7]
    print(lt[s])
    print(lt[1:5:2])

    運行結果:

    [2, 4]
    [2, 4]
  • sum()

    # 求和
    print(sum([1, 2, 3, 4, 5]))

    運行結果:

    15
  • \_\_import\_\_()

    # 經過字符串導入模塊
    time = __import__('time')
    print(time.time())

    運行結果:

    1569482755.649973 # 真實時間

3. 異常處理

異常處理只能捕捉到程序中的邏輯錯誤。

3.1 模板

代碼
  try:
      認爲可能會出錯的代碼
  except Exception as e:
      print(e)  # 若是出現錯誤,打印錯誤信息
  finally:
      須要繼續執行的代碼

4. 面向過程編程

面向過程編程:

核心是 過程 ,指的是解決問題的步驟,先作什麼,再作什麼,最後作什麼。

優勢:將複雜的問題流程化,簡單化。

缺點:擴展性差。

相關文章
相關標籤/搜索