day12面試
今日內容閉包
內容回顧app
函數能夠作變量
def func():
pass
v1 = func
v1()dom
v2 = [func,func,func] v2[1]()
函數能夠作參數
def func(arg):
v2 = arg()函數
def show(): pass v1 = func(show) # 注意返回值
Python中以函數爲做用域
# 第一題
for item in range(10):
pass
print(item)編碼
# 第二題 item = 10 def func(): for item in range(10): pass print(item) func() # 第三題 item = 10 def func(): item = 2 def inner(): print(item) for item in range(10): pass inner() func() # 第四題【新浪微博】 def func(): for num in range(10): pass v4 = [lambda :num+10,lambda :num+100,lambda :num+100,] result1 = v4[1]() result2 = v4[2]() print(result1,result2) func() # 第五題【新浪微博】 def func(): for num in range(10): pass v4 = [lambda :num+10,lambda :num+100,lambda :num+100,] result1 = v4[1]() num = 73 result2 = v4[2]() print(result1,result2) func()
lambda表達式(匿名函數)
v = [lambda x:x=100,]加密
補充code
僅有返回值:
v = "alex"
result = v.split('l')對象
v = {'k1':'v2'} result1 = v.get('k1') result2 = v.keys()
內容詳細索引
1.1 函數能夠作返回值
def func(): print(123) def bar(): return func v = bar() v() name = 'oldboy' def func(): print(name) def bar(): return func v = bar() v() def bar(): def inner(): print(123) return inner v = bar() v() name = 'oldboy' def bar(): name = 'alex' def inner(): print(name) return inner v = bar() v() name = 'oldboy' def bar(name): def inner(): print(name) return inner v1 = bar('alex') # { name=alex, inner } # 閉包,爲函數建立一塊區域(內部變量供本身使用),爲他之後執行提供數據。 v2 = bar('eric') # { name=eric, inner } v1() v2()
練習題
# 第一題 name = 'alex' def base(): print(name) def func(): name = 'eric' base() func() # {name=eric, } # 第二題 name = 'alex' def func(): name = 'eric' def base(): print(name) base() func() # 第三題 name = 'alex' def func(): name = 'eric' def base(): print(name) return base base = func() base()
注意:函數在什麼時候被誰建立?
面試題
info = [] def func(): print(item) for item in range(10): info.append(func) info[0]() info = [] def func(i): def inner(): print(i) return inner for item in range(10): info.append(func(item)) info[0]() info[1]() info[4]() 0 1 4
1.2 閉包
def func(name): def inner(): print(name) return inner v1 = func('alex') v1() v2 = func('eric') v2()
1.3 高階函數
注意:對函數進行賦值
1.4 總結
應用:
import random
def get_random_code(length=6): data = [] for i in range(length): v = random.randint(65,90) data.append(chr(v)) return ''.join(data) code = get_random_code() print(code) import random # 導入一個模塊 v = random.randint(起始,終止) # 獲得一個隨機數
filter
v1 = [11,22,33,'asd',44,'xf']
def func(x):#過濾條件,真假表示。 if type(x) == int: return True return False result = filter(func,v1) # [11,] print(list(result)) result = filter(lambda x: True if type(x) == int else False ,v1) print(list(result)) result = filter(lambda x: type(x) == int ,v1) print(list(result))
reduce
import functools
v1 = ['wo','hao','e']
def func(x,y): return x+y result = functools.reduce(func,v1) print(result) result = functools.reduce(lambda x,y:x+y,v1) print(result)
什麼是匿名函數?(lambda表達式)
def func():
pass
v = [lambda x:x+100,]
將指定的 「字符串」 進行加密。
import hashlib def get_md5(data): obj = hashlib.md5() obj.update(data.encode('utf-8')) result = obj.hexdigest() return result val = get_md5('123') print(val)
加鹽(防止MD5撞庫解密)
import hashlib def get_md5(data): obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))#加鹽 obj.update(data.encode('utf-8')) result = obj.hexdigest() return result val = get_md5('123') print(val)
應用:
import hashlib USER_LIST = [] def get_md5(data): obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8')) obj.update(data.encode('utf-8')) result = obj.hexdigest() return result def register(): print('**************用戶註冊**************') while True: user = input('請輸入用戶名:') if user == 'N': return pwd = input('請輸入密碼:') temp = {'username':user,'password':get_md5(pwd)} USER_LIST.append(temp) def login(): print('**************用戶登錄**************') user = input('請輸入用戶名:') pwd = input('請輸入密碼:') for item in USER_LIST: if item['username'] == user and item['password'] == get_md5(pwd): return True register() result = login() if result: print('登錄成功') else: print('登錄失敗')
贈送:密碼不顯示(只能在終端運行)
import getpass pwd = getpass.getpass('請輸入密碼:') if pwd == '123': print('輸入正確')
總結