函数:函数是一堆代码的集合
1.1如何使用函数:
- 使用函数,先定义再调用
#定义一个func函数
def func():
#代码块
print(123)
#调用func函数
func()
1.2 函数的应用场景:
(一):什么时候会用到函数呢?一般在项目开发中有会有两种应用场景:
- 有重复代码。
def send_email():
# 10行代码
print("欢迎使用计算机监控系统")
if CPU占用率 > 90%:
send_email()
if 硬盘使用率 > 99%:
send_email()
if 内存使用率 > 98%:
send_email()
...
- 代码太长。
def calculate_same_num_rule():
"""判断是否是豹子"""
pass
def calculate_same_color_rule():
"""判断是否是同花"""
pass
def calculate_straight_rule():
"""判断是否顺子"""
pass
def calculate_double_card_rule(poke_list):
"""判断是否对子"""
pass
def calculate_single_card_rule():
"""判断是否单牌"""
pass
# 1. 生成一副扑克牌
card_color_list = ["红桃", "黑桃", "方片", "梅花"]
card_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] # A
all_card_list = [[color, num] for color in card_color_list for num in card_nums]
# 2.洗牌
random.shuffle(all_card_list)
# 3.给玩家发牌
...
# 4.判断牌是:豹子?同花顺?顺子?对子?单点?
calculate_same_num_rule()
calculate_same_color_rule()
calculate_straight_rule()
注意:以前我们变成是按照业务逻辑从上到下逐步完成,称为:面向过程编程;现在学了函数之后,利用函数编程称为:函数式编程。
二.函数的参数
2.1 邮件发送
- 注册邮箱
- 基础配置
- 授权码
- SMTP服务器: SMTP服务器: smtp.126.com
- 代码发送邮件
如何发送代码
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
def msg(a):
# ### 1.邮件内容配置 ###
msg = MIMEText("约吗", 'html', 'utf-8')
msg['From'] = formataddr(["武沛齐", "yangliangran@126.com"])
msg['Subject'] = "180一晚"
# ### 2.发送邮件 ###
server = smtplib.SMTP_SSL("smtp.126.com")
server.login("yangliangran@126.com", "LAYEVIAPWQAVVDEP")
server.sendmail("yangliangran@126.com",a, msg.as_string())
server.quit()
msg('1183441364@qq.com')
2.2 函数的参数:
在定义一个函数的时候,如果在括号中添加变量,我们称之为函数的形式参数。
#定义了一个函数,里面有两个参数 a,b ,这个为函数的形式参数
def func(a,b):
num = a+b
return num
# 执行函数必须传入固定的参数(执行函数,传入的参数值叫做实参)
func(1,2)
关键字传参
def func(a,b):
print(a+b)
#按照这个格式去赋值是关键字传参
func(a=2,b=5)
位置传参
def func(a,b):
print(a+b)
# 按照这个格式传值就是位置传参
func(1,2)
总结
'''
1.形参
2.实参
3.位置传参
4.关键字传参
'''
def num(a,b,c):
print(a)
print(b)
print(c)
num(1,2,3)
#关键字传参必须在位置传参后面,如果第一个为关键字传参,那么后面都要是关键字传参
num(1,b=2,c=3)
默认参数:
# c=10为默认参数
def func(a,b,c=10):
print(a+b+c)
# 位置传参,第三个值可传,也可不传
func(1,2)
# 如果传上去就会改变原来的默认值
func(1,2,9) # 此时c的值是9
#位置传参和关键字传参,如果要使用关键字传参必须在前面
func(1,b=5)
# 改变默认的值
func(a=1,b=2,c=5)
动态参数:
- *args:
def func(*args):
return args
#最后生成一个元组
a = func(1,2,3,4)
print(a)#(1, 2, 3)
’‘’只能按位置传参‘’‘
**kwargs
def func(**kwargs):
return kwargs
b = func(name='吴呈祥',age = 19 )
print(b)#{'name': '吴呈祥', 'age': 19}
args,* kwargs
#最后生成的是一个元组,一个列表
def func(*args,**kwargs):
print(args,kwargs)
func(1,2,3,4,45,name = '吴呈祥', age = 19 ,height = 78)
#得到的值是(1, 2, 3, 4, 45) {'name': '吴呈祥', 'age': 19, 'height': 78}
三.函数的返回值
3.1 返回的值可以是任意类型:
def func():
return [1,2,34,(1,2,3,4),True,'你好傻逼',{'name':'吴呈祥',"age":18},{}]
s = func()
print(s)#[1,2,34,(1,2,3,4),True,'你好傻逼',{'name':'吴呈祥',"age":18},{}]
3.2 如果函数中没有return,name默认返回的值是None
def func():
print(123)
a = func()
print(a)#返回的值是None
3.3 如果函数遇到return,这个函数就会终止,并且返回值
def func():
print('1')
return '你好帅啊'
print('2')
s = func()
print(s)#结果为1,你好帅啊,当遇到return时,结束整个函数
总结:## 总结
-
如何定义一个函数?
-
函数名的规范。(同变量名规范)
-
规范
-
建议
def change_num(): pass
-
-
函数的注释,说明函数的作用。
def encrypt(origin): """ 用于数据加密和xxx """ pass
-
定义函数时,参数一般有以下情况(形式参数)
-
情景1
def func(a1,a2): pass
-
情景2:
def func(a1,a2=123): pass
-
情景2:
def func(*args,**kwargs): pass
-
-
函数的返回值,一般用于将函数执行的返回给调用者。
- 默认返回None
- 遇到return则函数执行完毕