lambda

在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢?

1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。

2 python lambda它只是一个表达式,而def则是一个语句。

下面是python lambda的格式,看起来好精简:

lambda x: print(x)

下面举几个例子:

def su(func):

return func +2

for x in range(10):

ret = su(x)

#------------------------------------# 两个例子输出的结果是一样的[2,3,4,5,6,7,8,9,10,11]

g = lambda x:x+2

info = [g(x) for x in range(10)]

可以看出lambda确实很简单!

函数

曾多次提到函数,函数到底是什么东东,那我们就一探究竟。首先先说下 为什么要用函数?

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率。

定义函数:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

语法:

def functionname( parameters ):

function_suite

return [expression]

返回值

def foo(func):

return func + 1 #return,表示函数的返回值

python 函数返回值有两种形式:

返回一个值。

返回多个值。

默认返回None。

参数

必备参数 : 必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样

关键字参数:  关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

默认参数  :调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

不定长参数: 函数能处理比当初声明时更多的参数

#必备参数

def foo(func):

print(func)

foo('hello') #hello

#关键字参数

def foo(func):

print(func)

foo(func = 'hello') #hello

#缺省参数

def printinfo( name, age = 35 ):

print("Name: ", name)

print("Age ", age)

printinfo( age=50, name="miki" ) #Name: miki,Age 50

printinfo( name="miki" ) #Name: miki,Age 35

#不定长参数

def functionname(*args,**kwargs):

print('输出:%s'%args)

functionname(['ok',11,22,33]) #输出:['ok', 11, 22, 33]

序列化之pickle和json

pickle 和json 是序列化的两个模块。

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

pickle

首先,我们尝试把一个对象序列化并写入文件:

accounts = {

'k1':'hello',

'k2':'world'

}

f = open('dump.txt','wb')

f.write(pickle.dumps(accounts))

f.close()

pickle.dumps()把任意对象序列化成一个str,然后,就可以把这个str写入文件.或者用另一个方法pickle.dump()直接把对象序列化后写入一个文件:

f = open('dump.txt','wb')

pickle.dump(accounts,f)

f.close()

看看写入的dump.txt文件,一堆乱七八糟的内容,这些都是Python保存的对象内部信息。

当然有序列化也有反序列化,我们把dump.txt的一堆乱码给还原:

f = open('dump.txt','rb')

ret = pickle.loads(f.read())

f.close()

当然我们也可以直接用pickle.load()方法从dump.txt中直接反序列化出对象:

f = open('dump.txt','rb')

pickle.load(f)

f.close()

内容又变回来了。

ps:是python独有的序列化方式,比json功能强大任何类型的数据都可以被序列化和反序列化。

json

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

accounts = {

'k1':'hello',

'k2':'world'

}

f = open('dump.txt','w')

f.write(json.dumps(accounts))

f.close()

打开dump.txt 文件内容不在是乱码,并且是可读的

{"k1": "hello", "k2": "world"}

由此可见dumps()方法返回一个str。内容就是标准的JSON。类似的,dump()方法可以直接把JSON写入一个file-like Object。

f = open('dump.txt','w')

json.dump(accounts,f)

f.close()

要把JSON反序列化为Python对象,用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化:

f = open('dump.txt','r')

c = json.loads(f.read())

f.close()

有一点需要注意,就是反序列化得到的所有字符串对象默认都是unicode而不是str。由于JSON标准规定JSON编码是UTF-8,所以我们总是能正确地在Python的str或unicode与JSON的字符串之间转换。

importsmtplibfrom email.mime.text importMIMETextfrom email.utils importformataddr

msg= MIMEText('邮件内容', 'plain', 'utf-8')

msg['From'] = formataddr(["武沛齐",'wptawy@126.com'])

msg['To'] = formataddr(["走人",'424662508@qq.com'])

msg['Subject'] = "主题"server= smtplib.SMTP("smtp.126.com", 25)

server.login("wptawy@126.com", "邮箱密码")

server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string())

server.quit()

发邮件实例

