日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python全栈之路系列----之-----内置函数和匿名函数lamdba

發布時間:2024/10/12 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python全栈之路系列----之-----内置函数和匿名函数lamdba 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引子

什么是內置函數?

  內置函數就是python 提供給我們直接拿來就可以用的函數

   ? 內置函數--內置命名空間
 ? 只管調用 不管實現
   總共68
   def func(): == #這是自己定義的函數
     pass
   print() == #這是python 提供的內置函數

?

內置函數分為六大類,總數68個:

  1.作用域相關的有兩個

  2.迭代器生成器相關的有三個

  3.基礎數據類型相關的有三十八個

  4..面向對象相關的有九個

  5.反射相關的有四個

  6.其他的有十二個

?

標紅色的為必會方法...不....會....混...不....下..去...

第一類:作用域相關函數兩個

局部作用域中的變量 —— locals()? #本地
全局作用域中的變量 —— globals()
在全局執行這兩個方法,結果相同
在局部執行,locals表示函數內的名字,globals始終不變

def func():x = 1y = 2print(locals())print(globals())func() 作用域函數

?

第二類迭代器生成器相關函數的有三個

iter?? ,?? next?? ,?? range

所有可以調用雙下方法的都可以寫成加?? ()?? 執行

next()????? 會在生成器中常用到

range()??? 會常用到? 范圍和步長

iter()??????? 不常用 ,只要是可迭代的都會有iter方法

在python里 要盡量少去調用雙下方法# def iter(iterable): # return iterable.__iter__()#print([1,2,3].__iter__()) #內置的特殊成員 # iterator = iter({1,2,3,4}) # # def next(iterator): # # return iterator.__next__() # print(next(iterator)) #iterator.__next__() # print(next(iterator)) # print(next(iterator))range(100) #[0,99] [0,100) range(10,100) #[10,99] range(10,100,2) #[10,99]隔一個取一個 #可迭代對象 最好循環取結果

?

第三類其他類十二個

小類1>>字符串類型代碼執行

eval??? exec?? compile

compile不要隨便用? 最好不用? 危險系數五顆星*****

#直接拿來執行的方式一定不要隨便用
#如果非用不可,你也要做最起碼的檢測

?

eval : 有返回值

exec :沒有返回值

complie:當需要對某一個字符串數據類型的python代碼多次執行的時候,就是用compile先編譯一下

# code1 = 'for i in range(0,10): print (i)' # compile1 = compile(code1,'','exec') #編譯 # # print(compile1) #code # exec(compile1)# code2 = '1 + 2 + 3 + 4' # compile2 = compile(code2,'','eval') # print(eval(compile2))# name = 'egon' # code3 = 'name = input("please input your name:")' # compile3 = compile(code3,'','single') # exec(compile3) # print(name)

?

小類2>>輸入輸出

inpurt?? 和? print

input輸入時最好加上一些標識符? 更好理解的去輸入

print 重點有幾個方法?sep='***'? end=' ' file=f

結合代碼去理解

#a = input('>>>') # print(11232) # print(11232,1234,sep='***') # print('ajkdshkljaf',end=' ') # print('sagjkg') # print(12,34,56,sep=',') # print('%d,%d,%d'%(12,34,56)) # f = open('print_test','a',encoding='utf-8') # print(12146798,file=f)
*************************************************
import time
for i in range(0,101,2):
??? time.sleep(0.1)
??? char_num = i//2????? #打印多少個'*'
??? per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
??? print(per_str,end='', flush=True)
\r 可以把光標移動到行首但不換行
**************************************************
import sys
# for i in range(10):
#???? time.sleep(0.1)
#???? print(i*'*',end='')
#???? # sys.stdout.flush()

?

小類3內存相關>>hash和id

hash

?

hash的結果是拿到一個不變的數字和數據庫相關

但是重復哈希的值會變? 這和算法有關

可變的數據類型都不可以被哈希?? --列表 字典 集合

**************************************************

id???? 標志著一個數據的內存地址

is is not 不僅比較值的大小還比較內存地址是否一致

身份運算 ==只比較值的大小

?

?

# hashlib模塊 # print(hash('sdfsdf')) # print(hash('sdfsdf')) # print(hash('sdfsdf')) # print(hash('sdfsdf')) # 是一種摘要算法 每次hash的結果都不一樣 # print(hash((1,2,3,4,5,6,7))) # print(hash([12,2,54]))#可變的數據類型都不可以被哈希 列表 字典 集合 #hash的結果是一個數字 # hash作用 作為字典的key # 數據庫 字典# hash在python的一次執行中,對于相同的可hash對象來說 # # # id()標志著一個數據的內存地址 # is is not 不僅比較值的大小還比較內存地址是否一致 # 身份運算 ==只比較值的大小

?

?

?

小類4>>文件操作相關 open()

