1. 程式人生 > >python函數(6):內置函數和匿名函數

python函數(6):內置函數和匿名函數

a20 *args -s 執行 code str 思維導圖 inpu 其他

我們學了這麽多關於函數的知識基本都是自己定義自己使用,那麽我們之前用的一些函數並不是我們自己定義的比如說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)  #輸入什麽打印什麽。數據類型是str
input輸入 技術分享
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):內置函數和匿名函數