python-函数


 #函数的概念:函数是实现某一个功能的一段组合代码
 #作用:减少代码冗余,减少维护量;功能的封装,降低学习成本,提高开发速度;
 #函数语法:  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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值