python语言day4 函数 生成器yield、next关键字 装饰器

一、 函数

        定义:

        def    info():

                print("执行info()函数")

        直接调用方法和封装一个函数:

                使用信息发送的功能为例

登录163网易免费邮-你的专业电子邮局 

1)开启POP3/SMTP服务,会得到对应的授权码,也就是登陆密码

2)找到对应SMTP服务器url

      

  1) 直接调用python内置方法:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

msg = MIMEText("月薪十万。","html","utf-8")
msg["Form"] = formataddr(["任可","m15571027178@163.com"])
msg["to"] = "1831120378@qq.com"
msg["Subject"] = "主题:我的目标"

server = smtplib.SMTP_SSL("smtp.163.com")
server.login("m15571027178@163.com","password")
server.sendmail("m15571027178@163.com","1831120378@qq.com",msg.as_string())
server.quit()

         

    2)封装成函数:     

def send_email(text,name,from_addr,to_addr,subject,password,url):
    msg = MIMEText(text,"html","utf-8")
    msg["Form"] = formataddr([name,from_addr])
    msg["to"] = to_addr
    msg["Subject"] = subject
    server = smtplib.SMTP_SSL(url)
    server.login(from_addr,password)
    server.sendmail(from_addr,to_addr,msg.as_string())
    server.quit()
    pass
         调用函数:

        函数参数几种形式:

 1)给参数设置默认值      

def do_something(a1,a2,a3=10):
    print(a1,a2,a3)
    pass
do_something(1,2,3)  #1 2 3
do_something(1,2)    #1 2 10

2)动态传入参数,参数前加*,args为元组

def do2(*args):
    print(args)
    pass
do2(1,2,3)   #(1, 2, 3)
do2(1,2)    #(1, 2)            

3)动态传入参数,参数前加**,kwargs为字典

def do3(**kwargs):
    print(kwargs)
    pass
do3(v1=1,v2=2,v3=3)   #  {'v1': 1, 'v2': 2, 'v3': 3}
do3(v1=1,v2=2)            #  {'v1': 1, 'v2': 2}

        

 函数的返回值:

        没有返回值时,默认的返回值为None

        返回值可以有多个,接收返回值会是一个元组类型

 

 二、作用域

        python以函数为界区分作用域

if 1 == 1:

        name   = "root"

print(name)  # root    name声明在函数外边

for i in range(10):

        pass  

print(i)          # 9         i声明在函数外边

def info():

        name = "root"

        print(name)

info()          #  运行时异常    name在函数内部

 

二、global关键字:

1)函数内部作用域找不到全局CITY变量名。

2)函数内部作用域与全局作用域输出

3)使用global关键字在函数内部操作全局变量

二、生成器 yield  next关键字:

    1) 保留函数对象a

  2)不保留函数对象,每次都重新调用一个新函数对象

                                        这样写就没有意义

        3)for循环调用生成器:

                这里两次输出结果都是0到9  


 

三、装饰器

         装饰器分为 切面函数 和 目标函数:

                给info()函数加上注解@aop,调用info()函数.

                则首先执行aop(func)函数,func就是执行的info()对象

                然后执行inner()函数,完成inner函数对象调用后返回info()对象返回值给aop()

                最后返回inner对象的返回值。   

 

 

 

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值