小類5>>模塊相關__import__但是要這樣用 import

小類6>>幫助 help() 退出 是q

小類7>>調用相關 判斷是否可調用 callable

小類8>>查看內置屬性? dir()看到數據類型里面有什么方法/內置屬性

    print(dir(__builtins__)) 查看所有的

?

?

第四類基礎數據類型相關的有三十八個

基礎數據類型分為兩大類? : 數字相關里有三小類 和 數據結構相關 里有三小類

......????????????????????? .. ????????????????????????? .......

數字相關分為 1.數據類型 2.進制轉換 3.數學運算

數據結構相關分為 4. 序列? 5.數據集合? 6.相關內置函數

?

1.數據類型 包括 布爾bool , int , float ,complex

  bool() :bool() 函數用于將給定參數轉換為布爾類型,如果沒有參數,返回 False  返回值 返回 Ture 或 False。

   int () :int() 函數用于將一個字符串會數字轉換為整型,去浮點數,也就是轉換成數字

  print(type(int('123')))?? print(type('123'))用于強轉數據類型

  float() :float()函數用于將整數和字符串轉換成浮點數。 就是加上了末尾的小數點

  compile():compile() 函數將一個字符串編譯為字節代碼。

2. 進制轉換 包括 bin oct hex

  bin:轉換為二進制? oct 轉換成八進制? hex? 轉化成十六進制

3.數學運算 包括 abs? divmod? round pow ? sum min max ?? (都是重點)

  abs:計數絕對值?? 相當于負數都是正數然后去計算

  divmod:返回商取余 ,用于分頁 

# ret = divmod(21, 5) # print(ret) # #商4余1 用于分頁 # #105 分10頁 余 5 11頁 # ret = divmod(105, 10) # print(ret) divmod

?

  round: 冪運算 print(pow(2,3))?

  sum: 求和?? print(sum([1,2,3,4,5],'本錢'))?? print(sum(range(100)))

  min: 計算最小值? max:計算最大值

     可以接收散列的值,和可迭代的對象 key是一個函數名,判斷的結果根據函數的返回值來確定????

     defult 如果可迭代對象為空,設置默認最小值

print(min(range(20))) print(min([1,2,3,4,5])) print(max([1,2,3,4,5])) print(min([-1,-5,6],key=abs))裝成絕對值 計算 print(max([1,-8,6],key=abs))裝成絕對值 計算 key根據函數的返回值 來判斷大小 min max 可以接收散列的名 和可迭代對象 key 是一個函數名 根據函數的返回值 來判斷大小 最大小值

  

4.序列:包括列表和原組 list? tuple? ? 主要用于強轉  reversed? 反轉?? slice 相當于切片 

  list() 方法用于將元組轉換為列表。tuple() 函數將列表轉換為元組。

  注:元組與列表是非常類似的,區別在于元組的元素值不能修改,元組是放在括號中,列表是放于方括號中。

tuple({1:2,3:4}) #針對字典 會返回字典的key組成的tuple (1, 3) aList = [123, 'xyz', 'zara', 'abc']; aTuple = tuple(aList) Tuple elements : (123, 'xyz', 'zara', 'abc')aTuple = (123, 'xyz', 'zara', 'abc'); aList = list(aTuple) 列表元素 : [123, 'xyz', 'zara', 'abc'] 列表 元組

  reversed() 反轉數據? 就是倒著輸出

ret = reversed([1,2,3,4]) print (list(ret)) print (set(ret)) ret = reversed(range(0,20)) # print(list(ret)) # print(tuple(ret)) ret = reversed('ajagjfd') # print(ret)print('323'.join(list(ret))) reversed()

?

4.1字符串類型 包括: str? format? bytes? bytearray memoryview? ord? chr? ascii? repr

  str:強轉字符串

  format:格式化輸出

?

>>>"{} {}".format("hello", "world") # 不設置指定位置,按默認順序 'hello world'>>> "{0} {1}".format("hello", "world") # 設置指定位置 'hello world'>>> "{1} {0} {1}".format("hello", "world") # 設置指定位置 'world hello world'....................................................#!/usr/bin/python # -*- coding: UTF-8 -*-print("網站名:{name}, 地址 {url}".format(name="菜鳥教程", url="www.runoob.com"))# 通過字典設置參數 site = {"name": "菜鳥教程", "url": "www.runoob.com"} print("網站名:{name}, 地址 {url}".format(**site))# 通過列表索引設置參數 my_list = ['菜鳥教程', 'www.runoob.com'] print("網站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是可選的 format#字符串可以提供的參數,指定對齊方式,<是左對齊, >是右對齊,^是居中對齊 print(format('test', '<20')) print(format('test', '>20')) print(format('test', '^20')) format

?

  bytes:轉換成為bytes直接編碼? 解碼需要decode

