函数进阶
- 
- 
如何在工作中让别人看出你是自学的? - 
第一天环境安装等等,小白各种问。 
- 
项目需求不清晰,也不敢问。 
 
- 
- 
形参角度: - 
万能参数。 
- 
*的魔性用法。 
- 
- 
形参的最终顺序。 
 
- 
- 
名称空间。 - 
全局名称空间,局部........ 
- 
加载顺序,取值顺序。 
- 
作用域。 
 
- 
- 
函数的嵌套(高阶函数)。 
- 
内置函数 globals locals 
- 
关键字:nonlocal global。 
 
- 
- 
昨日内容回顾作业讲解- 
函数是以功能为导向,减少重复代码,提高代码的可读性。 1 def func(): 2 函数体 
- 
函数的调用:func() 1 func() 2 func() 3 func() 
- 
函数的返回值 return - 
终止函数。 
- 
return 单个值: 
- 
return 多个值:(1,2,3,'alex') 
 
- 
- 
函数的参数: - 
实参角度:位置参数,关键字参数,混合参数。 
- 
形参角度:位置参数,默认参数。 
 
- 
 
- 
- 
今日内容- 
如何在工作中不让别人看出你是培训出来的? - 
第一天环境安装等等,小白各种问。 
- 
项目需求不清晰,也不敢问。 
- 
我们6个月一定要学会自主学习,自己解决问题的能力。 
 
- 
- 
形参角度: - 
万能参数。 
- 
*的魔性用法。 1 # 万能参数。 2 # def eat(a,b,c,d): 3 # print('我请你吃:%s,%s,%s,%s' %(a,b,c,d)) 4 # 5 # eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭') 6  7 # def eat(a,b,c,d,e,f): 8 # print('我请你吃:%s,%s,%s,%s,%s,%s' %(a,b,c,d,e,f)) 9 # 10 # eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅') 11  12 # 急需要一种形参,可以接受所有的实参。#万能参数。 13 # 万能参数: *args, 约定俗称:args, 14 # 函数定义时,*代表聚合。 他将所有的位置参数聚合成一个元组,赋值给了 args。 15  16 # def eat(*args): 17 # print(args) 18 # print('我请你吃:%s,%s,%s,%s,%s,%s' % args) 19 # 20 # eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅') 21  22 # 写一个函数:计算你传入函数的所有的数字的和。 23 # def func(*args): 24 # count = 0 25 # for i in args: 26 # count += i 27 # return count 28 # print(func(1,2,3,4,5,6,7)) 29  30 # tu1 = (1, 2, 3, 4, 5, 6, 7) 31 # count = 0 32 # for i in tu1: 33 # count += i 34 # print(count) 35  36 # **kwargs 37 # 函数的定义时: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs. 38 # def func(**kwargs): 39 # print(kwargs) 40 # func(name='alex',age=73,sex='laddyboy') 41  42 # 万能参数:*args, **kwargs, 43 # def func(*args,**kwargs): 44 # print(args) 45 # print(kwargs) 46 # func() 47 # print() 48  49 # * **在函数的调用时,*代表打散。 50 def func(*args,**kwargs): 51 print(args) # (1,2,3,22,33) 52 print(kwargs) 53  54 # func(*[1,2,3],*[22,33]) # func(1,2,3,22,33) 55 # func(*'fjskdfsa',*'fkjdsal') # func(1,2,3,22,33) 56 func(**{'name': '太白'},**{'age': 18}) #func(name='太白',age='18') 57  
- 
仅限关键字参数(了解)。 
- 
形参的最终顺序。 1 # 形参角度的参数的顺序 2 # *args 的位置? 3 # def func(*args,a,b,sex= '男'): 4 # print(a,b) 5 # func(1,2,3,4) 6 # args得到实参的前提,sex必须被覆盖了。 7 # def func(a,b,sex= '男',*args,): 8 # print(a,b) 9 # print(sex) 10 # print(args) 11 # func(1,2,3,4,5,6,7,) 12  13 # def func(a,b,*args,sex= '男'): 14 # print(a,b) 15 # print(sex) 16 # print(args) 17 # func(1,2,3,4,5,6,7,sex='女') 18  19 # **kwargs 位置? 20 def func(a,b,*args,sex= '男',**kwargs,): 21 print(a,b) 22 print(sex) 23 print(args) 24 print(kwargs) 25 # func(1,2,3,4,5,6,7,sex='女',name='Alex',age=80) 26  27 # 形参角度第四个参数:仅限关键字参数 (了解) 28  29 def func(a,b,*args,sex= '男',c,**kwargs,): 30 print(a,b) 31 print(sex) 32 print(args) 33 print(c) 34 print(kwargs) 35 # func(1,2,3,4,5,6,7,sex='女',name='Alex',age=80,c='666') 36  37 # 形参角度最终的顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs 38 
 
