python函數(6):內置函數和匿名函數
我們學了這麽多關於函數的知識基本都是自己定義自己使用,那麽我們之前用的一些函數並不是我們自己定義的比如說print(),len(),type()等等,它們是哪來的呢?
一、內置函數
由python內部定義好我們可以直接調用的函數就叫內部函數。python一共給我們68個內置函數:
abs() | dict() | help() | min() | setattr() |
all() | dir() | hex() | next() | slice() |
any() | divmod() | id() | object() | sorted() |
ascii() | enumerate() | input() | oct() | staticmethod() |
bin() | eval() | int() | open() | str() |
bool() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() | |
delattr() | hash() | memoryview() | set() |
上面就是內置函數的表,68個函數都在這兒了。我標註的紅色在前面經常出現大家比較熟悉。這個表的順序是按照首字母的排列順序來的,你會發現都混亂的堆在一起。比如,oct和bin和hex都是做進制換算的,但是卻被寫在了三個地方。。。這樣非常不利於大家歸納和學習。那我把這些函數分成了7大類。有助於大家總結和記憶。
內置函數思維導圖:
思維導圖詳細地址:https://www.processon.com/view/link/598042afe4b03afe8264824f
密碼:91K8
其中在七個分類中有詳細分類。中標註紅色為必須掌握,黃色為重點掌握,其他的作為了解。
二、內置函數部分詳解
1、作用域相關(locals,globals)
基於字典的形式獲取局部變量和全局變量
globals()——獲取全局變量的字典
locals()——獲取執行本方法所在命名空間內的局部變量的字典
def func(): x = 1 y = 2 print(locals()) #打印局部作用域中的名字 print(globals()) #打印全局作用域中的名字View Code
2、其他
s = input("請輸入內容 : ") #輸入的內容賦值給s變量 print(s) #輸入什麽打印什麽。數據類型是strinput輸入
def print(self, *args, sep=‘ ‘, end=‘\n‘, file=None): # known special case of print """ print(value, ..., sep=‘ ‘, end=‘\n‘, file=sys.stdout, flush=False) file: 默認是輸出到屏幕,如果設置為文件句柄,輸出到文件 sep: 打印多個值之間的分隔符,默認為空格 end: 每一次打印的結尾,默認為換行符 flush: 立即把內容輸出到流文件,不作緩存 """print輸出源碼剖析
import time import sys for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印多少個# per_str = ‘%s%% : %s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%% : %s‘%(i,‘*‘*char_num) print(per_str,end=‘‘, file=sys.stdout, flush=True)進度條(了解)
3、數據類型相關
num = 123 num1 = [1,2,3] num2 = "hello" type(num,num1,num2) #返回變量的數據類型type
4、內存相關
id(o) o是參數,返回一個變量的內存地址
hash(o) o是參數,返回一個可hash變量的哈希值,不可hash的變量被hash之後會報錯。
hash實例hash函數會根據一個內部的算法對當前可hash變量進行處理,返回一個int數字。
*每一次執行程序,內容相同的變量hash值在這一次執行過程中不會發生改變。
5、文件操作相關
open() 打開一個文件,返回一個文件操作符(文件句柄)
操作文件的模式有r,w,a,r+,w+,a+ 共6種,每一種方式都可以用二進制的形式操作(rb,wb,ab,rb+,wb+,ab+)
可以用encoding指定編碼
open() r,w,a,r+,w+,a+,(都可以+b) f = open(‘tmp‘,‘r+‘) print(f.read(3)) f.seek(5) f.write(‘ccccccc‘) #不要一邊寫一邊讀 f.close() r+打開文件 如果直接寫 從頭覆蓋 如果讀了再寫 追加 如果seek指定了光標的位置 就在從該位置開始覆蓋著寫open
6、模塊操作相關
import time #導入time模塊
7、幫助方法
在控制臺執行help()進入幫助模式。可以隨意輸入變量或者變量的類型。輸入q退出
或者直接執行help(o),o是參數,查看和變量o有關的操作。。。
8、和調用相關
def func():pass print(callable(func)) #參數是函數名,可調用,返回True print(callable(123)) #參數是數字,不可調用,返回False判斷是否調用
9、查看參數所屬類型的所有內置方法
dir() 默認查看全局空間內的屬性,也接受一個參數,查看這個參數內的方法或變量
print(dir(list)) #查看列表的內置方法 print(dir(int)) #查看整數的內置方法查看內置方法
10、str類型代碼的執行
print(123) "print(456)" #字符串 eval("print(456)") #字符串->轉換成python代碼去執行 exec("print(789)") num = 1+2+3 num = eval("1+2+3") #執行 print(num) num2 = exec("4+5+6") #執行,沒有返回值 print(num2)View Code
11、和數字相關
數字——數據類型相關:bool,int,float,complex
數字——進制轉換相關:bin,oct,hex
數字——數學運算:abs,divmod,min,max,sum,round,pow
#絕對值 print(abs(-12)) #返回(除,余) print(divmod(7,4)) #最小值 最大值 print(min(1,2,3,4)) print(max(1,2,3,4)) #求和 print(sum((1,2,3,4))) #print(sum(1,2,3,4))這個報錯因為不是序列 print(sum([1,2,3,4])) print(sum((1,2,3,4))) #小數精確 print(round(3.14159,1)) print(round(3.14159,2)) print(round(3.14159,3)) #冥運算 print(pow(2,4)) print(2**4)數學運算
12、和數據結構相關
序列——字符串相關的:str,format,bytes,bytesarry,memoryview,ord,chr,ascii,repr
#位置 print(format(‘test‘, ‘<20‘)) print(format(‘test‘, ‘>40‘)) print(format(‘test‘, ‘^40‘)) #字符編碼的轉換 s = "你好" sb = bytes(s,encoding=‘utf-8‘) print(sb) ret = sb.decode(‘utf-8‘) print(ret) #格式化輸出 print(repr(‘1234‘)) print(repr(1234))字符串相關
序列:reversed,slice
#倒敘 l = [1,2,3,4] print(list(reversed(l)))reversed
數據集合——字典和集合:dict,set,frozenset
數據集合:len,sorted,enumerate,all,any,zip,filter,map
filter和map
sorted方法
未完待續!!!
三、匿名函數
匿名函數 簡單的需要用函數去解決的問題 匿名函數的函數體 只有一行
也叫lambda表達式
#這段代碼 def calc(n): return n**n print(calc(10)) #換成匿名函數 calc = lambda n:n**n print(calc(10))匿名函數
#函數名 = lambda 參數 :返回值 #參數可以有多個,用逗號隔開 #匿名函數不管邏輯多復雜,只能寫一行,且邏輯執行結束後的內容就是返回值 #返回值和正常的函數一樣可以是任意數據類型匿名函數格式
小練習:
l = [10,11,8,12] # def func(x): # return x>10 # print(list(filter(func,l))) print(list(filter(lambda x:x>10,l))) l = [1,2,3,4] # def pow2(x): # return x*x # map(pow2,l) print(list(map(lambda x:x*x , l))) dic={‘k1‘:10,‘k2‘:100,‘k3‘:30} print(max(dic)) func = lambda k:dic[k] print(max(dic,key = func)) print(max(dic,key = lambda k:dic[k]))匿名函數練習
python函數(6):內置函數和匿名函數