Python之路day13-內置函數_lambda_閉包

前言時刻

這兩天寫文章寫得快吐了,寫完信息安全的讀書筆記而後又寫一個軟件使用教程,難受了。不過堅持住就好,繼續奮鬥吧。python

來來總結一波:數組

今天學習了lambda匿名函數、一些重要的內置函數如:abs、sum、max、min、zip、sorted、filter、map安全

通常性重要的是:bytes、int、chr、ord、bin、oct、hex、repr、all、any等閉包

一、lambada函數

lambda 函數又稱爲匿名函數,從語法上看它就是一個函數,並且功能還很簡單。函數

# 語法:
func = lambada 形參:結果

func1 = lambda a, b: a+b
func1(1, 2)   # 3

可是 Python 爲何還要單獨搞一個匿名函數呢?答案是自有其道理的。通常 lambda 是與其餘匿名函數組合使用,起到超重要的做用。學習

例如:和 sorted 函數配合使用,使用 lambda 能夠將其成員中的一部分做爲排序依據。編碼

dic = {"name": "13", 'hobby': '6666', 'age': '14'}

# 1.默認排序
print(sorted(dic))     # ['age', 'hobby', 'name']
# 2.使用值做爲排序依據,從小到大
sorted(dic, key=lambda a:int(dic[a]),reverse=False)   # ['name', 'age', 'hobby']

二、內置函數

內置函數是Python中最重要的亮點之一,有些函數真的可讓你一行低十行。code

2.1 重要函數

  1. sum(iterable):求一個迭代對象的全部元素的和
  2. max(iterable, key=lambda x:x)/min():求迭代對象中的元素的最大值或最小值
# 今天寫的內置函數都是很是重要的

lis = [1, 2, 3, 4, 5]
dic = {"name": "13", 'hobby': '6666', 'age': '14'}


# 1. sum

print(sum(lis))   # 15
print(sum((1, 2, 3, 4, 5)))   # 15

# 2. max min 

def max_test(x):
    return int(dic[x])
max(lis)    # 5
max(dic, key=lambda x:int(dic[x]))   # hobby
max(dic, key=max_test)   # hobby
# 能夠看出,key也一樣能夠用一個函數替代lambda,也說明lambda就是簡單的函數
  1. zip([iterable,...]):又稱拉鍊函數,將幾個可迭代對象中的數據打包成一個元組,這個功能太實用了。
  2. sorted(iteable, key=, reverse=True/False): 對裏面的迭代對象進行排序,生成一個新的 list 列表對象,能夠添加 key 控制排序依據。reverse=True則爲從大到小,默認是False從小到大。
# 3. zip函數

lis1 = [1, 2, 3]
lis2 = (4, 5, 6)
lis3 = (7, 8, 9)
zip(lis1, lis2, lis3)


# 4.sorted函數
dic = {"name": "13", 'hobby': '6666', 'age': '14'}
lis = [23, 4, 5, 1, 9, 6]

print(sorted(dic, key=lambda x: int(dic[x])))
print(sorted(lis, reverse=True))
  1. filter()函數,至關因而列表推導式中的篩選模式。map()函數,至關因而列表推導式中的循環模式
# 5.filter函數
lis = [23, 4, 5, 1, 9, 6]
def func(x):
    return x>6

f1 = filter(lambda x:x>6, lis)
print(list(f1))                  # [23, 9]
print(list(filter(func, lis)))   # [23, 9]


# 6.map函數
f2 = map(lambda x: x+2, lis)
print(list(f2))                                    # [25, 6, 7, 3, 11, 8]

2.2 經常使用函數

一、int(x, base=6),將x轉成base進制的數對象

二、divmod(x, y),返回x除以y的商和餘數。排序

三、round(2.8, 1),返回指定小數位數的浮點型

四、pow(base, index),冪指數

# 一、int
int(3.5)             # 3   float轉int型
int('0100', base=2)  # 4   其餘base進制字符串轉整型

# 二、divmod
divmod(9, 2)      # (4, 1)

# 三、round
round(3.14, 1)    # 3.1
round(3.16, 1)    # 3.2

# 四、base
pow(2, 4)         # 16

五、repr("python"),返回帶有引號的字符串。

六、all(iterable),可迭代對象中全都是真則返回True。any(iterable),如有真就返回True

# 五、repr
print(repr("python"))   # 'python'


# 六、all、any
lis = [1, 2, '666', True]
lis2 = [1, 2, '', True]

all(lis)    # True
all(lis2)   # False

any(lis)    # True
any(lis2)    # True

七、bytes(), 將字符串指定編碼方式進行編碼,如不懂編碼,能夠看*

# 七、bytes

b1 = bytes(name, encoding='utf8')
print(f"b1: {b1}, type: {type(b1)}")
# b1: b'python', type: <class 'bytes'>

print(bytes("西", encoding='gbk'))   # b'\xce\xf7'
print(bytes("西", encoding='utf8'))  # b'\xe8\xa5\xbf'

三、閉包

閉包是什麼?閉包是嵌套在函數中的函數,且對外層函數中的變量的引用。

def func(age):
    name = 'python'
    def inner():
        print(name)
        print("內層函數 inner 被調用")
        return 'inner'
    return inner

res = func(17)
print(res)
print(res())

# <function func.<locals>.inner at 0x7fbfe22f9550>

# python
# 內層函數 inner 被調用
#inner

閉包能夠避免函數中的一些非全局變量被銷燬,能夠直接在內層函數中使用。

我以爲閉包其實就是爲了後面的裝飾器打基礎的。

總結:

今天的重點是掌握一些重要的內置函數以及 lambada 匿名函數的用法,仍是多看多練多總結!

相關文章
相關標籤/搜索