lambda

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

  1. 1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。
  2. 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 函数返回值有两种形式:

  1. 返回一个值。
  2. 返回多个值。

默认返回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的strunicode与JSON的字符串之间转换。  

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr 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系列之lambda、函数、序列化的更多相关文章

  1. Python中的lambda函数

    今天在看书的时候,看到了这样的一条语句: if isinstance(value,int) or isinstance(value,float): split_function=lambda row: ...

  2. 【转】python中的lambda函数

    http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html lambda函数也叫匿名函数,即,函数没有具 ...

  3. Python中关于Lambda函数的使用总结

    lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...

  4. python中的lambda()函数

    语句:print map(lambda x:x ** 2,[1,2,3,4,5]) 其中lambda()函数在Python文档,文档中解释如下: lambda An anonymous inline ...

  5. Python中的lambda函数介绍

    Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lam ...

  6. python中的lambda函数用法

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

  7. python return 及lambda函数

    return有两个作用: 1.用来返回函数的运行结果,或者调用另外一个函数.比如max()函数 >>> def fun(a,b): #返回函数结果. return max(a,b) ...

  8. Python自学笔记-lambda函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 匿名函数 通过 ...

  9. Python系列之内置函数

    内置函数 一.数学运算类: abs(a):求绝对值如果参数是个复数则返回复数的模. a = abs(-1) print(a) >>>1 compilex([real[, imag]] ...

随机推荐

  1. java开发网易电话面试 一面总结

    晚上八点多自己在看视频的时候突然接到杭州来的一个电话,当时觉得很奇怪,突兀,接通之后被告知是杭州网易打来的,没有简单的自我介绍,没有多余的废话,直接入主题,吓得我心里怪紧张的,完全没有准备,但是也没有 ...

  2. jsp、freemarker、velocity区别详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt172 在java领域,表现层技术主要有三种:jsp.freemarker.v ...

  3. 性能测试中vmstat命令的常见使用。

    vmstat是Linux中常用的一个命令,尤其是在进行性能测试时,使用该命令,往往能辅助我们进行性能问题定位. 我们先看一下这个命令执行得到的数据. [root@xxx ~]# vmstat 1 10 ...

  4. 阿里云Maven地址

    GFW 呵呵呵 下载几个jar要几个小时.....伤透了 直接替换国内阿里云的maven镜像地址  速度嗖嗖嗖的.... 配置 修改maven根目录下的conf文件夹中的setting.xml文件,内 ...

  5. Swing-JComboBox用法-入门

    JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...

  6. [js高手之路]Node.js模板引擎教程-jade速学与实战2-流程控制,转义与非转义

    一.转义与非转义 jade模板文件代码: doctype html html head meta(charset='utf-8') title jade学习-by ghostwu body h3 转义 ...

  7. oracle客户端plsql设置字符集

    感谢一个新朋友的到来,我帮他的过程中有好些东西都不怎么想的起来了,所以从现在起我需要记录下每一点一滴, 因为我觉得写下来的东西才不会丢,而且欢迎以后的朋友到来. 使用plsql查数据的时候有时候中文会 ...

  8. Mybatis第三篇【动态SQL】

    动态SQL 何为动态SQL??回顾一下我们之前写的SSH项目中,有多条件查询的情况,如下图 我们当时刚开始做的时候,是需要在Controller中判断SQL是否已经有条件了,因为SQL语句需要拼接起来 ...

  9. Hibernate第九篇【组件映射、继承映射】

    前言 到目前位置,我们已经学习了一对一.一对多.多对一.多对多映射了-既然Hibernate是ORM实现的框架,它还提供了组件映射和继承映射..本博文主要讲解组件映射和继承映射 Java主要的类主要有 ...

  10. Hibernate第七篇【对象状态、一级缓存】

    前言 本博文主要讲解Hibernate的细节-->对象的状态和一级缓存- 对象状态 Hibernate中对象的状态: - 临时/瞬时状态 - 持久化状态 - 游离状态 学习Hibernate的对 ...