函数的参数

函数参数的两个类型

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()

函数的参数

 

------------恢复内容结束------------

上一篇:python学习之路:十一.函数


下一篇:第二类斯特林数小记