• Python函数式编程


    函数式编程最重要的是增强代码的重用性和可读性

    • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
    • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

    一、函数的定义和使用

      def  mail(参数):

           ...

        函数体

           ...

      #def:表示函数的关键字

      #mail:表示函数名,后面根据函数名调用函数

      #函数体:函数中进行一系列的逻辑运算,如发送邮件,计算出[11、22、338、2中的最大数等]

      #参数:为函数体提供数据

      #返回值:当函数执行完毕后,可以给调用者返回数据 

     1 def jisuan():
     2     n = 123
     3     n += 1
     4     print(n)
     5 jisuan()
     6 f = jisuan
     7 f()
     8 
     9 
    10 #result  
    11 #124
    12 #124

    发送邮件实例:

     1 import smtplib
     2 from email.mime.text import MIMEText
     3 from email.utils import formataddr
     4 
     5 def mail():
     6     ret = "邮件发送成功!"
     7     try:
     8         msg = MIMEText('邮件内容', 'plain', 'utf-8')
     9         msg['From'] = formataddr(["flash",'sqljtzy@126.com'])
    10         msg['To'] = formataddr(["走人",'1241424377@qq.com'])
    11         msg['Subject'] = "主题"
    12 
    13         server = smtplib.SMTP("smtp.126.com", 25)
    14         server.login("sqljtzy@126.com", "登录密码")
    15         server.sendmail('sqljtzy@126.com', ['1241424377@qq.com',], msg.as_string())
    16         server.quit()
    17     except Exception:
    18         ret = "邮件发送失败!"
    19     return ret
    20 
    21 print(mail())   #函数调用不需要print,但返回值要用print
    ## 另一种写法
    result = mail()
      print(result)

    二、函数参数

      1、无参数        

    def num():
        print(666)
    num()
    

      2、一个参数

    def num(arg):       #()中的参数相当于变量名
        print(arg)
    num(666)
    

      3、两个参数(多个参数)

    def show(arg,num):       #多个参数在()里写,以此类推...
        print(arg,num)
    show('kkk',666)
    

      4、默认参数 

    def show(arg,num=666):                   def show(arg,num=666):  
        print(arg,num)                           print(arg,num)
    show('kkk')                              show('kkk',888)
    
    ###result  "kkk  666"                     ###result  "kkk  888"
    #默认参数可以有多个,必须放在参数列表最后      默认参数可以被覆盖!

      5、指定参数

    def func(name, age = 18):
        print("%s:%s" %(name,age))
    # 指定参数
    func('flash', 19)
    # 使用默认参数
    func('alex')
    
    ###result
    flash:19
    alex:18
    

      6、动态参数

    def show(*args):                          #一个*是元祖()
        print(args,type(args))
    show(12, 345, 6789)

    ###result
    (12, 345, 6789) <class 'tuple'>

     

    def show(**args):                         #两个*是字典{}
        print(args,type(args))
    show(n1=12,aa=456,bb=789)
    
    ###result
    {'aa': 456, 'n1': 12, 'bb': 789} <class 'dict'>
    

     

    def show(*args,**kwargs):
        print(args,type(args))
        print(kwargs,type(kwargs))
    show(11,22,33,666,n1=12,flash='nb')
    
    ###result
    (11, 22, 33, 666) <class 'tuple'>
    {'flash': 'nb', 'n1': 12} <class 'dict'>
    

      

    def show(*args,**kwargs):
        print(args,type(args))
        print(kwargs,type(kwargs))
    #show(11,22,33,666,n1=12,flash='nb')
    l = [11,22,33,44]
    d = {'n1':12,'flash':'nb'}
    show(1,d)
    
    ###result
    (1, {'flash': 'nb', 'n1': 12}) <class 'tuple'>
    {} <class 'dict'>
    

      

    def show(*args,**kwargs):
        print(args,type(args))
        print(kwargs,type(kwargs))
    #show(11,22,33,666,n1=12,flash='nb')
    l = [11,22,33,44]
    d = {'n1':12,'flash':'nb'}
    show(*l,**d)
    
    
    ###result
    (11, 22, 33, 44) <class 'tuple'>
    {'n1': 12, 'flash': 'nb'} <class 'dict'>
    

     

      7、使用动态参数实现字符串格式化

     

    1、
     s1 = "{0} is {1}"
     result = s1.format('alex','sb')
     print(result)
    
    2、
     s1 = "{0} is {1}"
     l = ["alex","sb"]
     result = s1.format(*l)
     print(result)
    
    3、
    s1 = "{name} is {acter}"
    d = {'name':'alex','acter':'sb'}
    result = s1.format(**d)
    print(result)
    

      

    三、使用lambda表达式

      lambda表达式:简单函数的表达方式

      func = lambda a: a+1

      ret = func(99)

      print(ret)

    四、内置函数

       

    注:Python官方文档https://docs.python.org/3/library/functions.html#next

    参考:

      http://www.cnblogs.com/wupeiqi/articles/4943406.html

     

    运维因自动化而有趣!
  • 相关阅读:
    程序员都必读
    ia-64 vs x86-64
    Linux内核学习
    开源liscense对比
    列存储
    大数据科普
    [USACO1.5]数字三角形
    [USACO08FEB]酒店Hotel
    数的划分
    CodeForce 18D
  • 原文地址:https://www.cnblogs.com/Rambotien/p/5410888.html
Copyright © 2020-2023  润新知