# Python3 函数
# 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
# 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。
# 但你也可以自己创建函数,这被叫做用户自定义函数。
# 定义一个函数
# 你可以定义一个由自己想要功能的函数,以下是简单的规则:
# 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
# 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
# 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
# 函数内容以冒号 : 起始,并且缩进。
# return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

# python中函数定义方法:

def test(x):
    "The function definitions"
    x += 1
    return x

  


# def:定义函数的关键字
# test:函数名
# ():内可以定义形参,形参不占内存空间,运行完了就释放
# "":文档描述(非必要)
# x+=1:泛指代码块或程序处理逻辑
# return:定义返回值
# 函数运行:可以代参数也可以不带

def item(x):
    y = 2 * x + 1
    return y


print(item)
m = item(4)
print(m)


def item():  # 不带参数
    x = 5
    y = 2 * x + 1
    return y


print(item)
m = item()
print(m)

  



# def max(a,b):
# if a>b:
# return a
# else:
# return b
# a=4
# b=5
# print(max(a,b))
# # def hello():
# # print('hello world')
# # hello()

# def area(width,height):
# return width*height
#
# def print_welcome(name):
# print('welcome',name)
# print_welcome('runoob')
# w=4
# h=5
# print(width)
"""
# 写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警
while True:
if cpu利用率 > 90 %:
# 发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接

if 硬盘使用空间 > 90 %:
# 发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接

if 内存占用 > 80 %:
# 发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接

上面的代码实现了功能 ,每次报警都要重写一段发邮件的代码,
代码重复过多,一个劲的copy and paste不符合高端程序员的气质
如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍
其实很简单,只需要把重复的代码提取出来,放在一个公共的地方,起个名字,以后谁想用这段代码,就通过这个名字调用就行了,如下


def 发送邮件(内容)
# 发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接


while True:

if cpu利用率 > 90 %:
发送邮件('CPU报警')

if 硬盘使用空间 > 90 %:
发送邮件('硬盘报警')

if 内存占用 > 80 %:
发送邮件('内存报警')"""
# 总结使用函数的好处:
#
# 1.代码重用
# 2.保持一致性,易维护
# 3.可扩展性
#
# 函数和过程
# 过程定义:过程就是简单特殊没有返回值的函数
# 这么看来我们在讨论为何使用函数的的时候引入的函数,都没有返回值,没有返回值就是过程,没错,但是在python中有比较神奇的事情
def test01():
    msg = 'hello The little green frog'
    print(msg)
t1 = test01()
print(t1)


def test02():
    msg = 'hello WuDaLang'
    print(msg)
    return msg
t2 = test02()
print(t2)

def test03():
    msg = 'hello you are best'
    print(msg)
    return 1,2,5,8,'g',['alem',{'k1':'good'}],None
t3 = test03()
print(t3)

  


# print
# 'from test01 return is [%s]' % t1
# print
# 'from test02 return is [%s]' % t2
# 总结:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,
# 所以在python中即便是过程也可以算作函数。

def test01():
    pass

def test02():
    return 0

def test03():
    return 0,10,'hello',['alex','lb'],{'WuDaLang':'lb'}

t1=test01()
print(t1)
t2=test02()
print(t2)
t3=test03()
print(t3)

  


#
# print 'from test01 return is [%s]: ' %type(t1),t1
# print 'from test02 return is [%s]: ' %type(t2),t2
# print 'from test03 return is [%s]: ' %type(t3),t3
# 总结:
# 返回值数=0:返回None
# 返回值数=1:返回object
# 返回值数>1:返回tuple

# 函数参数
# 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
# 2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
# 3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
# 4.默认参数
# 5.参数组

def calc(x,y):
    res=x**y
    return res
res=calc(2,3)
print(res)
# 这段代码定义了一个名为calc的函数,该函数接收两个参数x和y,
# 并返回x的y次幂。之后,您调用了这个函数,传入了2和3作为参数,并打印了结果。

def calc(x,y):
    res=x**y
    return y
res=calc(2,3)
print(res)

def test(x,y,z):  #位置参数必须一一对应,不能多或少一个
    print(x)
    print(y)
    print(z)
test(1,2,3)

def test(x,y,z):
    print(x)
    print(y)
    print(z)
test(y=1,x=8,z=9)

def test(x,y,z):#位置参数必须在关键字参数左边
    print(x)
    print(y)
    print(z)
test(1,5,z=8)

def handle (x,type='myssel'):
    print(x)
    print(type)
handle('world')
handle('good',type='bad')
handle('bucuo','henhao')

  



#参数组:**字典  *列表
def test(x,*args):     #*列表,一个*是列表,不是args也行,建议用之
    print(x)
    print(args)
    print(args[1])
test(1,2,3,4,5,6)

def test(x,*args):     #*列表,当作一个整体传给他
    print(x)
    print(args)
test(1,2,[3,4,{'kv1','haodebu'}])

def test(x,*args):     #*列表,遍历一遍
    print(x)
    print(args)
test(1,2,*[3,4,{'kv1','haodebu'}])

def test(x,**kwargs):#字典
    print(x)
    print(kwargs)
test(1,y=2,z=3)

def test(x,*args,**kwargs):#先列表,后字典,能接收任意长度的参数
    print(x)
    print(args)
    print(kwargs)
test(1,11,23,1,5,7,y=2,z=3)

def test(x,*args,**kwargs):
    print(x)
    print(args,args[-1])
    print(kwargs,kwargs['y'])
test(1,11,23,1,5,7,y=2,z=3)

def test(x,*args,**kwargs):
    print(x)
    print(args,args[-1])
    print(kwargs,kwargs['y'])
test(1,*[3,4,5],**{'y':1})

  

posted on 2024-08-09 10:30  柳志军  阅读(20)  评论(0)    收藏  举报