在编程中,函数就像数学公式,解决特定的问题而开发存在的。同时可以重复使用,编程的视角里函数通常被设计成一个功能或行为。
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. 定义函数,根据购买数量对订单列表降序排列