2025年3月29日 星期六 甲辰(龙)年 月廿八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python精选10集(函数定义、形参、实参、返回值、函数类型)

时间:04-25来源:作者:点击数:38

一、函数

<1>、什么是函数?

在编程中,函数就像数学公式,解决特定的问题而开发存在的。同时可以重复使用,编程的视角里函数通常被设计成一个功能或行为。

  • 所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用
  • 函数的使用包含两个步骤:
    1. 定义函数 ——封装独立的功能
    2. 调用函数 —— 享受封装的成果
  • 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的重用

<2>、定义函数

语法:

  • def 函数名(形式参数):
  • 函数体

说明:

  1. def是英文define的缩写
  2. 函数名称应该能够表达函数封装代码的功能,方便后续的调用
  3. 函数名称的命名应该符合标识符的命名规则
    • 可以由字母下划线数字组成
    • 不能以数字开头
    • 不能与关键字重名

函数的第一行语句建议使用文档字符串描述函数的功能与参数。##get_number 获取数字

<3>、函数的调用

调用函数很简单的,通过函数名()即可完成对函数的调用

案例演示01

  • # 定义一个函数,能够完成打印信息的功能
  • def printInfo():
  • print '------------------------------------'
  • print ' 人生苦短,我用Python'
  • print '------------------------------------'
  • # 定义完函数后,函数是不会自动执行的,需要调用它才可以
  • printInfo()

案例演示02

  • def fun01(a):
  • a = 998
  • print(a) #998
  • b= 996
  • # 调用函数,会在内存中开辟空间(栈帧),存储函数内定义的变量.
  • fun01(b)
  • # 函数执行完毕后,栈帧立即释放.
  • print(b) # 996 函数内部的修改,不影响外部.
在这里插入图片描述

二、函数参数

<1>、定义带有参数的函数

  • # 定义a,b两个参数
  • def add2num(a, b):
  • c = a+b
  • print c
  • # 调用带有参数的函数时,需要在小括号中,传递数据
  • add2num(110, 22)
在这里插入图片描述

需求案例

  • 定义一个函数,完成前2个数完成加法运算,然后对第3个数,进行减法;然后调用这个函数
  • 使用def定义函数,要注意有3个参数
  • 调用的时候,这个函数定义时有几个参数,那么就需要传递几个参数
  • def calculation(a,b,c):
  • d = a+b-c
  • print(d)
  • calculation(3,6,3)

<2>、可变/不可变类型在传参时的区别

不可变类型参数 数值型(整数,浮点数,复数)、布尔值bool、None 空值、字符串str、元组tuple、固定集合frozenset
可变类型参数有 列表 list、字典 dict、集合 set

注意

  • 不可变类型的数据传参时,函数内部不会改变原数据的值。
  • 可变类型的数据传参时,函数内部可以改变原数据。

<3>、实参传递方式argument

1、位置传参

  • 定义:实参与形参的位置依次对应。

2、序列传参

  • 定义:实参用*将序列拆解后与形参的位置依次对应。

3、关键字传参

  • 定义:实参根据形参的名字进行对应。

4、字典关键字传参

  1. 定义:实参用**将字典拆解后与形参的名字进行对应。
  2. 作用:配合形参的缺省参数,可以使调用者随意传参。
案例演示
  • def fun01(a, b, c, d):
  • print(a)
  • print(b)
  • print(c)
  • print(d)
  • #1 位置传参:实参与形参的位置[依次对应]
  • fun01(1, 2, 3, 4)
  • # 1 2 3 4
  • #2 -- 序列传参: * 号将序列拆分后与形参位置依次对应
  • list01 = [1, 2, 3, 4]
  • fun01(*list01)
  • # 1 2 3 4
  • #3 关键字传参:实参根据形参的[名称进行对应]
  • fun01(b=1, c=2, d=3, a=4)
  • #4 1 2 3
  • fun01(1, 2, d=5, c=2) # 先位置传参,再关键字传参
  • #1 2 2 5
  • # fun01(d=5, c=2,1, 2,)# 先关键字传参,再位置传参(错误)
  • #4 -- 字典传参: ** 将字典拆分后与形参的名字进行对应
  • dict01 = {"d": 4, "c": 3, "a": 1, "b": 2}
  • fun01(**dict01)
  • # 1 2 3 4

