初识函数

初识函数

1. 函数的定义

    函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

          函数能提高应用的模块性,和代码的重复利用率。

          你已经知道Python提供了许多内建函数,比如print()。

          但你也可以自己创建函数,这被叫做用户自定义函数。

2. 函数的结构

 1 def 函数名(参数1,参数2):
 2    '''函数注释'''
 3     函数体代码
 4     return 返回值
 5 """
 6 1.函数必须先定义后调用
 7 2.函数在定义阶段只检测函数体语言  不执行函数体代码
 8 3.函数在调用阶段才会执行函数体代码
 9     如何调用
10         函数名加括号(如果需要额外的条件则传入额外的条件)
11 """


 

 

 

 

    

3. 函数的分类

无参函数
    函数在定义阶段括号内没有参数
有参函数
    函数在定义阶段括号内有参数
空函数
    函数在定义阶段括号内没有参数并且函数体代码为空(pass)
def register():
    pass

def login():
    pass


'''举个栗子
func_dic = {'1': register, '2': login}
while True:
    print("""
    1.注册
    2.登录
    """)
    choice = input('please>>>:').strip()
    if choice in func_dic:
        func_name = func_dic.get(choice)
        func_name()
    else:
        print('功能编号不存在')
'''

4. 函数的参数

  4.1 函数参数的两大分类

 

 1 形式参数
 2     在函数定义阶段括号内所填写的参数 简称"形参"
 3         def func(a, b):
 4             pass
 5            # a和b就是函数func的形参
 6 实际参数
 7     在函数调用阶段括号内传入的参数 简称"实参"
 8         func(1,2)
 9         # 数据1和2就是函数func的实参
10 """
11 形参与实参的关系
12     我们可以将形参看成是变量名 实参看成是变量值
13         两者在函数调用阶段临时绑定 函数运行结束断开    
14     
15 形参的表现形式只有一种就是变量名
16 实参的表现形式有很多种(但是把握核心 就是 数据值)
17 """

 

  4.2 位置参数

 

 1 位置参数
 2     按照从左往右的顺序依次填入的参数
 3 位置形参
 4     在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
 5 位置实参
 6     在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
 7  
 8 # 定义一个可以比较大小的函数(传入两个值 返回较大的)
 9     
10  
11 关键字实参(可以打破位置顺序)
12     在函数调用阶段通过形参名=数据值的形式指名道姓的传值     
13 """
14 1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
15 2.位置参数在绑定的时候多一个不行少一个也不行
16 """
17    
18 '''格式越简单的越靠前 格式越复杂的越靠后'''

 

  4.3 默认参数

 

 1 默认参数
 2     默认形参
 3         函数在定义阶段就可以给形参赋值了
 4             1.该形参在函数调用阶段如果不给值 则使用默认的
 5             2.该形参在函数调用阶段也可以继续给值 则使用你给的
 6         
 7 # 定义学员注册功能
 8     def register(name, age, gender='male'):
 9         print('%s:%s:%s' % (name, age, gender))
10     register('jason', 18)
11     register('tony', 28)
12     register('kevin', 38)
13     register('lili', 18, 'female')
14     register('lili', 18, gender='female')
15  
16 """
17 位置形参与默认值形参在定义的时候
18     位置形参必须在默认值形参的前面
19 """
20 '''格式越简单的越靠前 格式越复杂的越靠后'''

 

  4.4 可变长参数

 1 # 1.函数无论传入多少位置参数都可以正常运行
 2 # 可变长形参
 3 # def func(x,y,*a):
 4 #     print(x,y,a)
 5 # func()  # ()
 6 # func(1)  # (1,)
 7 # func(1, 2, 3, 4, 5, 6, 7)  # (1, 2, 3, 4, 5, 6, 7)
 8 # func(1,2)  # 1 2 ()
 9 # func(1,2,3,4,5,6,7,8,9)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
10 # func(1,2)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
11 """
12 *号在形参中的使用
13     用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
14 """
15 
16 
17 # 2.函数无论传入多少关键字参数都可以正常运行
18 # def index(x, y, **b):
19 #     print(x, y, b)
20 # index()  # {}
21 # index(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
22 # index(y=2, x=1)  # 1 2 {}
23 # index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}
24 """
25 **号在形参中的使用
26     用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
27 """
28 # 3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
29 # def index(*a,**b):
30 #     print(a,b)
31 # index()  # () {}
32 # index(1,2,3,4)  # (1, 2, 3, 4) {}
33 # index(a=1,b=2,c=3)  # () {'a': 1, 'b': 2, 'c': 3}
34 # index(1,2,3,4,a=1,b=2,c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
35 """
36 墨守成规
37     可变长形参 *与**后面的变量名其实是可以随便定义的
38     但是python中推荐使用
39         *args  
40         **kwargs 
41 def index(*args, **kwargs):
42     pass
43 """
44 
45 
46 # def index(a, b, c):
47 #     print(a,b,c)
48 # new_list = [11,22,33]
49 # index(new_list)  # 肯定不行  列表是一个整体 相当于一个实参
50 # index(new_list[0],new_list[1],new_list[2])  # 可以
51 '''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入'''
52 # def index1(*args):
53 #     print(args)
54 # new_list1 = [11,22,33,44,55,66,77,88,99]
55 # index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)
56 """
57 *号在实参中的使用
58     会将列表、元组内的元素打散成位置参数的形式一一传值
59 """
60 
61 # def index2(**kwargs):
62 #     print(kwargs)
63 new_dict = {'username':'jason','pwd':123}
64 # index2(**new_dict)  # index2(username='jason',pwd=123)
65 # {'username': 'jason', 'pwd': 123}
66 """
67 **号在实参中的使用
68     会将字典内的键值对打散成关键字参数传入
69 """

  4.5 函数参数补充(了解)

 1 命名关键字参数
 2     def register(name,age,*,sex,height):
 3         pass
 4 
 5     # register('jason',18,'male',183)
 6     register('lili',18,sex='male',height='1.8m') #正确使用
 7     """
 8     sex height在传入实参的时候必须以关键字参数的形式
 9 
10     ps:该类型的参数几乎不用 也几乎很少能碰到
11     """

 

 

 

 

posted @ 2021-11-16 16:11  XX_Bb  阅读(43)  评论(0编辑  收藏  举报