zoukankan      html  css  js  c++  java
  • Python 函数之定义函数

    在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:

    然后,在缩进块中编写函数体,函数的返回值用return语句返回。

     1、定义一个函数

    def myfirst():
        print("Hello world!")
    
    
    myfirst()
    
    
    #输出结果
    Hello world!

     2、定义发送邮件的函数

    # 不接收用户指定邮箱的函数
    
    #!/usr/bin/env python
    # -*- conding:utf-8 -*-
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    def mail():
        msg = MIMEText('邮件内容', 'plain', 'utf-8')
        msg['From'] = formataddr(["evescn", '18111434862@163.com'])
        msg['To'] = formataddr(["gmkk", '519518995@qq.com'])
        msg['Subject'] = "主题"
    
        server = smtplib.SMTP("smtp.163.com", 25)
        server.login("18111434862@163.com", "XXXXXX")
        server.sendmail('18111434862@163.com', ['519518995@qq.com', ], msg.as_string())
        server.quit()
    
    mail()
    不接收用户指定邮箱
    # 用户可以指定邮箱的函数
    
    #!/usr/bin/env python
    # -*- conding:utf-8 -*-
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    
    def mail(mails):
        msg = MIMEText('邮件内容', 'plain', 'utf-8')
        msg['From'] = formataddr(["evescn", '18111434862@163.com'])
        msg['To'] = formataddr(["gmkk", mails])
        msg['Subject'] = "主题"
    
        server = smtplib.SMTP("smtp.163.com", 25)
        server.login("18111434862@163.com", "XXXXXX")
        server.sendmail('18111434862@163.com', [mails, ], msg.as_string())
        server.quit()
    
    
    mail('519518995@qq.com')
    用户可以指定邮箱

     3、函数的参数个数

    • 无参
    • 一个参数
    • 两个参数
    • ……
    • 动态参数

     4、举例

    # 无参函数
    def show():
        print('a')
        return [11, 22, ]
        print('b')
    
    
    show()
    
    # 输出结果
    a
    # 一个参数
    def show(arg):
        print(arg)
    
    n = [11, 22, 33, 44]
    show(n)
    
    # 输出结果
    [11, 22, 33, 44]
    # 两个参数
    def show(arg, xxx):
        print(arg, xxx)
    
    
    show('evescn', 'gmkk')
    
    # 输出结果
    evescn gmkk
    # 默认参数,必须写在实参之后
    def jiecheng(arg, n=2):
        print(arg ** n)
    
    
    jiecheng(2)
    jiecheng(2, 3)
    
    # 输出结果
    4
    8
    # 指定参数
    def show(a1,a2):
        print(a1,a2)
    
    
    show(123, 999)
    show(a2=123, a1=999)
    
    # 输出结果
    123 999
    999 123
    # 动态参数
    # 传入参数为列表  OK?
    def show(*arg):   # 把所有参数转为了元组
        print(arg, type(arg))
    
    show(1,2,3,4,5,6,7,8)
    
    # 输出结果
    (1, 2, 3, 4, 5, 6, 7, 8) <class 'tuple'>
    # 动态参数
    # 传入参数为字典  OK?
    def show(**arg):  # 把所有参数转为了字典
        print(arg,type(arg))
    
    show(n1=1,n2=2,n3=3,n4=4,)
    
    # 输出结果
    {'n4': 4, 'n3': 3, 'n1': 1, 'n2': 2} <class 'dict'>
    # 实参、一个*的动态参数、两个*的动态参数
    # 定义是先放变量,在放一个*的参数,在放**的参数
    def show(a1, *args, **kwargs):
        print(a1)
        print(args, type(args))
        print(kwargs, type(kwargs))
    
    show(11, 22, 33, 44, n1=99, n2=88, n3=77)
    
    # 输出结果
    11
    (22, 33, 44) <class 'tuple'>
    {'n3': 77, 'n1': 99, 'n2': 88} <class 'dict'>
    # 仔细对比2次的输出结果,对于创建的列表和字典,传给函数时需指定传递给那个变量
    def show(*args, **kwargs):
        print(args,type(args))
        print(kwargs, type(kwargs))
    
    a1=[11, 22, 33, 44]
    a2={'n1': 99, 'n2': 88, 'n3': 77}
    show(a1, a2)
    show(*a1, **a2)
    
    #输出结果
    ([11, 22, 33, 44], {'n3': 77, 'n2': 88, 'n1': 99}) <class 'tuple'>
    {} <class 'dict'>
    
    (11, 22, 33, 44) <class 'tuple'>
    {'n3': 77, 'n2': 88, 'n1': 99} <class 'dict'>
    # format函数,如何给farmat函数传递参数
    s1 = "{0} to {1}"
    l = ['evescn','gmkk']
    ret1 = s1.format(*l)
    ret2 = s1.format('evescn','gmkk')
    
    print(ret1)
    print(ret2)
    
    s1 = "{name} to {acter}"
    l = {'name':'evescn', 'acter':'gmkk'}
    ret1 = s1.format(**l)
    ret2 = s1.format(name='evescn', acter='gmkk')
    
    print(ret1)
    print(ret2)
    
    # 输出结果
    evescn to gmkk
    evescn to gmkk
    evescn to gmkk
    evescn to gmkk
  • 相关阅读:
    一个人的旅行 dij(),评测的时候有点惨
    CodeFroce Round 340 div2 E XOR and Favorite Number【莫队算法】
    [HihoCoder-1185] 连通性·三 【tarjan+缩点】
    2017百度之星初赛(A)1001,1005,1006解题报告
    HDU 5961&AOJ 821 传递
    pair
    优先队列 priority_queue
    ccf 201903-5
    memset 和 fill 的区别
    ccf 20190302
  • 原文地址:https://www.cnblogs.com/evescn/p/7552682.html
Copyright © 2011-2022 走看看