# 函数的定义和调用
def test(x):
x += 1
return x
def test():
x = 3
x += 1
return x
# notes: 这里第二个test会覆盖第一个test函数的定义
print(test) # <function test at 0x10217d730>
print(type(test)) # <class 'function'>
# print(test(1)) # 这里会报错
print(test())
# 函数的作用?
"""
while True:
if cpu利用率 > 90%:
# 发送邮件
连接邮件服务器
发送邮件
关闭连接
if 内存利用率 > 90%:
# 发送邮件
连接邮件服务器
发送邮件
关闭连接
if 磁盘利用率 > 90%:
# 发送邮件
连接邮件服务器
发送邮件
关闭连接
=>
def 发送邮件():
# 发送邮件
连接邮件服务器
发送邮件
关闭连接
while True:
if cpu利用率 > 90%:
发送邮件()
if 内存利用率 > 90%:
发送邮件()
if 磁盘利用率 > 90%:
发送邮件()
1.代码重用
2.保持一致性,维护性
3.可扩展性
"""
# 函数返回值
def test01():
msg = "hello"
def test02():
msg = "hello"
return msg
def test03():
msg = "hello"
return 1,2,3,4,[5,6],(7,8)
print(test01()) # None None
print(test02()) # hello object
print(test03()) # (1, 2, 3, 4, [5, 6], (7, 8)) 放到一个元组里边 tuple
# 形参
# 形参变量只有在被调用时才分配内存单元,调用结束时,即可释放所分配的内容.所以只在函数内部有效.函数调用结束后返回主调用函数后就不能再使用形参变量.
def cal(x, y):
res = x ** y
return res
print(cal(2, 2))
a = 2
b = 3 # 实参
print(cal(a, b))
# 传参
def test(x, y, z):
print(x, y, z)
# test(1, 3) # 缺少一个报错
test(1, 2, 3) # 位置传参,按顺序一一对应,不可缺少
test(y=2, x=5, z=1) # 关键字传参,顺序灵活,不可缺少
# test(1, y=2, 3) # 报错
test(1, y=2, z=3) # 混合使用,位置参数必须在关键字参数的左边,而且有顺序
# 默认参数
def handle(x, type="mysql"):
print(x, type)
handle("hello")
handle("hello", type="sqlite")
handle("hello", "sqlite")
# ** 字典 * 列表
# 参数组 非固定长度的参数 *args
def test(x, *args):
print(x, args)
test(1, 2, 3, 4, 5) # (2, 3, 4, 5)
test(1) # ()
test(1, {"name":"alex"}) # 1 ({'name': 'alex'},)
test(1, ["x", "y", "z"]) # 1 (['x', 'y', 'z'],)
test(1, *["x", "y", "z"]) # notes!!!: 这里加个*表示,把列表循环一遍赋值给args. ('x', 'y', 'z')
test(1, *(1, 2, 3)) # (1, 2, 3)
test(1, *{"name":"value"}) # ('name',) 一个遍历,只能取出来key
# 关键字参数 **kwargs
def test(x, **kwargs):
print(x)
print(kwargs)
test(1, y=2, z=3) # {'z': 3, 'y': 2}
# *args, **kwargs
def test(x, *args, **kwargs):
print(x, args, kwargs)
test(1,1,2, 3, y=2, z=3) # 1 (1, 2, 3) {'y': 2, 'z': 3}
test(1, *[1, 2, 3], **{"name":"alex", "age": 18}) # 1 (1, 2, 3) {'age': 18, 'name': 'alex'}