<4>、形参定义方式parameter

1、缺省参数

  • 语法:
  • def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):
  • 函数体
  • 说明:
  • 缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数。
  • 缺省参数可以有0个或多个,甚至全部都有缺省参数。

2、位置形参

  • 语法:
  • def 函数名(形参名1, 形参名2, ...):
  • 函数体

3、星号元组形参

  • 语法:
  • def 函数名(*元组形参名):
  • 函数体
  • 作用:
    收集多余的位置传参。
  • 说明:
    一般命名为’args’
    形参列表中最多只能有一个

4、命名关键字形参

  • 语法:
  • def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):
  • 函数体
  • def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ...):
  • 函数体
  • 作用:
    强制实参使用关键字传参

5、双星号字典形参

  • 语法:
  • def 函数名(**字典形参名):
  • 函数体
  • 作用:
    收集多余的关键字传参
  • 说明:
    一般命名为’kwargs’
    形参列表中最多只能有一个
案例演示
  • # 形参
  • # -- 默认参数:如果不传递参数,可以使用默认值代替.
  • def fun02(a=0, b=0, c=0, d=0):
  • print(a)
  • print(b)
  • print(c)
  • print(d)
  • #1 关键字传参 + 默认参数: 可以选择性的为形参赋值
  • fun02(b=2) # 为参数b赋值
  • #0 2 0 0
  • fun02(2) # 为参数a赋值
  • #2 0 0 0
  • #2 位置形参
  • def fun01(a, b, c):
  • pass
  • #print(1,2,3)
  • #3 星号元组形参: * 让实参个数无限制
  • def fun02(*args):
  • print(args)
  • # 可以不传递参数
  • #fun02() #()
  • # 也可以传递多个参数
  • #fun02(1, 2) #(1, 2)
  • # 练习:定义函数,数值相加的函数.
  • def adds(*args):
  • sum = 0
  • for item in args:
  • sum += item
  • return sum
  • #print(adds(1, 2)) #3
  • #print(adds(1, 2, 3, 4, 5, 6, 7,8)) #36
  • # 位置形参(必填) + 星号元组形参(可选)
  • def fun03(a, b, *args):
  • print(a)
  • print(b)
  • print(args)
  • #fun03(1, 2) #1 2 ()
  • #fun03(1, 2, 3) #1 2 (3,)
  • #4 命名关键字形参:要求实参必须以关键字传递
  • def fun04(*, a, b):
  • print(a)
  • print(b)
  • fun04(b=1, a=2) #2 1
  • # a b 是命名关键字传参
  • def fun05(*args, a, b):
  • print(args)
  • print(a)
  • print(b)
  • #fun05(1, 2, 3, 4, 5, a=1, b=2)
  • #(1, 2, 3, 4, 5) 1 2
  • #5 双星号字典形参:实参可以传递多个关键字参数
  • def fun06(**kwargs):
  • print(kwargs)
  • fun06(a=1,b=2,c=3)
  • #{'a': 1, 'b': 2, 'c': 3}
  • #6 万能传参:位置传参无限制,关键字传参无限制
  • def fun07(*args,**kwargs):
  • pass
  • fun07()
  • def fun08(a,b,*args,c,d,**kwargs):
  • pass

小总结

  • ‘定义时小括号中的参数,用来接收参数用的,称为 “形参”
  • 调用时小括号中的参数,用来传递给函数用的,称为 “实参”
  • 参数自左至右的顺序:位置形参 --> 星号元组形参 --> 命名关键字形参 --> 双星号字典形参

三、函数返回值

  • 所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果
  • return后没有语句,相当于返回 None。
  • 函数体没有return,相当于返回None。

<1>、 带有返回值的函数

  • def add2num(a, b):
  • c = a+b
  • return c

或者

  • def add2num(a, b):
  • return a+b

<2>、保存函数的返回值