# s = 'alex' # by = bytes(s,encoding='utf-8') #新華字典第n頁第m行第k個 # print(by) # print(by.decode('utf-8')) bytes

  bytearray:修改字符編碼組? 但是修改完不改變內存地址? 但是需要記住編碼號

#array == 數組 #alex [a,l,e,x] # s = 'alex' # ret = bytearray(s,encoding='utf-8') # print(id(ret)) # ret[0] = 65 # print(ret,id(ret)) # s = ret.decode('utf-8') bytearray

   memoryview :轉化為字符組 進行節省內存的切片操作

  ord:字符按照unicode轉數字

  chr:數字按照unicode轉字符

  ascii:字符串轉ascaii

  repr:用于%r格式化輸出? 大白話就是保留原始輸入的數據類型,不會進行任何改變

  

5.數據集合:包括字典dict()和集合()? 和??frozenset()轉變為不可變的集合

  字典:dict 用于構建字典

  集合:set() 函數創建一個無序不重復元素集,可進行關系測試,刪除重復數據,還可以計算交集、差集、并集等。

  x = set('runoob')? y = set('google')? print(x,y) 刪除重復原素? 還可以進行 交并差集計算

  frozenset():轉變為不可變的集合 ??  這種方法去掉了刪除功能

  frozenset() 返回一個凍結的集合,凍結后集合不能再添加或刪除任何元素。

?

6.相關內置函數

  len:計算數據長度? 字典根據一對是一個值 來計算

  enumerate:enumerate() 函數用于將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) # 小標從 1 開始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]普通的 for 循環 >>>i = 0 >>> seq = ['one', 'two', 'three'] >>> for element in seq: ... print i, seq[i] ... i +=1 ... 0 one 1 two 2 threefor 循環使用 enumerate >>>seq = ['one', 'two', 'three'] >>> for i, element in enumerate(seq): ... print i, seq[i] ... 0 one 1 two 2 three >>> enumerate

  all:判斷 是否有bool值為fales的值? 只要有一個不是真就返回fales

 ?? any:判斷 是否有bool值為True的值? 只要有一個是真就返回True

 ?? zip:zip() 函數用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同 ? 通俗理解就是兩個元素相加得到相對應的列表中的元組集合

>>>a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) # 打包為元組的列表 [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素個數與最短的列表一致 [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 與 zip 相反,可理解為解壓,返回二維矩陣式 [(1, 2, 3), (4, 5, 6)]#zip # l = (12,3,4,5,6,7) # l2 = ('a','b','c','d') # l3 = [9,8,7] # ret = zip(l,l2,l3) # for i in ret: # print(i) zip

?匿名函數

lambda表達式應用

?

Python中的lambda表達式就是匿名函數,也就是沒有名字的函數。lambda表達式的語法非常簡單:

?

?

下圖是定義lambda表達式和定義一個普通函數的對比:

?

?

lambda表達式通常是配合其他的內置函數一起使用,以達到簡化代碼使代碼邏輯更清晰的目的。

?

注意:

?

使用lambda表達式并不能提高代碼的運行效率,它只能讓你的代碼看起來簡潔一些。

?

對于簡單的函數,也存在一種簡便的表示方式,即:lambda表達式

#普通函數
1 def func(a): 2 return a+1 3 print 'test1_func0:',func(1000)
4
#lambda表達式 5 func0 = lambda a:a+1 6 print 'test2_func0:',func0(1000)

上面這種方法,都實現了將1000+1的結果打印出來這個功能,但是用下面

lambda存在意義就是對簡單函數的簡潔表示。

說道lambda,這里再贈送一些可以給lambda加buff小伙伴:

1.map函數,我們使用map函數將會對列表中的所有元素進行操作。map有兩個參數(函數,列表),它會在內部遍歷列表中的每一個元素,執行傳遞過來的函數參數。在輸出到新列表中。

1 li = [11, 22, 33] 2 new_list = map(lambda a: a + 100, li)
輸出:[111, 122, 133]

當然,map還可以完成多個數組的相加:

1 li = [11, 22, 33] 2 sl = [1, 2, 3] 3 new_list = map(lambda a, b: a + b, li, sl) 4 print new_list
輸出:[12, 24, 36]

2.reduce函數,對于序列內所有元素進行累計操作:

1 lst = [11,22,33] 2 func2 = reduce(lambda arg1,arg2:arg1+arg2,lst) 3 print 'func2:',func2
輸出:func2: 66

3.filter函數,他可以根據條件對數據進行過濾:

1 li = [11, 22, 33] 2 new_list = filter(lambda arg: arg > 22, li)
3 print new_list
輸出:[33]

轉載于:https://www.cnblogs.com/zgd1234/p/7490590.html

總結

以上是生活随笔為你收集整理的Python全栈之路系列----之-----内置函数和匿名函数lamdba的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。