#函数的概念:函数是实现某一个功能的一段组合代码
#作用:减少代码冗余,减少维护量;功能的封装,降低学习成本,提高开发速度;
#函数语法: def 函数名(): 一行或多行代码 ; 其中,一行或多行代码,称为函数的函数体,不对外展示
#函数定义后不会自动执行,需要先调用【函数名()】才会显示出来
#函数内定义的变量,在函数外是不可以使用的,需要重新定义
#例如1-100 的累加和可以写成一个函数(功能代码块)
def my_sum (): #define 定义一个函数:1-100的累加和,结果为5050
a=1
sum=0
while a<=100:
sum=sum+a
a+=1
print('结果为:%d'% sum)
my_sum() #定义后,调用【函数名()】出来,会显示:”结果为:5050“
#若想实现1-200的累加和,直接在my_sum函数体中修改,修改后再次调用即可
'''函数参数:形参(函数的参数);实参(调用函数时传递的数值)-------------------------------'''
def my_sum(a, m, sum): # 定义一个累加和的函数:即a——m的累加和,值为sum,都为形参
while a <= m:
sum = sum + a
a += 1
print('结果为:%d' % sum)
my_sum(1, 10, 0) #对应a, m, sum;即1-10的累加和,值为:55
'''位置参数与关键字参数----------------------------'''
my_sum(1,100,0) #【位置参数,根据形参位置传递参数,顺序必须与函数对应】即1—100的累加和,值为:5050
my_sum(m=100,sum=0,a=1) #【关键字参数,根据名称传递参数,顺序可以调换】
#例如:print('hello',end='#') hello为位置参数,end='#'为关键字参数
# 编写函数的时候如何确定函数应该有几个参数?
#函数是否需要参数/参数的个数,一般由需求和函数需要实现的功能决定
'''函数的返回值-----return语句--------------------------------------'''
def my_sum(start, end): #从start到end的累加和
a=start
sum=0
while a <= end:
sum = sum + a
a += 1
return sum # return表示将值sum返回给my_sum,若还是写print(sum)则代表函数没有返回值,调用时会显示为none
#将函数的返回结果保存到ret变量中,若不将返回值保存到ret变量,则表示忽略函数的返回值
#函数的返回值到底有没有?还是由需求/函数功能决定
ret = my_sum(1, 100, 0) # 此时my_sum的实参进行计算后,才会把返回值给到my_sum,从而进行下一步计算
final_result = ret + 100
print(final_result)
'''print函数与return语句的区别---------------------------------------'''
#print为一个函数,是一个功能;return是一个语句,类似if 、while等;
#print将数据直接输出到屏幕上,程序中没有返回值;return会将数据返回到程序中,给函数的调用者继续使用
#练习:编写一个函数,根据传入的运算符,进行相应的加减乘除运算
def my_cal(a,b,m):
if m=='+':
ret=a+b
elif m=='-':
ret=a-b
elif m=='*':
ret = a * b
elif m == '/':
ret = a / b
else:
print('输入数据有误!')
ret=None #【none表示无意义】因为每个分支都需要有返回值,所以输入错误值的时候也需要设置返回值!返回:输入数据有误!None
return ret #若某个分支缺少返回值的设置,会在该分支出现报错
ret=my_cal(2,3,'+')
print(ret)
'''-----------------------需要注意的细节----------------------------------------------------------'''
'''
1、参数问题
位置参数:从左到右依次根据形参对应
关键词参数:加上形参名;
位置参数可以和关键词参数共用,"必须保证 位置参数 在 关键词参数 之前"
2、return关键字:可以实现对输入参数的校验
当函数执行到return时,会马上终止函数执行
函数中可以出现多个return,但是有且只有一个return会执行
return后可以不跟值,return单独使用等价于return none
'''
#累加和例子中:start必须小于end,必须为数字【使用return对输入值进行校验】
def my_sum(start, end): # 从start到end的累加和
#1、判断两个输入值是否为数字
my_type=isinstance(start,int)
if not my_type: #start校验
print('start必须为数字类型')
return None #输入非数值类型,直接提示并结束执行
if not isinstance(end, int): #end校验
print('end必须为数字类型')
return #return后面可以不跟none,等价于return None
#2、判断输入值是否逻辑合理
if start>end:
print('start必须小于end')
return None
#3、保证输入合法后,进行正式运算
a = start
sum = 0
while a <= end:
sum = sum + a
a += 1
return sum
#校验上述函数结果和容错性
ret=my_sum(1,'&')
print(ret)
'''---------------函数的 缺省参数(默认参数)-------------------------------------------------------'''
#默认参数指的是:当函数调用中省略了实参时,自动使用的一个值
#语法与使用:1、在函数声明或定义时,直接对参数赋值,这就是默认参数
# 2、在函数调用时,省略 部分或全部 参数,这时可以用默认参数来代替
'''
带有 默认值的参数 一定要位于 参数列表 的最后面
如果某一个 位置形参 设置了 默认参数,那么该 位置之后 的 所有参数 都必须设置 默认参数
'''
def my_function(a,b=20,c=30): #三个形参,b、c的默认值分别为20和30
ret=a+b+c
return ret
ret=my_function(1,2,3) #三个数都给出了实参,结果为:1+2+3
ret=my_function(1,2) #省略c的实参,默认30,结果为:1+2+30
ret=my_function(1) #结果为:1+20+30
print(ret)
'''-------------函数的局部变量与全局变量-------------------------------------------------------'''
#局部变量:【局部作用域:作用域表示变量可以使用的范围】
# 在 函数内部定义 的变量称为局部变量,只在 函数内部 使用
def my_sum(a,b,c): #其中abc即是局部变量
#全局变量:【全局作用域】
# 在 函数外部定义 的变量,全局指的是该变量在 当前的python文件范围内 是可见的,
# 全局变量可以被 当前python文件中 所有的函数 直接使用
#定义全局变量
g_val=100
#可以在函数内部访问全局变量
def my_function1():
print(g_val) #结果为100
#若全局变量和局部变量名冲突,python解释器会怎么做?【就近原则】
# 会先在函数内部搜索total_val,找到后直接使用;找不到才会搜索全局变量
total_val=100 #定义全局变量
def my_function1():
total_val=200 #定义局部变量
print(total_val)
my_function1() #结果会显示?结果为:200;
'''-------------函数:函数文档。相当于函数的注释-------------------------------------------------------'''
#函数文档:用于解释说明函数的功能及使用方法
#查看函数文档:鼠标选中函数,windows系统按ctrl+q或者help()/mac按F1:即可查看函数的介绍和功能。
#新定义的函数可以手动添加函数文档
def my_function(a,b): #定义一个加法函数
"""这是我的函数文档""" #函数文档必须在函数下方使用此格式添加,才可显示
ret=a+b
return ret
my_function() #调用新定义的函数,ctrl+q查看函数文档
#单行函数文档和多行函数文档的写法
#单行函数文档:直接三引号,在函数下方第一行即可写入
"""函数完成了什么功能,返回了什么结果。"""
#多行函数文档:
def my_add(num1,num2):
"""第一行写函数的功能,例如:计算两个整数的和
:param int num1:加法运算的左操作符
:param int num2:加法运算的右操作符
:return 返回两个操作数相加的结果""" #param表示参数,int即参数类型,num1是参数名
ret=num1+num2
return ret
my_add()
'''-------------函数:单一职责原则【代码设计模式和规范】-------------------------------------------------------'''
#指一个函数只负责一个事情。single responsibility principle(RSP)
#定义:就一个函数而言,应该仅有一个引起它变化的原因。即一个函数应该是一组相关性很高的封装。
#一个类只负责一项职责,而不该同时承担多个职责
#例如:c函数负责两个不同的职责a1和a2,当a1的功能需求发生变化时,更改c函数
# 有可能使原本正常运行的a2发生错误,代码耦合性【关联性】太高,较复杂
#解决办法:把函数功能独立出来,满足单一职责原则。例如c1负责a1;c2负责a2.
python-函数
最新推荐文章于 2024-09-14 19:55:48 发布