函数-函数基础操作

1.定义函数

 1 #定义函数
 2 #定义了一个输出一句话的函数
 3 def mysun():
 4     print('太阳带给我们爱与温暖')
 5 #特征:不调用不会执行
 6 mysun() #调用函数
 7 #输出结果:太阳带给我们爱与温暖
 8 #查看函数的数据类型(函数的定义相当于变量赋值,函数名就是变量名)
 9 print(type(mysun))
10 #输出结果:<class 'function'>
11 print(mysun) #打印函数变量名得出函数名和它在内存中的位置
12 #输出结果:<function mysun at 0x000001F12F94D2F0>

 

2.带有参数的函数

 1 #带有参数的函数
 2 def printnum(maxnum):
 3     var = 0
 4     while var <= maxnum:
 5         print(var)
 6         var += 1
 7 
 8 #printnum()
 9 #输出结果:TypeError: printnum() missing 1 required positional argument: 'maxnum'
10 #翻译结果:类型错误: printnum()缺少一个必需的位置参数:'maxnum'
11 
12 #输出0-10的数字
13 printnum(3)
14 '''
15 输出结果:
16 1
17 2
18 3
19 '''
20 #输出0-5的数字
21 printnum(5)
22 '''
23 输出结果:
24 1
25 2
26 3
27 4
28 5
29 '''
30 #上面三个输出例子,printnum()函数可以反复自定义参数输出
31 #形参:在定义函数的括号中声明的变量名就是形参,形式上的参数
32 #实参:在调用函数的括号中传入的就是实参,实际上的参数
33 #注意:实参将值传递给形参的过程,本质上就是变量赋值操作

 

3.定义带有参数的函数

 1 #定义带有参数的函数
 2 def eatfruit(xm,xh):
 3     print('小明喜欢吃水果' + xm)
 4     print('小红喜欢吃水果' + xh)
 5 #调用函数
 6 eatfruit('西瓜','榴莲')
 7 #注意:
 8     #1.实参传值给形参的时候按照位置编号传输的
 9     #2.实参必须根据形参的个数进行传值(普通参数)
10 '''
11 输出结果:
12 小明喜欢吃水果西瓜
13 小红喜欢吃水果榴莲
14 '''

 

4.参数的默认值

 1 #参数的默认值
 2 #定义一个函数
 3 def buyPC(cpu = 'I5',memory = '4G',videocard = '970'):
 4     print('CPU是'+ cpu)
 5     print('内存是'+ memory)
 6     print('显卡是' + videocard)
 7 
 8 #调用函数  传入实参 -> 使用的是实参值
 9 #buyPC('I7-7700K','16G','1080ti')
10 '''
11 输出结果:
12 CPU是I7-7700K
13 内存是16G
14 显卡是1080ti
15 '''
16 #调用函数  不传入实参 -> 使用的是形参的默认值
17 #buyPC()
18 '''
19 输出结果:
20 CPU是I5
21 内存是4G
22 显卡是970
23 '''
24 #调用函数  传入一个实参
25 buyPC('I5','16G')
26 '''
27 输出结果:
28 CPU是I5
29 内存是16G
30 显卡是970
31 '''

 

5.定义函数,自定义参数的几个形态数据传入

 1 #定义函数,自定义参数的几个形态数据传入
 2 #定义一个人物角色,并且设置装备
 3 def creatPerson(mz,xl,yf,wq,xz):
 4     print('头上戴着'+ mz )
 5     print('脖子上挂着' + xl)
 6     print('身上穿着' + yf)
 7     print('手上拿着' + wq)
 8     print('脚上穿着' + xz)
 9 #调用函数(按参数名称传入实参)
10 #creatPerson('三级头','钻石项链','锁子甲','金丝大环刀','草鞋')
11 '''
12 输出结果:
13 头上戴着三级头
14 脖子上挂着钻石项链
15 身上穿着锁子甲
16 手上拿着金丝大环刀
17 脚上穿着草鞋
18 '''
19 #调用函数(出现顺序错误)
20 #creatPerson('钻石项链','锁子甲','金丝大环刀','草鞋','三级头')
21 '''
22 输出结果:
23 头上戴着钻石项链
24 脖子上挂着锁子甲
25 身上穿着金丝大环刀
26 手上拿着草鞋
27 脚上穿着三级头
28 '''
29 #调用函数(使用关键字参数)
30 creatPerson(xl = '钻石项链', wq = '金丝大环刀', yf = '锁子甲',xz = '草鞋',mz = '三级头')
31 '''
32 输出结果:
33 头上戴着三级头
34 脖子上挂着钻石项链
35 身上穿着锁子甲
36 手上拿着金丝大环刀
37 脚上穿着草鞋
38 '''

 

6.定义一个函数(计算3个数值的和的函数)

