• day09-10


    5.1 发送邮件

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

    msg = MIMEText('正文内容', 'plain', 'utf-8')
    msg['From'] = formataddr(["发件人", '发件地址'])
    msg['To'] = formataddr(["收件人", '收件地址'])
    msg['Subject'] = "主题"

    server = smtplib.SMTP("发件方服务器", 25)
    server.login("发件邮箱", "密码")
    server.sendmail('发件邮箱', ['收件邮箱', ], msg.as_string())
    server.quit()

    5.2 函数的基本结构

    ··· 本质:将N行代码拿到别处并给他起个名字,以后通过名字就可以找到这段代码并执行。

    ··· 场景:

    • 代码重复执行。

    • 代码量特别多超过一屏,可以选择通过函数进行代码的分割。

      # 函数的定义
      def 函数名():
         # 函数内容
         pass

      # 函数的执行
      函数名()

       

    def func():
       pass

    func() # 注意:函数如果不被调用,则内部代码永远不会被执行。

    5.3 函数的参数

    ··· 函数的参数 优先位置参数,再关键字参数,实际参数可以是任意类型。

    ··· 任意类型 任意个数

    # 位置传参

    def func(a,b): # a为形式参数
       pass

    func(c,d) # b为实际参数

    # 关键字传参

    def func(a1, a2):
       print(a1, a2)

    func(a2=99,a1=2)

    # 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
    def func1(a1, a2, a3):
       print(a1, a2, a3)

    # func(1, 2, a3=9)
    # func(1, a2=2, a3=9)
    # func(a1=1, a2=2, a3=9)
    # func(a1=1, 2,3) # 错误

    # 默认参数

    def func(a1,a2,a3=9,a4=10):
       print(a1,a2,a3,a4)

    func(11,22)
    func(11,22,10)
    func(11,22,10,100)
    func(11,22,10,a4=100)
    func(11,22,a3=10,a4=100)
    func(11,a2=22,a3=10,a4=100)
    func(a1=11,a2=22,a3=10,a4=100)
    def send_email(to):
       template = "要给%s发送邮件" % (to,)
       print(template)


    user_input = input('请输入角色:')

    if user_input == '管理员':
       send_email('xxxx@qq.com')
    elif user_input == '业务员':
       send_email('xxxxo@qq.com')
    elif user_input == '老板':
       send_email('xoxox@qq.com')
    万能参数(打散)

    *args

    可以接受任意个数的位置参数,并将参数转换成元组。

    调用函数无 *

    def func(*args):
       print(args)

    func(1,2,3,4)
    调用函数有 *

    def func(*args):
       print(args)

    func(*(1,2,3,4))
    func(*[1,2,3,4])
    只能用位置传参

    def func(*args):
       print(args)

    # func(1)
    # func(1,2)
    func(1,2) # args=(1, 2)
    func((11,22,33,44,55)) # args=((11,22,33,44,55),)
    func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
    **kwargs

    可以接受任意个数的关键字参数,并将参数转换成字典。

    调用函数无 **


    def func(**kwargs):
       print(kwargs)


    func(k1=1,k2="alex")
    调用函数有**

    def func(**kwargs):
       print(kwargs)
    func(**{'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}
    只能用关键字传参

    综合应用:无敌 + 无敌 => 真无敌

    def func(*args,**kwargs):
       print(args,kwargs)

    # func(1,2,3,4,5,k1=2,k5=9,k19=999)
    func(*[1,2,3],k1=2,k5=9,k19=999)
    func(*[1,2,3],**{'k1':1,'k2':3})
    func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})


    # def func(a1,*args,a2):   # args 代指所有位置参数 *args 可以代表一个整体的元组作为参数
    #     print(a1,args,a2)
    # func(1,2,3,1,3,a2=5)


    # def func(a1,*args,a2=9):
    #     print(a1,args,a2)
    # func(1,2,3,1,3)





    # def func(**kwargs):   # kwargs 代表所有的关键字参数 **kwargs 可以代表一个整体的字典作为参数
    #     print(kwargs)
    # func(**{'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}
    #
    # func(k1=1,k2="alex") # kwargs={'k1': 1, 'k2': 'alex'}
    # func(k1={'k1':99,'k2':777},k2="alex") # kwargs={'k1': {'k1': 99, 'k2': 777}, 'k2': 'alex'}
    # func(**{'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}

     

    5.4 函数的返回值

    ··· 函数没有返回值,默认返回:None

    ··· 函数内部执行过程中遇到return,就终止。

    def func():
       return xxx

    v=func()  # v 即为 返回值 需要变量接收
    def func1():
       return "完成" # 函数每次执行到此,就返回;所以下面代码永远不执行。
       for i in range(10):
           print(i)
    func1()


    def func2():
       for i in range(10):
           print(i)
           return "完成"
       print(666)
    func2()
    def func():
       return (1,2,3)

    v = func()
    print(v)

    # 特殊:返回元组
    def func():
       return 5,8,"alex"

    v = func()
    print(v)

    5.5 函数的作用域

    python中:

    • py文件:全局作用域

    • 函数:局部作用域

      a = 1
      def s1():
        x1 = 666
        print(x1)
        print(a)
        print(b)

      b = 2
      print(a)
      s1()
      a = 88888
      def s2():
        print(a,b)
        s1()

      s2()
    • 总结:

      • 一个函数是一个作用域

        def func():
          x = 9
          print(x)
        func()
        print(x)
      • 作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去 "父级" -> "父级" -> 直到全局,全部么有就报错。注意:父级作用域中的值到底是什么?

        x = 10
        def func():
           x = 9
           print(x)

        func()

        子作用域中只能 找到父级中的值 ,默认无法重新为父级的变量进行赋值。(global/nonlocal可以强制做)

        # #####################
        name = 'oldboy'
        def func():
          name = 'alex' # 在自己作用域再创建一个这样的值。
          print(name)
        func()
        print(name)



        # #####################
        name = [1,2,43]
        def func():
          name.append(999)
          print(name)
        func()
        print(name)

        # ###################### 如果非要对全局的变量进行赋值
        # 示例一
        name = ["老男孩",'alex']
        def func():
          global name
          name = '我'
        func()
        print(name)
        # 示例一
        name = "老男孩"
        def func():
          name = 'alex'
          def inner():
              global name
              name = 999
          inner()
          print(name)
        func()
        print(name)


        name = "老男孩"
        def func():
          name = 'alex'
          def inner():
              global name
              name = 999
          inner()
          print(name)
        func()
        print(name)

        # ############################## nonlocal
        name = "老男孩"
        def func():
          name = 'alex'
          def inner():
              nonlocal name # 找到上一级的name
              name = 999
          inner()
          print(name)
        func()
        print(name)
      •  

  • 相关阅读:
    mysql 开启sql执行日志
    opcache.revalidate_freq 修改无效
    centos7 maven3.6.3安装
    CentOS7.5下基于FTP服务的局域网yum源搭建
    Centos7——防火墙(Firewall)开启常见端口命令
    Linux系统通过firewall限制或开放IP及端口
    CentOS7 FTP安装与配置
    centos7 搭建个人-企业私有云盘-seafile
    Centos6-7下杀毒软件clamav的安装和使用 (已成功测试)-----转发
    tomcat 安全规范(tomcat安全加固和规范1)--转发
  • 原文地址:https://www.cnblogs.com/usherwang/p/12829030.html
Copyright © 2020-2023  润新知