python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数
跟光磊學(xué)Python開發(fā)-匿名函數(shù)函數(shù)和高階函數(shù)
跟光磊學(xué)Python開發(fā)-匿名函數(shù)函數(shù)和高階函數(shù)跟光磊學(xué)Python開發(fā)
匿名函數(shù)
匿名函數(shù)就是函數(shù)定義時沒有名字的函數(shù),也稱為匿名表達(dá)式。
普通函數(shù)的定義方式如下
def 函數(shù)名(參數(shù)列表):
函數(shù)體
匿名函數(shù)的定義方式如下
lambda [形參1][形參2]:[單行表達(dá)式]或[函數(shù)調(diào)用]
lambda定義和普通函數(shù)的區(qū)別
lambda沒有函數(shù)名
lambda參數(shù)列表沒有括號
lambda函數(shù)體中只能實現(xiàn)簡單的表達(dá)式或則函數(shù)調(diào)用
lambda函數(shù)不能使用return,if,while,for-in
lambda函數(shù)體可以使用if實現(xiàn)的三目運算符
一般情況下因為lambda的局限性,使得它不能實現(xiàn)復(fù)雜的功能,只能實現(xiàn)一些簡單功能。在使用時一般會實現(xiàn)一些簡單的一次性使用的場景。
在Python的世界里一切皆對象,函數(shù)、文件等等都是對象,每個對象都有對應(yīng)的內(nèi)存地址(即引用),通過引用找到該對象并使用它。
函數(shù)作為參數(shù)賦值給變量,通過賦值的變量調(diào)用函數(shù)
"""
函數(shù)名作為參數(shù)
函數(shù)名也是可以參與賦值
@author tony 18601767221@163.com
@version 2021-02-06 09:43:44
@since python3.9.1
"""
# 普通函數(shù)的定義和調(diào)用
def display():
print("Hello Python")
def show_info():
print("跟光磊學(xué)Python開發(fā)")
display()
# 將一個函數(shù)的引用display賦值給一個變量func
func = display
# 打印函數(shù)的引用地址
# func = function display at 0x7fbff00e7040
print("func = ", func)
# 通過func變量 調(diào)用func()函數(shù)
func()
def call_func(func):
"""
函數(shù)地址作為參數(shù)實現(xiàn)在一個函數(shù)調(diào)用另外一個函數(shù)的函數(shù)
:param func:
:return:
"""
func()
call_func(func)
call_func(show_info)
程序運行結(jié)果
匿名函數(shù)的定義、使用和注意事項
"""
匿名函數(shù)的定義、使用和注意事項
@author tony 18601767221@163.com
@version 2021-02-06 09:43:44
@since python3.9.1
"""
# 定義一個匿名函數(shù) 返回1+1的結(jié)果給函數(shù)變量func
func = lambda: 1 + 1
print(func)
print("1加1的結(jié)果是", func())
# 定義一個帶參數(shù)的匿名函數(shù),返回參數(shù)的10次方
func = lambda x: x ** 10
print("2的10次方是", func(2))
# 匿名函數(shù)的注意事項
# lambda默認(rèn)返回計算結(jié)果,不需要return返回,如果加了return反而會報錯 無效的語法
# func = lambda x, y: return x + y
func = lambda x, y: x + y
print("兩個整數(shù)的和是", func(10, 20))
# 匿名函數(shù)不能使用循環(huán) 無效的語法
# func =lambda x,y:for i in range(x,y):print(i)
# func=lambda x:while x100:print(x)
# 匿名函數(shù)不能使用if的三種格式
# func= lambda x:if x10:print("參數(shù)小于10")
# 匿名函數(shù)使用if實現(xiàn)的三目運算符
func = lambda left, right: left if left right else right
print("兩個整數(shù)的最大值是", func(10, 20))
高階函數(shù)-map
map會根據(jù)將提供的函數(shù)對指定的序列做映射,第一個參數(shù)function以參數(shù)序列中的每個元素調(diào)用function函數(shù),返回包含每次function函數(shù)返回值的新列表
def square(x):
"""
求平方,該函數(shù)作為map()函數(shù)的第一個參數(shù)
因為map函數(shù)需要這個函數(shù)計算每個元素的值
所以該函數(shù)有且必須只能有一個參數(shù)
:param x:
:return:
"""
return x ** 2
# 普通函數(shù)作為map函數(shù)的參數(shù)參數(shù)
# square作為引用賦值給map()函數(shù)的形參
# result = map(square, int_list)
# lambda匿名函數(shù)作為map函數(shù)的參數(shù)
result = map(lambda x: x ** 2, int_list)
print("map函數(shù)的返回值類型", type(result))
for i in result:
print(i)
程序運行結(jié)果
自定義實現(xiàn)map函數(shù)
def custom_map(func, origin_list):
"""
自定義實現(xiàn)map函數(shù)
:param func: 函數(shù)
:param origin_list: 列表
:return: 列表
"""
# 定義一個列表作為返回參數(shù)
new_list = []
# 遍歷參數(shù)列表
for i in origin_list:
# 將列表的元素傳遞給函數(shù)執(zhí)行后將返回結(jié)果添加到新列表中
new_list.append(func(i))
# 返回新列表
return new_list
使用自定義實現(xiàn)map函數(shù)
result = custom_map(lambda x: x ** 2, int_list)
print("custom_map函數(shù)的返回值類型", type(result))
for i in result:
print(i)
程序運行結(jié)果
高階函數(shù)-reduce
reduce()函數(shù)會對參數(shù)序列中的元素進(jìn)行累計操作,例如累加求和,求階乘,統(tǒng)計數(shù)量,字符串連接等。
reduce()函數(shù)在functools模塊中,在使用前需要使用import functools導(dǎo)入該模塊。
使用reduce()分別結(jié)合普通函數(shù)和匿名函數(shù)實現(xiàn)累加求和
"""
reduce()函數(shù)的使用
@author tony 18601767221@163.com
@version 2021-02-06 10:55:17
@since python3.9.1
"""
import functools
int_list = [1, 2, 3, 4, 5]
def custom_sum(left, right):
"""
返回兩個參數(shù)的和
:param left:
:param right:
:return:
"""
return left + right
result = functools.reduce(custom_sum, int_list)
print("使用普通函數(shù) result的類型是", type(result))
print("使用普通函數(shù) 累加求和的結(jié)果是 ", result)
result = functools.reduce((lambda value, element: value + element), int_list)
print("使用lambda匿名函數(shù) result的類型是", type(result))
print("使用lambda匿名函數(shù) 累加求和的結(jié)果是 ", result)
程序運行結(jié)果
使用reduce()函數(shù)結(jié)合匿名函數(shù)實現(xiàn)字符串拼接
"""
使用reduce()實現(xiàn)字符串拼接,并轉(zhuǎn)換為大寫
@author tony 18601767221@163.com
@version 2021-02-06 11:22:40
@since python3.9.1
"""
import functools
str_list = ["h", "e", "l", "l", "o"]
result = functools.reduce(lambda s1, s2: str(s1 + s2).upper(), str_list)
print("result的類型是",type(result))
print("字符串拼接的結(jié)果是",result)
程序運行結(jié)果
使用reduce()函數(shù)結(jié)合匿名函數(shù)實現(xiàn)階乘運算
"""
使用reduce求階乘
@author tony 18601767221@163.com
@version 2021-02-06 11:27:39
@since python3.9.1
"""
import functools
int_list = [1, 2, 3, 4, 5]
result = functools.reduce(lambda n1, n2: n1 * n2, int_list)
print("階乘的結(jié)果是", result)
程序運行結(jié)果
高階函數(shù)-filter
filter函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回一個filter對象,如果要轉(zhuǎn)換成列表,可以使用list()方法轉(zhuǎn)換。
該函數(shù)需要兩個參數(shù),一個為函數(shù),第二個為序列,序列的每個元素作為參數(shù)傳遞給函數(shù)進(jìn)行判斷,然后返回True或者False,最后將返回True的元素放到新列表中。
"""
filter()函數(shù)的使用
@author tony 18601767221@163.com
@version 2021-02-06 11:35:47
@since python3.9.1
"""
int_list = [i for i in range(1, 10)]
# 使用filer函數(shù)結(jié)合匿名函數(shù)實現(xiàn)奇數(shù)過濾
result = list(filter(lambda x: x % 2 == 0, int_list))
print("int_list過濾奇數(shù)后的結(jié)果是",result)
程序運行結(jié)果
使用filer()過濾列表中的數(shù)字字符串
"""
使用filer()過濾列表中的數(shù)字字符串
@author tony 18601767221@163.com
@version 2021-02-06 11:44:38
@since python3.9.1
"""
str_list = ["123", "456", "python", "go", "java"]
result = filter(lambda s: s.isdigit(), str_list)
print("str_list過濾列表匯總的數(shù)字字符串的結(jié)果是",list(result))
程序運行結(jié)果
列表排序
列表的sort()方法只支持基本類型的排序,例如整數(shù)的排序,默認(rèn)順序升序
"""
sort()函數(shù)與lambda
@author tony 18601767221@163.com
@version 2021-02-06 11:48:41
@since python3.9.1
"""
int_list = [1, 2, 4, 5, 7, 8, 9, 6, 3]
# 簡單排序
print("排序之前int_list = ", int_list)
int_list.sort()
print("排序之后int_list = ", int_list)
程序運行結(jié)果
如果想要完成復(fù)雜類型的數(shù)據(jù)排序,例如字典類型的數(shù)據(jù)排序,可以通過參數(shù)key結(jié)合lamda函數(shù)來指定排序規(guī)則進(jìn)行排序
product_list = [{"id": 1, "name": "iphone12 pro max", "price": 12999.99},
{"id": 3, "name": "華為mate40pro max", "price": 8999.99},
{"id": 2, "name": "小米11 pro", "price": 6999.99}]
print("排序之前product_list= ", product_list)
# sort()方法不能對字典進(jìn)行排序
# TypeError: '' not supported between instances of 'dict' and 'dict'
# product_list.sort()
print("初始化產(chǎn)品列表 product_list= ", product_list)
# 需求 按照ID的升序排序
product_list.sort(key=lambda d: d["id"])
print("按照ID的升序排序之后product_list= ", product_list)
product_list.sort(key=lambda d: d["price"], reverse=True)
print("按照價格降序排序之后product_list= ", product_list)
程序運行結(jié)果
跟光磊學(xué)Python開發(fā)-匿名函數(shù)函數(shù)和高階函數(shù) 相關(guān)文章
python將兩個txt按列合并
要點: 使用 with 打開文件。不需要關(guān)閉文件。 使用 zip 函數(shù)組合兩個列表。 不帶zip的代碼,帶內(nèi)聯(lián)注釋: combine =[]with open("x.txt") as xh: with open('y.txt') as yh: with open("z.txt","w") as zh: #Read first file xlines = xh.readlines() #Read
Python Basics with numpy (optional)
Python Basics with Numpy (optional assignment) Welcome to your first assignment. This exercise gives you a brief introduction to Python. Even if you've used Python before, this will help familiarize you with functions we'll need. Instructi
python用pd.read_csv()方法來讀取csv文件
import pandas as pd print("************取消第一行作為表頭*************")data2 = pd.read_csv('rating.csv',header=None)print("************為各個字段取名**************")data3 = pd.read_csv('rating.csv',names=['user_id','book_id','rating'])pri
python3存圖片到數(shù)據(jù)庫中并查詢(附送一張張查看圖片)
import sys import pymysql from PIL import Image import os, time path = "./" # 打開圖片存放到內(nèi)存中 fp = open("./2.png", 'rb') img = fp.read() fp.close() database = pymysql.connect(host="172.16.22.132", port=63306, user="root", passwd="sa",
pycharm vs vscode項目調(diào)試對比
python的兩大IDE開發(fā)利器,pycharm 和 vscode,二者各有優(yōu)劣吧。 pycharm vs vscode簡單對比 pycharm優(yōu)點: python開發(fā)利器,專為python設(shè)計 內(nèi)置功能豐富,比如可以在IDE中直接查看sql數(shù)據(jù)庫,前提是有插件:DB BROWER 查看類、函數(shù)定義方便,只需簡單通過
Python之文件及文件系統(tǒng)
Python之文件及文件系統(tǒng) open() 方法: Python open() 方法用于打開一個文件,并返回文件對象,在對文件進(jìn)行處理過程都需要使用到這個函數(shù),如果該文件無法被打開,會拋出 OSError。 注意: 使用 open() 方法一定要保證關(guān)閉文件對象,即調(diào)用 close() 方法。
python pandas 交叉表, 透視表
透視表 pivot table 透視表(pivot table)是常見的數(shù)據(jù)匯總工具,它根據(jù)一個或多個鍵對數(shù)據(jù)進(jìn)行聚合,根據(jù)行和列上的分組鍵將數(shù)據(jù)分配到矩形區(qū)域中。 pandas中使用pivot_table方法創(chuàng)建透視表, pd.pivot_table(data,values=None,index=None,columns=None,ag
css 選擇器
在玩 python爬蟲 時, 我們經(jīng)常要定位標(biāo)簽, 獲取屬性 在這個過程中, 靠 css選擇器 是一個十分有利的方法, 不僅簡潔而且邊界 就個人看來, 在正則 , xpath , 和 css選擇器 中, 如果 css選擇器 能用, 我肯定會選 css選擇器 我們先來看這個 html: !DOCTYPE htmlht
Python-django-from表單組件
from django.forms import Formfrom django.forms import fieldsfrom django.forms import widgetsfrom django.forms.models import ModelChoiceFieldfrom django.core.validators import RegexValidatorfrom django.core.validators import ValidationError
Security and Cryptography in Python - Frequency Analysis
Security and Cryptography in Python - Frequency Analysis Frequency Analysis cipher = """lrvmnir bpr sumvbwvr jx bpr lmiwv yjeryrkbi jx qmbm wibpr xjvni mkd ymibrut jx irhx wi bpr riirkvr jxymbinlmtmipw utn qmumbr dj w ipmhh but bj rhnvwdmb
總結(jié)
以上是生活随笔為你收集整理的python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java二维数组高纬低纬_2018-05
- 下一篇: java 发送cookie_Java如何