保存函数的返回值示例:

  • #定义函数
  • def add2num(a, b):
  • return a+b
  • #调用函数,顺便保存函数的返回值
  • result = add2num(100,98)
  • #因为result已经保存了add2num的返回值,所以接下来就可以使用了
  • print result # 结果 98

四、函数的四种类型

函数根据有没有参数,有没有返回值,可以相互组合,一共有4种

  • 无参数,无返回值
  • 无参数,有返回值
  • 有参数,无返回值
  • 有参数,有返回值

<1>、无参数,无返回值的函数

此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数

  • def printMenu():
  • print('--------------------------')
  • print(' 学生管理系统 ')
  • print('')
  • print(' 1. 录入学生信息')
  • print(' 2. 查找学生信息')
  • print(' 3. 删除学生信息')
  • print('--------------------------')

<2>、无参数,有返回值的函数

此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数

  • # 获取温度
  • def getTemperature():
  • #这里是获取温度的一些处理过程
  • #为了简单起见,先模拟返回一个数据
  • return 24
  • temperature = getTemperature()
  • print('当前的温度为:%d'%temperature) # 结果 24

<3>、有参数,无返回值的函数

此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数

  • def sum(a,b):
  • c = a+b
  • sum(1,2)

<4>、有参数,有返回值的函数

此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数

  • # 计算1~num的累积和
  • def calculateNum(num):
  • result = 0
  • i = 1
  • while i<=num:
  • result = result + i
  • i+=1
  • return result
  • result = calculateNum(100)
  • print('1~100的累积和为:%d'%result) # 1~100的累积和为: 5050

小总结

  • 函数根据有没有参数,有没有返回值可以相互组合
  • 定义函数时,是根据实际的功能需求来设计的,所以不同开发人员编写的函数类型各不相同

五、函数嵌套

  • 一个函数里面又调用另外一个函数,这就是函数嵌套调用
  • 如果函数test2中,调用了另外一个函数test1
    • 那么执行到调用test1函数时,会先把函数test1中的任务都执行完
    • 才会回到test2中调用函数test1的位置,继续执行后续的代码
  • def test1():
  • print("*" * 50)
  • print("test 1")
  • print("*" * 50)
  • def test2():
  • print("-" * 50)
  • print("test 2")
  • test1()
  • print("-" * 50)
  • test2()
案例需求

需求 1

  • 定义一个print_line函数能够打印*组成的一条分隔线
  • def print_line(char):
  • print("*" * 50)

需求 2

  • 定义一个函数能够打印由任意字符组成的分隔线
  • def print_line(char):
  • print(char * 50)

需求 3

  • 定义一个函数能够打印任意重复次数的分隔线
  • def print_line(char, times):
  • print(char * times)

需求 4

  • 定义一个函数能够打印5 行的分隔线,分隔线要求符合需求 3

提示:工作中针对需求的变化,应该冷静思考,不要轻易修改之前已经完成的,能够正常执行的函数

  • def print_line(char, times):
  • print(char * times)
  • def print_lines(char, times):
  • row = 0
  • while row < 5:
  • print_line(char, times)
  • row += 1

 

作业

作业1:

  • 定义函数,删除列表中所有偶数,返回删除的数量

作业2:

  • 定义函数,实现对列表的降序排列

作业3:

  • # 商品信息列表
  • shop_list_infos = [
  • {"cid": 1001, "name": "戴尔", "price": 4634},
  • {"cid": 1002, "name": "华硕", "price": 5743},
  • {"cid": 1003, "name": "苹果", "price": 10325},
  • {"cid": 1004, "name": "惠普", "price": 12000},
  • {"cid": 1005, "name": "小米", "price": 7786},
  • ]
  • # 订单列表
  • list_orders = [
  • {"cid": 1001, "count": 3},
  • {"cid": 1002, "count": 1},
  • {"cid": 1005, "count": 5},
  • ]
  • # 1. 定义函数,打印所有商品信息
  • # 2. 定义函数,查找商品单价小于1万的商品信息
  • # 3. 定义函数,计算订单总价格
  • # 4. 定义函数,根据购买数量对订单列表降序排列
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门