- 
- 
名称空间。 - 
全局名称空间,局部........ 
 局部名称空间(临时名称空间): - 
加载顺序,取值顺序。 1 #名称空间;命名空间。 2  3 # a = 1 4 # b = 2 5 # def func(): 6 # f = 5 7 # print(f) 8 # c = 3 9 # func() 10  11 # 内置名称空间:python源码给你提供的一些内置的函数,print input 12 # print(666) 13 # python分为三个空间: 14 # 内置名称空间(builtins.py) 15 # 全局名称空间(当前py文件) 16 # 局部名称空间(函数,函数执行时才开辟) 17  18 # 加载顺序: 19 # 内置名称空间 ---> 全局名称空间 ----> 局部名称空间(函数执行时) 20 # def func(): 21 # pass 22 # func() 23 # a = 5 24 # print(666) 25 python 1 # 加载顺序: 2 # 内置名称空间 ---> 全局名称空间 ----> 局部名称空间(函数执行时) 3 # def func(): 4 # pass 5 # func() 6 # a = 5 7 # print(666) 8  9 # 取值顺序(就近原则) 单向不可逆 10 # LEGB原则 11 # input = '太白金星' 12 def func(): 13 # input = 'alex' 14 print(input) 15 # func() 16  17 # (从局部找时)局部名称空间 ---> 全局名称空间 ---> 内置名称名称空间 18  19  20 # input = '太白金星' 21 # def func(): 22 # input = 'alex' 23 # 24 # func() 25 # print(input) 
- 
作用域。 1 # 作用域: 2 # 两个作用域: 3 # 全局作用域 :内置名称空间 全局名称空间 4 # 局部作用域:局部名称空间 5  6 # 局部作用域可以引用全局作用域的变量 7 # date = '周五' 8 # def func(): 9 # a = 666 10 # print(date) 11 # print(a) 12 # func() 13 # print(a) 14  15 # 局部作用域不能改变全局变量。 16 # count = 1 17 # # def func(): 18 # # count += 2 19 # # print(count) 20 # # func() # local variable 'count' referenced before assignment 21 # 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作, 22 # 解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。 23  24 # 使用可以,不能改变 25 # def func(): 26 # count = 1 27 # def inner(): 28 # print(count) 29 # inner() 30 # func() 31  32 def func(): 33 count = 1 34 def inner(): 35 count += 1 36 print(count) 37 inner() 38 func() 39  
 
- 
- 
函数的嵌套(高阶函数)。 1 # 例1: 2 def func1(): 3 print('in func1') 4 print(3) 5  6 def func2(): 7 print('in func2') 8 print(4) 9  10 func1() 11 print(1) 12 func2() 13 print(2) 14 # in func1 3 1 in func2 4 2 15  16  17  18 # 例2: 19 def func1(): 20 print('in func1') 21 print(3) 22  23 def func2(): 24 print('in func2') 25 func1() 26 print(4) 27  28 print(1) 29 func2() 30 print(2) 31  32  33 # 例3: 34 def fun2(): 35 print(2) 36  37 def fun3(): 38 print(6) 39  40 print(4) 41 fun3() 42 print(8) 43  44 print(3) 45 fun2() 46 print(5) 47  48  49 # glbals() locals() 
- 
内置函数 globals locals 1 """ 2 本文件:研究内置函数:globals locals 3 """ 4 a = 1 5 b = 2 6 def func(): 7 name = 'alex' 8 age = 73 9 print(globals()) # 返回的是字典:字典里面的键值对:全局作用域的所有内容。 10 print(locals()) # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。 11 # print(globals()) # 返回的是字典:字典里面的键值对:全局作用域的所有内容。 12 # print(locals()) # # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。 13 func() 
- 
关键字:nonlocal global。 
 
- 
- 
今日总结- 
参数:万能参数,仅限关键字参数(了解),参数的顺序,*的魔性用法:聚合,打散。 
- 
名称空间,作用域,取值顺序,加载顺序。 
- 
globals locals 
- 
高阶函数:执行顺序。 
- 
以上全部都是重点。 
 
- 
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号