在编程中,函数就像数学公式,解决特定的问题而开发存在的。同时可以重复使用,编程的视角里函数通常被设计成一个功能或行为。
- def 函数名(形式参数):
- 函数体
-
函数的第一行语句建议使用文档字符串描述函数的功能与参数。##get_number 获取数字
调用函数很简单的,通过函数名()即可完成对函数的调用
- # 定义一个函数,能够完成打印信息的功能
- def printInfo():
- print '------------------------------------'
- print ' 人生苦短,我用Python'
- print '------------------------------------'
- # 定义完函数后,函数是不会自动执行的,需要调用它才可以
- printInfo()
-
- def fun01(a):
- a = 998
- print(a) #998
- b= 996
- # 调用函数,会在内存中开辟空间(栈帧),存储函数内定义的变量.
- fun01(b)
- # 函数执行完毕后,栈帧立即释放.
- print(b) # 996 函数内部的修改,不影响外部.
-
-
- # 定义a,b两个参数
- def add2num(a, b):
- c = a+b
- print c
- # 调用带有参数的函数时,需要在小括号中,传递数据
- add2num(110, 22)
-
- def calculation(a,b,c):
- d = a+b-c
- print(d)
-
- calculation(3,6,3)
-
不可变类型参数 | 数值型(整数,浮点数,复数)、布尔值bool、None 空值、字符串str、元组tuple、固定集合frozenset |
---|---|
可变类型参数有 | 列表 list、字典 dict、集合 set |
注意
- 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
-
- def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):
-
- 函数体
-
- def 函数名(形参名1, 形参名2, ...):
-
- 函数体
-
- def 函数名(*元组形参名):
-
- 函数体
-
- def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):
-
- 函数体
-
- def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ...):
- 函数体
-
- def 函数名(**字典形参名):
-
- 函数体
-
- # 形参
- # -- 默认参数:如果不传递参数,可以使用默认值代替.
- 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
-
- def add2num(a, b):
- c = a+b
- return c
-
或者
- def add2num(a, b):
- return a+b
-
保存函数的返回值示例:
- #定义函数
- def add2num(a, b):
- return a+b
-
- #调用函数,顺便保存函数的返回值
- result = add2num(100,98)
-
- #因为result已经保存了add2num的返回值,所以接下来就可以使用了
- print result # 结果 98
-
函数根据有没有参数,有没有返回值,可以相互组合,一共有4种
此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数
- def printMenu():
- print('--------------------------')
- print(' 学生管理系统 ')
- print('')
- print(' 1. 录入学生信息')
- print(' 2. 查找学生信息')
- print(' 3. 删除学生信息')
- print('--------------------------')
-
此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数
- # 获取温度
- def getTemperature():
-
- #这里是获取温度的一些处理过程
-
- #为了简单起见,先模拟返回一个数据
- return 24
-
- temperature = getTemperature()
- print('当前的温度为:%d'%temperature) # 结果 24
-
此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数
- def sum(a,b):
- c = a+b
- sum(1,2)
-
此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数
- # 计算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
-
- def test1():
-
- print("*" * 50)
- print("test 1")
- print("*" * 50)
-
-
- def test2():
-
- print("-" * 50)
- print("test 2")
-
- test1()
-
- print("-" * 50)
-
- test2()
-
-
需求 1
- def print_line(char):
-
- print("*" * 50)
-
-
需求 2
- def print_line(char):
-
- print(char * 50)
-
-
需求 3
- def print_line(char, times):
-
- print(char * times)
-
-
需求 4
提示:工作中针对需求的变化,应该冷静思考,不要轻易修改之前已经完成的,能够正常执行的函数!
- 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. 定义函数,根据购买数量对订单列表降序排列
-