1 今日内容大纲
- 学习方法:
- 安装环境
- 项目需求提问
- 自学能力,独立解决问题
- 形参角度:
- 万能参数
- *的魔性用法
- 仅限关键字参数(了解为主)
- 形参的最终顺序
- 名称空间
- 全局名称空间,局部.....
- 加载顺序,取值顺序.
- 作用域
- 函数的嵌套(高阶函数)
- 内置函数:globals locals
- 关键字:nonlocal,global
2 昨日内容回顾作业讲解
-
函数以功能为导向,减少重复代码,提高代码的可读性
def func(): 函数体
-
函数的调用
func() func() func()
-
函数返回值:
- return
- 终止函数
- return单个值 ----- 单个值
- return多个值 ------ 元组
- return
-
函数的参数:
- 实参角度:位置参数,关键字参数,混合参数
- 形参角度:位置参数,默认参数
-
3 今日内容
-
如何在工作中不让别人看出你是培训出来的?
- 第一天安装环境等,小白各种问
- 项目需求不清晰,也不敢问
- 六个月内学会自主学习,自己解决问题
-
形参角度:
-
万能参数
-
*的魔性用法
# 形参角度 # 万能参数 def eat(a,b,c,d): print('我请你吃:%s,%s,%s,%s'%(a,b,c,d)) eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅') def eat(a,b,c,d,e,f): #写死了 print('我请你吃:%s,%s,%s,%s,%s,%s'%(a,b,c,d,e,f)) eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅') # 急需要一种形参,可以接受所有的实参 # 万能参数: *args,约定俗成 # 函数定义时,*代表聚合.他将所有的位置参数,聚合成一个元组,赋值给args def eat(*args): print(args)#('蒸羊羔', '蒸熊掌', '蒸鹿邑', '烧花鸭', '烧雏鸡', '烧子鹅') print('我请你吃:%s,%s,%s,%s,%s,%s'% args) eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅') # 写一个函数:计算你传入函数的所有的数字的和 def func(*args): s = 0 for i in args: s += i return s print(func(1,2,3,4,5)) # **kwargs # 函数的定义时: **将 所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs!!!!!!!!!!! def func(**kwargs): print(kwargs) func(name='alex',age='29',sex='boy')#{'name': 'alex', 'age': '29', 'sex': 'boy'} # 万能参数:*args,**kwargs, def func(*args,**kwargs): print(args)#() print(kwargs)#{} func() # 在函数的调用时,*代表打散 def func(*args,**kwargs): print(args) #(1, 2, 3, 11, 22, 33, 44) print(kwargs) #{} # func(*[1,2,3],*[11,22,33,44]) # func(*'laskfjka',*'lklkla') #('l', 'a', 's', 'k', 'f', 'j', 'k', 'a', 'l', 'k', 'l', 'k', 'l', 'a') 相当于输入单个元素 func(**{'name':'alex'},**{'age':'29'}) #{'name': 'alex', 'age': '29'} 相当于输入键值对
-
形参的最终顺序(了解仅限关键字参数):
# 形参角度的参数顺序: # *args 的位置? def func(*args,a,b,sex = '男'): print(a,b) func(1,2,3,4) #func() missing 2 required keyword-only arguments: 'a' and 'b' ###报错!!1 # args得到实参的前提,sex必须被覆盖 def func(a,b,sex = '男',*args): print(a,b) #1 2 print(sex) #3 print(args) #(4, 5, 6, 7, 8, 9) func(1,2,3,4,5,6,7,8,9) def func(a,b,*args,sex = '男'): print(a,b) #1 2 print(args) #(3, 4, 5, 6, 7, 8, 9) print(sex) #女 func(1,2,3,4,5,6,7,8,9,sex='女') # **kwargs 的位置? def func(a,b,*args,sex ='男',**kwargs): print(a,b) # 1 2 print(args) # (3, 4, 5, 6, 7, 8) print(sex) # 女 print(kwargs) # {'name': 'alex', 'age': '29', 'edu': '小学'} func(1,2,3,4,5,6,7,8,sex='女',name='alex',age='29',edu= '小学') #形参角度的第四个参数:仅限关键字参数(了解) def func(a,b,*args,sex = '男',c,**kwargs): print(a, b) #1 2 print(args) #(3, 4, 5, 6, 7, 8) print(sex) #女 print(c) #6666666666 #仅限关键字参数!!!! print(kwargs) #{'name': 'alex', 'age': '19', 'edu': '小学'} func(1,2,3,4,5,6,7,8,sex='女',name='alex',age='19',edu='小学',c='6666666666') func(1,2,3,4,5,6,7,8,sex='女',name='alex',age='19',c='6666666666',edu='小学')#结果一致 #形参角度的最终顺序: 位置参数 , *args , 默认参数 , 仅限关键字参数 , **kwargs
-
-
名称空间(示意图见Day 10.pdf)
- 全局名称空间
- 局部名称空间
- 内置名称空间
# 名称空间:命名空间 a = 1 b = 2 def func(): f = 5 print(f) c = 3 func() # 5 #内置名称空间:python源码给你提供了一些内置的函数:print,input # print(666) # python分为三个空间: #内置名称空间(builtins.py) #全局名称空间(当前py文件) #局部名称空间(函数,函数执行时才开辟,函数结束运行,空间消失) # 加载顺序: # 内置名称空间---->全局名称空间------->局部名称空间(函数执行时) def func(): pass func() a = 5 print(666) # 取值顺序(就近原则)并且单项不可逆 # LEGB 原则 input = '太白金星' def func(): input = 'alex' print(input) func() #alex #(从局部找时)局部名称空间 ----> 全局名称空间 ----> 内置名称空间 #(从全局找时)全局名称空间 ----> 内置名称空间
-
作用域
# 作用域: # 两个作用域: # 1.全局作用域:内置名称空间 + 全局名称空间 # 2.局部作用域:局部名称空间 # # 局部作用域 可以引用 全局作用域的变量 data = '周五' def func(): a = 666 print(data) # print(a) func() # print(a) # 局部变量不能改变全局变量. count = 1 def func(): count += 2 print(count) func() #UnboundLocalError: local variable 'count' referenced before assignment # 局部作用域不能改变全局作用域的变量. 因为 当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作, # 解释器会认为你在局部已经定义过这个局部变量了,他就会从局部找这和变量,就会报错 # 使用可以,带不能改变 def func(): count = 1 def inner(): print(count) inner() func() def func(): count = 1 def inner(): count += 1 print(count) #报错 inner() func()
-
函数的嵌套(高阶函数)(图解见pdf):
# 例1 def func1(): print('in func1') print(3) def func2(): print('in func2') print(4) func1() print(1) func2() print(2) # in func1,3,1,in func2,4,2 # 例2: def func1(): print('in func1') print(3) def func2(): print('in func2') func1() print(4) print(1) func2() print(2) # 1,in func2,in func1,3,4,2 # 例3: def fun2(): print(2) def fun3(): print(6) print(4) fun3() print(8) print(3) fun2() print(5) # 3,2,4,6,8,5
-
内置函数 globals locals
''' 本文件:研究内置函数:globals locals ''' a = 1 b = 2 def func(): name = 'alex' age = 73 sex = 'boy' print(globals()) # 返回的是字典:字典里面的键值对:全局作用域的所有内容。 print(locals())# 返回的是字典:字典里面的键值对:当前作用域的所有的内容。 func() print(globals()) # 返回的是字典:字典里面的键值对:全局作用域的所有内容。 print(locals())# 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
-
关键字nonlocal global.
4 今日总结
- 参数:
- 形参角度:
- 万能参数
- 仅限关键字参数(了解)
- 参数的顺序
- *的魔性用法:聚合,打散
- 形参角度:
- 名称空间,作用域,取值顺序,加载顺序
- globals(),locals()
- 高阶函数执行顺序
5 下周预习内容
- 函数名的运用,迭代器
- 生成器