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
原文地址:https://www.cnblogs.com/evescn/p/7552682.html