• Python系列之lambda、函数、序列化


    lambda函数:

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

    1. 1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。
    2. 2 python lambda它只是一个表达式,而def则是一个语句

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

    lambda x: print(x)

    下面举几个例子:

    1 def su(func):
    2     return func +2
    3 for x in range(10):
    4     ret = su(x)
    5 #------------------------------------# 两个例子输出的结果是一样的[2,3,4,5,6,7,8,9,10,11]
    6 g = lambda x:x+2
    7 info = [g(x) for x in range(10)]

    函数:

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

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

    定义函数:

    • 函数代码块以 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 是序列化的两个模块。

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

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

    pickle

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

    1 accounts = {
    2     'k1':'hello',
    3     'k2':'world'
    4 }
    5 f = open('dump.txt','wb')
    6 f.write(pickle.dumps(accounts))
    7 f.close()
    accounts = {
        'k1':'hello',
        'k2':'world'
    }
    = open('dump.txt','wb')
    f.write(pickle.dumps(accounts))
    f.close()

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

    1
    2
    3
    = open('dump.txt','wb')
    pickle.dump(accounts,f)
    f.close()

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

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

    1
    2
    3
    = open('dump.txt','rb')
    ret = pickle.loads(f.read())
    f.close()

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

    1
    2
    3
    = open('dump.txt','rb')
    pickle.load(f)
    f.close()

    son

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

    1
    2
    3
    4
    5
    6
    7
    8
    accounts = {
        'k1':'hello',
        'k2':'world'
    }
     
    = open('dump.txt','w')
    f.write(json.dumps(accounts))
    f.close()

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

    1
    {"k1""hello""k2""world"}

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

    1
    2
    3
    = open('dump.txt','w')
    json.dump(accounts,f)
    f.close()

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

    1
    2
    3
    = open('dump.txt','r')
    = json.loads(f.read())
    f.close()

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

     1 import smtplib
     2 from email.mime.text import MIMEText
     3 from email.utils import formataddr
     4   
     5   
     6 msg = MIMEText('邮件内容', 'plain', 'utf-8')
     7 msg['From'] = formataddr(["武沛齐",'wptawy@126.com'])
     8 msg['To'] = formataddr(["走人",'424662508@qq.com'])
     9 msg['Subject'] = "主题"
    10   
    11 server = smtplib.SMTP("smtp.126.com", 25)
    12 server.login("wptawy@126.com", "邮箱密码")
    13 server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string())
    14 server.quit()
    15 
    16 发邮件实例
  • 相关阅读:
    关于SQLite
    Solr开发文档
    Using Fiddler with IIS
    SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison
    Git资料
    VS2010版快捷键
    IE9子iframe父iframe cookie设置诡异问题
    美国的企业家宣言
    互联网程序编写原则
    分析牛人js版删除代码注释(状态机机制)
  • 原文地址:https://www.cnblogs.com/my-blogs-for-everone/p/7766455.html
Copyright © 2020-2023  润新知