1 #定义一个函数(计算3个数值的和的函数)
2 def getsum(no1,no2,no3):
3     result = no1 + no2 + no3
4     print(result)
5 #调用函数
6 getsum(5,7,9)
7 #输出结果:21

 

7.定义一个函数(计算任意个数值的和的函数,不限定参数的数量)

 1 #定义一个函数(计算任意个数值的和的函数,不限定参数的数量)
 2 def getsum(*allnum):
 3     #声明一个累加和的变量
 4     total = 0
 5     #计算所有数值的和
 6     for i in allnum:
 7         total = total + i
 8     #打印求和结果
 9     print(total)
10 #调用函数
11 getsum(2,4,7,5,5,8,3,10)
12 #输出结果:44
13 getsum(2,4)
14 #输出结果:6

 

8.函数的注意事项

 1 #函数的注意事项
 2 #参数 a,b,c是固定数量,*d非固定数量
 3 def getarg(a,b,c,*d):
 4     print(a,b,c)
 5     #输出结果:1 2 3
 6     print(d)
 7    #输出结果:(4, 5, 6, 7, 8, 9, 10)
 8 #调用函数(1,2,3实参被a,b,c形参占据,乘下的实参实*d占据)
 9 getarg(1,2,3,4,5,6,7,8,9,10)
10 '''
11 输出结果:
12 1 2 3
13 (4, 5, 6, 7, 8, 9, 10)
14 '''

 

9. **person 关键字收集参数

 1 # **person 关键字收集参数
 2 def showinfo(**person):
 3     #打印person接受的结果
 4     print(person)
 5     print('参与大会的人员有' , person.keys())
 6     print('他们的体重分别是',person.values())
 7 #调用函数
 8 showinfo(ml = 90,xm = 120 ,xh = 98 ,xg = 145,gm = 90)#关键字参数
 9 '''
10 输出结果:
11 {'ml': 90, 'xm': 120, 'xh': 98, 'xg': 145, 'gm': 90}
12 参与大会的人员有 dict_keys(['ml', 'xm', 'xh', 'xg', 'gm'])
13 他们的体重分别是 dict_values([90, 120, 98, 145, 90])
14 '''

 

10. **person 关键字收集参数,注意:固定形参占据关键字参数

 1 # **person 关键字收集参数,注意:固定形参占据关键字参数
 2 def showinfo(xh,**person):
 3     #打印person接受的结果
 4     print(person)
 5     print('参与大会的人员有' , person.keys())
 6     print('他们的体重分别是',person.values())
 7 #调用函数
 8 showinfo(ml = 90,xm = 120 ,xh = 98 ,xg = 145)#关键字参数
 9 '''
10 输出结果:
11 {'ml': 90, 'xm': 120, 'xg': 145}
12 参与大会的人员有 dict_keys(['ml', 'xm', 'xg'])
13 他们的体重分别是 dict_values([90, 120, 145])
14 '''

 

11.多种参数混合存在的情况

 1 #多种参数混合存在的情况
 2 #形参:普通形参 var  ,收集参数 *var, 关键字收集参数 **var
 3 #实参: 普通实参  99  ,关键字参数 var = 99
 4 #定义一个测试使用的函数
 5 def testargs(name,sex,age,*size,**goodfriends):
 6     #使用普通参数
 7     print(name,sex,age)
 8     #使用收集参数
 9     print(size)
10     #使用关键字收集参数
11     print(goodfriends)
12 #调用函数
13 testargs('小明','',18,178,125,35,gf1 = '小刚',gf2 = '小欧',gf3 = '小红')
14 #实参:普通实参在前,关键字参数在后
15 '''
16 输出结果:
17 小明 男 18
18 (178, 125, 35)
19 {'gf1': '小刚', 'gf2': '小欧', 'gf3': '小红'}
20 '''

 

12.函数的返回值 return ,返回函数的结果

 1 #函数的返回值 return ,返回函数的结果
 2 #没有返回值的函数调用时是运行整个函数的过程
 3 def getsum(no1,no2):
 4     result = no1 + no2
 5     #print(result)
 6     #返回值语句
 7     return result
 8 #调用函数
 9 num = getsum(12,23)
10 print(num)
11 #输出结果:35
12 #将求和的结果进行乘以10的操作
13 print(num * 10)
14 #输出结果:350

 

13.查看return语句的另外一个作用

 1 #查看return语句的另外一个作用
 2 def test():
 3     print('************')
 4     #添加return语句
 5     return
 6     print('############')
 7 
 8 #调用函数
 9 test()
10 #输出结果:************

 

14.变量的作用域

 1 #变量的作用域
 2 #声明一个全局变量(不完全正确)
 3 mzj = '全身麻醉剂'
 4 #声明一个函数(产生一个局部环境)
 5 def zui():
 6     #在函数中打印mzj变量
 7     print('在函数内部调用变量mzj',mzj)
 8     print('在嘴巴里面拔牙')
 9 #1.正在的环境(函数外部)中是否可以使用 ->变量有效
