函数参数的两个类型
1.形式参数
在函数定义阶段括号内所填写的参数简称:形参
1 def func(a, b): 2 pass 3 # a和b就是函数func的形参
2.实际参数
在函数调用阶段括号内传入的参数简称:实参
1 func(1,2) 2 # 数据1和2就是函数func的实参
1 """ 2 形参与实参的关系 3 我们可以将形参看成是变量名 实参看成是变量值 4 两者在函数调用阶段临时绑定 函数运行结束断开 5 6 形参的表现形式只有一种就是变量名 7 实参的表现形式有很多种(但是把握核心 就是 数据值) 8 """
位置参数
1.位置参数
按照从左往右的顺序依次填入的参数
2.位置形参
在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
3.位置实参
在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
1 # 定义一个可以比较大小的函数(传入两个值 返回较大的)
4.关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值的形式指名道姓的传值
1 """ 2 1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定 3 2.位置参数在绑定的时候多一个不行少一个也不行 4 """ 5 6 '''格式越简单的越靠前 格式越复杂的越靠后'''
默认参数
1 默认参数 2 默认形参 3 函数在定义阶段就可以给形参赋值了 4 1.该形参在函数调用阶段如果不给值 则使用默认的 5 2.该形参在函数调用阶段也可以继续给值 则使用你给的
1 # 定义学员注册功能 2 def register(name, age, gender='male'): 3 print('%s:%s:%s' % (name, age, gender)) 4 register('jason', 18) 5 register('tony', 28) 6 register('kevin', 38) 7 register('lili', 18, 'female') 8 register('lili', 18, gender='female')
""" 位置形参与默认值形参在定义的时候 位置形参必须在默认值形参的前面 """ '''格式越简单的越靠前 格式越复杂的越靠后'''
可变长参数
1.函数无论传多少位置参数都可以正常运行
1 #可变长形参 2 # def func(x,y,*a): 3 # print(x,y,a) 4 # func() # () 5 # func(1) # (1,) 6 # func(1, 2, 3, 4, 5, 6, 7) # (1, 2, 3, 4, 5, 6, 7) 7 # func(1,2) # 1 2 () 8 # func(1,2,3,4,5,6,7,8,9) # 1 2 (3, 4, 5, 6, 7, 8, 9) 9 # func(1,2) # 1 2 (3, 4, 5, 6, 7, 8, 9)*号在形参中的使用 用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
2.函数无论传入多少关键字参数都可以正常运行
1 def index(x, y, **b): 2 print(x, y, b) 3 index() # {} 4 index(a=1,b=2,c=3,d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} 5 index(y=2, x=1) # 1 2 {} 6 index(y=2, x=1, u=222, k=111, l=444) # 1 2 {'u': 222, 'k': 111, 'l': 444}
**号在形参中的使用 用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
def index(*a,**b): print(a,b) index() # () {} index(1,2,3,4) # (1, 2, 3, 4) {} index(a=1,b=2,c=3) # () {'a': 1, 'b': 2, 'c': 3} index(1,2,3,4,a=1,b=2,c=3) # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
墨守成规
可变长形参 *与**后面的变量名其实是可以随便定义的
但是python中推荐使用
1 *args 2 **kwargs 3 def index(*args, **kwargs): 4 pass
1 # def index(a, b, c): 2 # print(a,b,c) 3 # new_list = [11,22,33] 4 # index(new_list) # 肯定不行 列表是一个整体 相当于一个实参 5 # index(new_list[0],new_list[1],new_list[2]) # 可以 6 '''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入''' 7 # def index1(*args): 8 # print(args) 9 # new_list1 = [11,22,33,44,55,66,77,88,99] 10 # index1(*new_list1) # index1(11,22,33,44,55,66,77,88,99) 11 """ 12 *号在实参中的使用 13 会将列表、元组内的元素打散成位置参数的形式一一传值 14 """ 15 16 # def index2(**kwargs): 17 # print(kwargs) 18 new_dict = {'username':'jason','pwd':123} 19 # index2(**new_dict) # index2(username='jason',pwd=123) 20 # {'username': 'jason', 'pwd': 123} 21 """ 22 **号在实参中的使用 23 会将字典内的键值对打散成关键字参数传入 24 """
函数参数补充
1.命名关键字参数
1 def register(name,age,*,sex,height): 2 pass 3 4 # register('jason',18,'male',183) 5 register('lili',18,sex='male',height='1.8m') #正确使用 6 """ 7 sex height在传入实参的时候必须以关键字参数的形式 8 9 ps:该类型的参数几乎不用 也几乎很少能碰到 10 """
名称空间
1.什么是名称空间(namespaces)
用于存放变量名与变量值绑定关系的地方(类似于民政局)
2.名称空间的分类
内置名称空间
python解释器提前给你定义好的
1 print() 2 len() 3 ...
3.全局名称空间
在py文件中顶格编写的代码运行之后都会存入全局名称空间
1 name = 'jason' # name全局 2 def func(): # func全局 3 pass 4 if 1: 5 a = 123 # a全局 6 for i in range(10): 7 print(i) # i全局 8 while True: 9 a = 123 # a全局
4.局部名称空间
函数体代码运行之后产生的都是局部名称空间
5.存活周期
1.内置名称空间
python解释器启动与关闭而创建和销毁
2.全局名称空间
随着py文件的运行与结束而创建和销毁
3.局部名称空间
随着函数体代码的执行与结束而创建和销毁
名字的查找顺
在查找名字的时候 要先确定自己当前在哪序
1.如果你在局部
局部 >>> 全局 >>> 内置
2.如果你在全局
全局 >>> 内置
3.局部名称空间的嵌套
1 '''函数在定义阶段名字的查找顺序就已经固定死了(特例)''' 2 x = 111 3 def f1(): 4 x = 222 5 def f2(): 6 x = 333 7 def f3(): 8 x = 444 9 def f4(): 10 x = 555 11 print(x) 12 # x = 555 特例 13 f4() 14 f3() 15 f2() 16 # 通过调用f1 执行所有的函数 17 f1()
------------恢复内容开始------------
函数参数的两个类型
1.形式参数
在函数定义阶段括号内所填写的参数简称:形参
1 def func(a, b): 2 pass 3 # a和b就是函数func的形参
2.实际参数
在函数调用阶段括号内传入的参数简称:实参
1 func(1,2) 2 # 数据1和2就是函数func的实参
1 """ 2 形参与实参的关系 3 我们可以将形参看成是变量名 实参看成是变量值 4 两者在函数调用阶段临时绑定 函数运行结束断开 5 6 形参的表现形式只有一种就是变量名 7 实参的表现形式有很多种(但是把握核心 就是 数据值) 8 """
位置参数
1.位置参数
按照从左往右的顺序依次填入的参数
2.位置形参
在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
3.位置实参
在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
1 # 定义一个可以比较大小的函数(传入两个值 返回较大的)
4.关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值的形式指名道姓的传值
1 """ 2 1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定 3 2.位置参数在绑定的时候多一个不行少一个也不行 4 """ 5 6 '''格式越简单的越靠前 格式越复杂的越靠后'''
默认参数
1 默认参数 2 默认形参 3 函数在定义阶段就可以给形参赋值了 4 1.该形参在函数调用阶段如果不给值 则使用默认的 5 2.该形参在函数调用阶段也可以继续给值 则使用你给的
1 # 定义学员注册功能 2 def register(name, age, gender='male'): 3 print('%s:%s:%s' % (name, age, gender)) 4 register('jason', 18) 5 register('tony', 28) 6 register('kevin', 38) 7 register('lili', 18, 'female') 8 register('lili', 18, gender='female')
""" 位置形参与默认值形参在定义的时候 位置形参必须在默认值形参的前面 """ '''格式越简单的越靠前 格式越复杂的越靠后'''
可变长参数
1.函数无论传多少位置参数都可以正常运行
1 #可变长形参 2 # def func(x,y,*a): 3 # print(x,y,a) 4 # func() # () 5 # func(1) # (1,) 6 # func(1, 2, 3, 4, 5, 6, 7) # (1, 2, 3, 4, 5, 6, 7) 7 # func(1,2) # 1 2 () 8 # func(1,2,3,4,5,6,7,8,9) # 1 2 (3, 4, 5, 6, 7, 8, 9) 9 # func(1,2) # 1 2 (3, 4, 5, 6, 7, 8, 9)*号在形参中的使用 用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
2.函数无论传入多少关键字参数都可以正常运行
1 def index(x, y, **b): 2 print(x, y, b) 3 index() # {} 4 index(a=1,b=2,c=3,d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} 5 index(y=2, x=1) # 1 2 {} 6 index(y=2, x=1, u=222, k=111, l=444) # 1 2 {'u': 222, 'k': 111, 'l': 444}
**号在形参中的使用 用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
def index(*a,**b): print(a,b) index() # () {} index(1,2,3,4) # (1, 2, 3, 4) {} index(a=1,b=2,c=3) # () {'a': 1, 'b': 2, 'c': 3} index(1,2,3,4,a=1,b=2,c=3) # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
墨守成规
可变长形参 *与**后面的变量名其实是可以随便定义的
但是python中推荐使用
1 *args 2 **kwargs 3 def index(*args, **kwargs): 4 pass
1 # def index(a, b, c): 2 # print(a,b,c) 3 # new_list = [11,22,33] 4 # index(new_list) # 肯定不行 列表是一个整体 相当于一个实参 5 # index(new_list[0],new_list[1],new_list[2]) # 可以 6 '''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入''' 7 # def index1(*args): 8 # print(args) 9 # new_list1 = [11,22,33,44,55,66,77,88,99] 10 # index1(*new_list1) # index1(11,22,33,44,55,66,77,88,99) 11 """ 12 *号在实参中的使用 13 会将列表、元组内的元素打散成位置参数的形式一一传值 14 """ 15 16 # def index2(**kwargs): 17 # print(kwargs) 18 new_dict = {'username':'jason','pwd':123} 19 # index2(**new_dict) # index2(username='jason',pwd=123) 20 # {'username': 'jason', 'pwd': 123} 21 """ 22 **号在实参中的使用 23 会将字典内的键值对打散成关键字参数传入 24 """
函数参数补充
1.命名关键字参数
1 def register(name,age,*,sex,height): 2 pass 3 4 # register('jason',18,'male',183) 5 register('lili',18,sex='male',height='1.8m') #正确使用 6 """ 7 sex height在传入实参的时候必须以关键字参数的形式 8 9 ps:该类型的参数几乎不用 也几乎很少能碰到 10 """
名称空间
1.什么是名称空间(namespaces)
用于存放变量名与变量值绑定关系的地方(类似于民政局)
2.名称空间的分类
内置名称空间
python解释器提前给你定义好的
1 print() 2 len() 3 ...
3.全局名称空间
在py文件中顶格编写的代码运行之后都会存入全局名称空间
1 name = 'jason' # name全局 2 def func(): # func全局 3 pass 4 if 1: 5 a = 123 # a全局 6 for i in range(10): 7 print(i) # i全局 8 while True: 9 a = 123 # a全局
4.局部名称空间
函数体代码运行之后产生的都是局部名称空间
5.存活周期
1.内置名称空间
python解释器启动与关闭而创建和销毁
2.全局名称空间
随着py文件的运行与结束而创建和销毁
3.局部名称空间
随着函数体代码的执行与结束而创建和销毁
名字的查找顺
在查找名字的时候 要先确定自己当前在哪序
1.如果你在局部
局部 >>> 全局 >>> 内置
2.如果你在全局
全局 >>> 内置
3.局部名称空间的嵌套
1 '''函数在定义阶段名字的查找顺序就已经固定死了(特例)''' 2 x = 111 3 def f1(): 4 x = 222 5 def f2(): 6 x = 333 7 def f3(): 8 x = 444 9 def f4(): 10 x = 555 11 print(x) 12 # x = 555 特例 13 f4() 14 f3() 15 f2() 16 # 通过调用f1 执行所有的函数 17 f1()
------------恢复内容结束------------