python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化...相关推荐

  1. pandas使用apply函数:在dataframe数据行(row)上施加(apply)函数

    pandas使用apply函数:在dataframe数据行(row)上施加(apply)函数 目录 pandas使用apply函数:在dataframe数据行(row)上施加(apply)函数

  2. python封装函数、实现将任意的对象序列化到磁盘上_序列化(serialization)

    序列化是指将"结构化数据"转换成"可存储格式"的过程,逆向转换过程被称为逆序列化. 比如在 Python 中,结构化数据对象 dict 并不能直接存储到文件中: ...

  3. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  4. python中lambda函数_python中的lambda函数用法

    例1:传入多个参数的lambda函数 defsum(x,y):return x+y 用lambda来实现: p = lambda x,y:x+yprint(p(4,6)) 例2:传入一个参数的lamb ...

  5. Javascript的面对对象的理解 【上】(prototype,函数和对象等概念)

    首先先生明一下JavaScript面对对象和Java,c#这种高级语言的面对对象有很较大的不同. JavaScript在面对对象"继承"的时候,可以动态的修改修正.换句话说可以动态 ...

  6. 反序列化对象列表发生异常_Apache Thrift系列详解:序列化机制

    前言 Thrift支持二进制,压缩格式,以及json格式数据的序列化和反序列化.开发人员可以更加灵活的选择协议的具体形式.协议是可自由扩展的,新版本的协议,完全兼容老的版本! 正文 数据交换格式简介 ...

  7. 微信小程序 - 返回前一个页面时,执行前一个页面的函数方(wx.navigateBack 返回后,执行上一页的某个函数方法刷新数据)回前一个页面时,执行前一个页面的函数方法。支持改变 data 数据。

    前言 例如,您使用 wx.navigateTo 跳转到页面后,当用户点击左上角返回时,您需要执行上一页的函数来达到更新数据或改变数据. 比如 当付款完成后,从页面返回查看订单时,订单列表此时数据必须是 ...

  8. python 封装函数_python封装函数

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python函数教程函数本身其实就相当于一个集装箱,她负责把我们之前写的那些代码 ...

  9. 细说Python Lambda函数的用法,建议收藏!

    本文分享自华为云社区<从零开始学python | 什么是Lambda函数以及如何使用它们?>,原文作者:Yuchuan . 名称是用于引用或寻址任何实体的约定.我们周围的几乎所有事物都有名 ...

最新文章

  1. 【转】Vue.js 2.0 快速上手精华梳理
  2. (chap1 网络基础知识)地址
  3. 软件问题造成的经济损失案例_公司印章管理使用哪些行为会造成法律风险隐患...
  4. 使用amap-js引入高德地图AMap及其UI组件AMapUI
  5. C#中类的override和virtual
  6. linux adobe flash 安装,Ubuntu 12.10下为Firefox安装Adobe Flash Player
  7. 布丰投针实验 MATLAB仿真 以及报告
  8. gbk英文占几个字节
  9. 洛谷_P1007 独木桥_思维
  10. 83-MongoDB介绍
  11. linux如何测试IP和端口是否能访问
  12. 汽车管理软件批发,汽车管理软件哪个靠谱?
  13. 常用计算机字长,计算机基本单位——位、字节、字、字长
  14. 写给运维新手的十一条 Docker 守则,牢记!
  15. 汽车美容店会员开卡办理html,洗车店会员卡管理系统线下线上会员一体化?
  16. 【图像分割】Segment Anything(Meta AI)论文解读
  17. 函数Retrieve详解
  18. 【Python】找到含有指定关键词的PDF
  19. httpd的安装及HTML文件和cgi文件的测试
  20. 酶联免疫吸附试验(ELISA)的必备仪器

热门文章

  1. SAP本地化-银企直连
  2. 《他其实没那么喜欢你》经典台词(4)
  3. 计划策略-25-具有配置的订货型生产
  4. SAP Tax计算逻辑
  5. F4IF_INT_TABLE_VALUE_REQUEST如何返回多于一个列
  6. CL_GUI_PICTURE
  7. 连年亏损的平安健康,能否成为中国版“联合健康”?
  8. python基础笔记_python基础学习笔记(九)
  9. BUUCTF(misc)变异凯撒 --二
  10. php dropdownlist,遇到dropdownlist