python 3 基础之自定义函数

 函数

1、什么是函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

用人话来说就是:需要某块代码多次,为了提高编写的效率以及代码的重用,把具有独立功能的代码段组织为一个小模块,需要时就可以直接调用,这就是函数

函数能提高应用的模块性,和代码的重复利用率

Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):
    ......    
    函数体
    ......
    return 返回值
  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。
  • 其中参数和返回值不是必须的

  参考来自:https://www.cnblogs.com/saneri/p/10055615.html

2、函数的定义和调用

自定义一个函数,求和

# 自定义一个函数求两个数 之和
def my_func(a,b):
    return a + b
# 调用函数
f = my_func(3,88)
# 打印结果
print(f)

运行结果:91

  • 每次调用函数时,函数会从头开始执行,当这个函数中的代码执行完毕,也意味着调用结束
  • 如果函数中执行到了return也会结束函数

3、函数的参数

  3.1、实参和形参

# 自定义一个函数求两个数 之和
def my_func(a,b):
    return a + b
# 调用函数
f = my_func(3,88)

  其中,上面代码,定义时小括号中的参数,用来接收参数用的,称为 “形参”;调用时小括号中的参数,用来传递给函数用的,称为 “实参”

  3.2、按调用函数时参数的书写方式 分为:位置参数与关键字参数

  位置参数

# 自定义一个函数求两个数 之和
def my_func(a,b):
    return a + b
# 调用函数时实参只输入一个
f = my_func(3)

  上面代码运行时会报错,因为定义函数时有两个形参,而调用时只输入了一个实参

  结论:使用位置参数调用函数 需要注意实参的位置,实参的位置和形参的位置要一一对应,少传一个实参会报错

  

  关键字参数

# 定义一个函数
def my_print(name, age, no):
    print("我的名字:%s" % name)
    print("我的年龄:%d" % age)
    print("学号:%s" % no)
# 使用关键字参数方式调用函数
my_print(age=23,name='洗涤',no=1)

  调用函数的时候使用的是函数的形参名;若关键字参数与位置参数混合使用,需要让位置参数在前 ,关键字参数再后,某个参数使用了关键字参数,后面的都要使用关键字参数

  3.3、默认参数(缺省参数)

  默认参数即定义时给形参设置一个默认值,后面调用的时候这个参数就可以不写,直接取默认值;也可以后面把一个新的值给到此参数,调用时不给值则默认

# 定义一个有默认参数的函数
def my_print(name, no, age=20):
    print("我的名字:%s" % name)
    print("我的年龄:%d" % age)
    print("学号:%s" % no)
# 调用函数
my_print('小明','007')

  运行结果:

      我的名字:小明
      我的年龄:20
      学号:007

  此时调用函数时可以不写默认的那个参数,定义有默认参数的时候,需要把默认参数写在最后

  3.4、可变参数(可以实现函数定义,以及函数调用时,参数个数不匹配的情况)

    待补充..................

4、函数的返回值(return+表达式)

  用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None

  4.1、单个返回值

# 定义一个求和函数
def smqh(a,b):
    re = a + b
    # 有一个返回值
    return re
d = smqh(23,2)
print(d)
# 如果有一个return+数值,称之为这个函数有返回值

  4.2、多个返回值

def my_func(score):
    if score < 0:
        print("您传入的分数有误!!!")
        # 函数的执行提前结束
        return
       #return后面没有值,什么都不返回,这是性能才考虑到的,因为分数小于0 ,后面的不需要再比较,无意义
    # 对分数进行判断
    if score >= 90:
        return ""
    elif score >= 80:
        return ""
    elif score >= 60:
        return ""
    elif score >= 0:
        return ""
    # 他不会执行 因为在前面已经执行了return
    print("测试")    

  return的作用:1、作为函数的返回值

          2、执行的函数提前结束(一个函数中可以有多个return语句,只要有一个return语句被执行到,这个函数就会结束了,因此后面的return没有什么用处)

5、函数的嵌套

# 写一个函数打印一条横线
def p_one_d():
    print('-'*20)

# 打印自定义函数的横线
def p_line(num):
    for i in range(num):
        p_one_d()
# 调用函数
p_line(3)

  运行结果:

      --------------------
      --------------------
      --------------------

  函数p_one_d()嵌套在函数p_line()里面,调用函数p_line()时,p_line()函数多次调用了p_one(),这就是函数的嵌套调用

6、函数的文档说明

  看文档说明需要用到python的内置函数help(),用来查看python函数的文档说明

  若自定义函数没有文档说明,使用help时默认会打印函数附近的注释

  其作用:1、可以在时间过了很久后 快速读懂自己的代码;2、便于工作的交接

  格式:help(函数名称)

def sumhe(num1,num2):
    '''
    这是求和的
    :param num1:数字1
    :param num2: 数字2
    :return: 返回两个数字相加
    '''
    return num1 + num2
help(sumhe)
================================================== 代码运行结果: sumhe(num1, num2) 这是求和的 :param num1:数字1 :param num2: 数字2 :
return: 返回两个数字相加

7、匿名函数

  在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.(匿名函数没有函数名)
  匿名函数用关键字lambda定义
  7.1、定义普通函数和定义lambda函数的方法和区别:
###########普通函数#############
# 定义一个普通求和函数
def suma(a,b):
    return a + b
print(suma(3,4))
###########lambda#############
f = lambda a,b: a+b
ret = f(3,2)
print(ret)

  lambda的意义就是为了简洁的表达函数

  解释:lambda a,b : a + b

  冒号左边的lambda 相当于函数的名字(),a,b就是函数的形参;冒号右边的内容就是函数的返回值

  匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果

  7.2、把函数当做参数传递

def sanf(a,b,c):
    print('a = %d' % a)
    print('b = %d' % b)
    print('result:%d' % c(a,b))#c是一个函数,当做参数来用
f = lambda a,b : a + b
sanf(1, 3, f)

  运行结果:

    a = 1
    b = 3
    result:4

原文地址:https://www.cnblogs.com/will-wu/p/13238047.html