10 print('在函数外部调用变量mzj',mzj)
11 #2.在局部环境中检测变量是否有效 -> 变量有效
12 zui()
13 '''
14 输出结果:
15 在函数外部调用变量mzj 全身麻醉剂
16 在函数内部调用变量mzj 全身麻醉剂
17 在嘴巴里面拔牙
18 '''

 

15.变量的作用域-局部变量

 1 #变量的作用域-局部变量
 2 def zui():#定义一个函数相当于局部环境
 3     #定义局部变量
 4     mzj = '局部麻醉剂'
 5     #调用局部变量
 6     print('在局部环境中调用变量mzj',mzj)
 7     print('在嘴巴中拔牙')
 8 zui()
 9 '''
10 输出结果:
11 在局部环境中调用变量mzj 局部麻醉剂
12 在嘴巴中拔牙
13 '''
14 #在函数外部调用变量看看是否可以使用 -> 不可以访问
15 #print(mzj)
16 #输出结果:name错误:没有定义名称“mzj”

 

16.将局部变量提升为全局变量

 1 #将局部变量提升为全局变量
 2 def zui():
 3     #提升局部变量为全局变量
 4     global mzj
 5     #定义局部变量mzj
 6     mzj = '麻醉剂'
 7     #在局部环境中调用mzj
 8     print('局部环境中调用变量',mzj)
 9 #1.测试函数内部调用
10 zui()
11 #输出结果:局部环境中调用变量 麻醉剂
12 #2.测是外部环境调用
13 print('在函数外部调用变量',mzj)
14 #输出结果:在函数外部调用变量 麻醉剂

 

17.函数的运行顺序,和全局变量在作用域

 1 #函数的运行顺序,和全局变量在作用域
 2 leader = '主席'
 3 #定义一个省
 4 def shandong():
 5     print('此处是山东省')
 6     print(leader)
 7     #定义一个市
 8     def jinan():
 9         print('此处是济南市')
10         print(leader)
11         #定义一个区域
12         def huaiyin():
13             print('此处是槐荫区')
14             print(leader)
15          #调用槐荫区
16         huaiyin()
17     #调用济南函数(必须在山东的函数内)
18     jinan()
19 #调用山东函数
20 shandong()
21 '''
22 输出结果:
23 此处是山东省
24 主席
25 此处是济南市
26 主席
27 此处是槐荫区
28 主席
29 '''

 

18.nonlocal 定义变量

 1 # nonlocal 定义变量
 2 def outer():
 3     #定义一个变量
 4     var = 55
 5     #定义一个内部函数
 6     def inner():
 7         #声明外部变量
 8         nonlocal var#当前变量var 不是全局变量也不是局部变量
 9         #在此处使用outer内部定义的var变量
10         #在此处进行 +1 操作
11         var = var + 1
12         print(var)
13     #调用inner函数
14     inner()
15 #调用outer函数
16 outer()
17 #输出结果:56

 

19.函数中的变量 【使用列表的穿透效果】

 1 #函数中的变量 【使用列表的穿透效果】
 2 def outer():
 3     #定义一个变量(使用列表)
 4     var = [55]
 5     #定义一个内部函数
 6     def inner():
 7         #在此处使用outer内部定义的var变量
 8         #在此处进行 +1 操作
 9         var[0] = var[0] + 10
10         print(var[0])
11     #调用inner函数
12     inner()
13 #调用outer函数
14 outer()
15 #输出结果:65

 

20.lambda表达式

1 #lambda表达式
2 getsum2 = lambda no1,no2 : no1 + no2 #lambda表达式自带return
3 #调用lambda表达式(函数)
4 var = getsum2(33,55)
5 print(var)
6 #输出结果:88

 

21.带有分支结构的lambda表达式

 1 #带有分支结构的lambda表达式
 2 #普通函数的分支结构
 3 def getsex(sex):
 4     #检测性别返回单词
 5     if sex == '':
 6         return 'man'
 7     else:
 8         return 'woman'
 9 #调用函数~
10 result = getsex('')
11 print(result)
12 #输出结果:woman
13 
14 #带有分支结构的lambda表达式
15 getsex2 = lambda sex : 'man' if sex == '' else   'woman'
16 #调用函数
17 result = getsex2('')
18 print(result)
19 #输出结果:woman

 

22.在lambda表达式中调用它其他函数

1 #在lambda表达式中调用它其他函数
2 #获取并且打印数据类型的函数  print(type(数据))
3 printtype = lambda var : print(type(var))
4 #调用函数
5 printtype('小明')
6 #输出结果:<class 'str'>

 

posted @ 2019-05-11 16:08  双伟科技  阅读(395)  评论(0编辑  收藏  举报