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

 

 

 

 

posted @ 2016-05-13 14:08  Rambotien  阅读(257)  评论(0编辑  收藏  举报