目录
一、函数的定义与调用
1、定义 :具有独立功能的代码块组成的一个模块
2、函数调用
3、函数的文档说明: 在定义函数时,添加的字符串信息;当用help查看函数时,才会显示出文档说明
二、函数的定义与调用
1、函数参数
2、返回值
三、四种函数类型
函数注意点
四、函数的嵌套使用
d6作业
字符串与形参一起打印用+连接
六、局部变量与全局变量
七、函数的多个返回值
八、函数的参数
九、 递归函数和匿名函数
d7作业
一、函数的定义与调用
1、定义 :具有独立功能的代码块组成的一个模块
def 函数名():
代码:
def test():
a = 4
b = 8
print("%d"%(a+b))
2、函数调用
函数名()
def sum():
a = 4
b = 8
print("%d"%(a+b))
sum()
3、函数的文档说明:
在定义函数时,添加的字符串信息;当用help查看函数时,才会显示出文档说明
def test():
"函数功能:用来实现2个数据求和"
a = 4;
b = 8;
printf("%d"%(a+b))
查看:help(函数名) 例子:help(test)
def add():
'函数功能:两个数求和'
a = 10
b = 20
print('求和:%s' %(a+b))
add()
print(help(add))
'''
求和:30
Help on function add in module __main__:
add()
函数功能:两个数求和
None
进程已结束,退出代码 0
二、函数的定义与调用
1、函数参数
定义函数时在小括号内添加多个参数名字
调用函数时在小括号内加入要传递的参数的值
定义格式:
def 函数名(参数名1,参数名2.....) :
函数执行代码
函数执行代码
.........
调用格式:函数名(值1,值2......)
def add2num(num1,num2):
a = num1
b = num2
c = a + b
print(c)
add2num(10,23)
add2num(129,123)
'''
33
252
进程已结束,退出代码 0
2、返回值
函数完成所有操作后,可以返回结果给调用者
在函数中把结果返回给调用者,需要在函数中使用return
格式: def 函数名(参数名1,参数名2.....) :
函数执行代码
函数执行代码
.........
return 结果值
调用:存放返回值变量 = 函数名(参数值1,值2........)
返回值的实例
#定义函数
def add2num(a, b):
return a+b
#调用函数,顺便保存函数的返回值
result = add2num(100,98)
#因为result已经保存了add2num的返回值,所以接下来就可以使用了
print(result)
def add2num(a,b):
return a+b
result = add2num(100,98)
print(result)
'''
198
进程已结束,退出代码 0
三、四种函数类型
函数类型
无参数,无返回值
此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数
无参数,有返回值
此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数
有参数,无返回值
此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数.
有参数,有返回值
此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数.
def domo1():
print("无参数无返回值的函数")
domo1()
def domo2():
return '无参数有返回值的函数'
a = domo2()
print(a)
def domo3(num1,num2):
print('%s' %(num1+num2))
domo3('有参数','无返回值的函数')
def domo4(num3,num4):
num = num3+num4
return num
b = domo4('有参数','有返回值的函数')
print(b)
'''
无参数无返回值的函数
无参数有返回值的函数
有参数无返回值的函数
有参数有返回值的函数
进程已结束,退出代码 0
函数注意点
在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
参数列表中变量的个数根据实际传递的数据的多少来确定
四、函数的嵌套使用
函数嵌套
一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用
def 函数A(参数,........):
执行语句
......
def 函数B(参数,......):
执行语句
函数A(参数值1,........)
......
(1)写一个函数打印一条横线
(2)打印自定义行数的横线
def hengxian():
print('-'*20)
hengxian()
print('')
def hengxian1(num):
i = 0
while i < num:
print('-'*10)
i +=1
hengxian1(5)
'''
--------------------
----------
----------
----------
----------
----------
进程已结束,退出代码 0
(1)写一个函数求三个数的和
(2)写一个函数求三个数的平均值
def qiuhe(a,b,c):
return (a+b+c)
print(qiuhe(1,2,3))
def pingjun(a,b,c):
rest = qiuhe(a,b,c)/3
return rest
print(pingjun(6,9,6))
'''
6
7.0
进程已结束,退出代码 0
d6作业
1、 编写一个名为 display_message() 的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。
2、 编写一个名为 favorite_book() 的函数,其中包含一个名为 title 的形参。这个函数打印一条消息,如 One of my favorite books is Alice in Wonderland 。调用这个函数,并将一本图书的名称作为实参传递给它。
3、 编写一个名为 make_shirt() 的函数,它接受一个尺码以及要印到 T 恤上的字样。这个函数应打印一个句子,概要地说明 T 恤的尺码和字样。使用位置实参调用这个函数来制作一件 T 恤;再使用关键字实参来调用这个函数。
4、 修改函数 make_shirt() ,使其在默认情况下制作一件印有字样 “I love Python” 的大号 T 恤。调用这个函数来制作如下 T 恤:一件印有默认字样的大号 T恤、一件印有默认字样的中号 T 恤和一件印有其他字样的 T 恤(尺码无关紧要)。
5、 编写一个名为 describe_city() 的函数,它接受一座城市的名字以及该城市所属的国家。这个函数应打印一个简单的句子,如 Reykjavik is in Iceland 。给用于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家。
6、 编写一个名为 city_country() 的函数,它接受城市的名称及其所属的国家。这个函数应返回一个格式类似于这样的字符串:"Santiago, Chile" 。至少使用三个城市 - 国家对调用这个函数,并打印它返回的值。
字符串与形参一起打印用+连接
def display_message():
print('函数')
display_message()
def favorite_book(title):
print('One of my favorite books is ',end='')
print(title)
favorite_book('龙族')
def make_shirt(a,b):
print('size is '+ a + ',picture is '+ b )
make_shirt('L','goodboy')
def make_shirt(a,b='I love Python'):
print('size is '+ a + ',picture is '+ b )
make_shirt('L','goodboy')
make_shirt('L')
make_shirt('M')
def describe_city(name,country='中国'):
print(name +' is belong ' + country)
describe_city('上海')
describe_city('纽约','美国')
describe_city('李梦','我')
def city_country(name,country='中国'):
return name,country
print(city_country('上海'))
print(city_country('纽约','美国'))
print(city_country('台湾'))
'''
函数
One of my favorite books is 龙族
size is L,picture is goodboy
size is L,picture is goodboy
size is L,picture is I love Python
size is M,picture is I love Python
上海 is belong 中国
纽约 is belong 美国
李梦 is belong 我
('上海', '中国')
('纽约', '美国')
('台湾', '中国')
进程已结束,退出代码 0
六、局部变量与全局变量
局部变量
局部变量,就是在函数内部定义的变量
不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
作用 : 临时保存数据需要在函数中定义变量来进行存储,
全局变量
一个变量,既能在一个函数中使用,也能在其他的函数中使用
如何修改全局变量:global a
七、函数的多个返回值
python中可以返回多个值:
格式:def 函数名(参数名1,参数名2.....) :
函数执行代码
函数执行代码
.........
return 返回值1,返回值2,......
调用:
依次存返回值变量1,变量2,.... = 函数名(参数值1,........)
def num(a,b):
c = a+b
d = a-b
return c,d
a,b = num(4,2)
print(a,b)
'''
6 2
进程已结束,退出代码 0
八、函数的参数
缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
格式:def 函数名(参数名1,参数2=默认值,....参数n=默认值):
调用时:函数名(值1)
注意:带有默认值的参数一定要位于参数列表的最后面。
def usrinfo(name,age=25):
print("Name = %s"%name)
print("age = %d"%age)
usrinfo('zhangsan')
Name = zhangsan
age = 25
不定长参数
格式:def 函数名(参数名1,*args,**kwarg):
调用时:函数名(值1)
注意:加*表示args可以存放所有未命名的变量参数,args为元组
加**表示kwarg可以存放命名参数,即形如key=value的参数, kwargs为字典。
def num(a,b,*args,**kwargs):
print(a)
print(b)
print(args)
print(kwargs)
num(1,1,2,3,4,4,name = 'haha',age = 18)
'''
1
1
(2, 3, 4, 4)
{'name': 'haha', 'age': 18}
进程已结束,退出代码 0
引用传参
Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
例子:若将a +=a 修改成 a = a + a ,再次观察效果,讨论原因
def num(a):
a += a
return a
a = num(10)#10是不可变类型
print(a)
list = [1,2]
num(list)#list是可变类型
print(list)
print(list+list)
'''
20
[1, 2, 1, 2]
[1, 2, 1, 2, 1, 2, 1, 2]
进程已结束,退出代码 0
九、 递归函数和匿名函数
递归函数
如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
例子:我们来计算阶乘 n! = 1 * 2 * 3 * ... * n
#循环实现
def cal_num(num):
i = 1
rest = 1
while i <= num:
rest *= i
i += 1
return rest
print(cal_num(3))
#递归实现
def cal(num):
if num >= 1:
rest = num * cal(num-1)
else:
rest = 1
return rest
print(cal(3))
'''
6
6
进程已结束,退出代码 0
匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
例子:求两个数据的和
>>> sum = lambda a,b:a+b
>>> sum(45,23)
68
c = lambda a,b :a+b
print(c(1,2))
'''
3
进程已结束,退出代码 0
d7作业
1、 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
2、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
4、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
5、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS:字典中的value只能是字符串或列表
def a(num):
if len(num) > 5:
print('yes')
else:
print('not')
a('asda')
print('')
def b(num):
if len(num) == 0:
return True
else:
for i in num:
if i == ' ' or i == None:
return True
return False
print(b(' a'))
print('')
def c(num):
if len(num) > 2:
num = [num[0],num[1]]
return num
else:
return num
c = c([1,3,4])
print(c)
print('')
def d(num):
ret = []
for i in range(len(num)):#range(3)即创建列表[0,1,2]
if (i % 2) == 1:
ret.append(num[i])
else:
pass
return ret
print(d([0,1,2,3,4]))
print('')
def e(dict):
ret = {}
for key,value in dict.items():#注意key,value位置,不能放反
if len(value) > 2:
ret[key] = value[0:2]
else:
ret[key] = value
return ret
t = {1:'清风明月',2:[1,2,3,4],3:'明月'}
print(e(t))
'''
not
True
[1, 3]
[1, 3]
{1: '清风', 2: [1, 2], 3: '明月'}
进程已结束,退出代码 0