从入门到入狱-------函数(一)

入门 N day

  • 函数概念:

    函数就是对实现某一特定功能代码的封装。

  • 函数的分类(根据定义分类)

    系统函数:python已经定义好的,可以直接使用的函数,例如:print、input、max、min…等等

    自定义函数:由自己定义,自己使用,或者给别人使用的函数

  • 定义函数

    语法:

    def 函数名 (形参列表):

    ​ 函数说明文档

    ​ 函数体

    说明:

    def 关键字,固定写法

    函数名 自己命名,要求规范和变量名一样

    ​ 要求:标识符不能是关键字

    ​ 规范:字母小写,单词之间用_(下划线)隔开,见名知义(看到函数大概 知道函数的功能)

    (): 固定写法(不能省略)

    形参列表 以’变量名1,变量名2,变量名3,…'的形式存在,作用是价格函数外面的数 据传递到函数里面,如果实现函数的功能需要提供外部数据,那么这个函数 就需要形参

    函数说明文档 函数的说明书,本质就是文档注释必须用三个双引号引起来“”“ ”“”

    函数体 和def保持一个缩进的一条或者多条语句(至少一条)实现函数功能的代码段

注意:定义函数的时候不会执行函数体,在没用调用的情况下出错也不会报错
  • 调用函数

    语法:

    函数名(实参列表)

    说明:

    函数名 需要使用的已经定义好的函数名

    () 固定写法,不能省略

    实参列表 以‘数据1,数据2,数据3,…’的形式存在,实参就是需要从函数外部传递 到函数内使用的具体的数据,默认情况下,被调用的函数有多少形参就需要 提供多少个实参

    例1:定义一个函数求任意两个数字的和

    def sum1(num1,num2):
        """
         求两个数字的和(函数功能说明区)
        :param num1: 提供第一个数字 (参数说明)
        :param num2: 提供第二个数字 (参数说明)
        :return: None (返回值说明)
        """
    
       
        print(f'{num1}+{num2}={num1+num2}')
        
        
    sum1(1,2)   # 1+2=3
    

    例2:定义一个函数,求一个数的阶乘:

    def factorial(num):
         """
        求一个数的阶乘
        :param num: 指定的数字
        :return: None
        """
        nums=1
        for i in range(1,num+1):
            nums*=1
        print(f'{num}的阶乘是:{nums}')
        
        
    factorial(4)   # 4的阶乘是:24
            
    

    练习:写一个函数将两个字符串交叉合并

    ‘abc’、‘123’—>a1b2c3
    ‘abcde’、‘123’—>a1b2c3de
    ‘abc’、‘12345’—>a1b2c345

    def strs(str1,str2):
        new_str=''
        # 先交叉拼接相同长度的部分,遍历长度最小的字符串
        for index in range(min(len(str1),len(str2))):
            new_str += str1[index]+str2[index]
        # 再确定尾部,利用切片拼接
        if len(str1) > len(str2):
            new_str += str1[len(str2):]
       	else:
            new_str += str2[len(str1):]
        print(new_str)
        
        
    strs('abcdef','123456456')   # a1b2c3d4e5f6456
    # 同一个函数可以调用多次
    strs('abcdef','123')     # a1b2c3def
    
  • 函数的参数

    位置参数:

    以 ’ 实参1,实参2,实参3,…'的形式存在,让实参和形参一一对应

    关键字参数:

    以 ’ 形参1=实参1,形参2=实参2,…‘的形式存在,这个参数的位置可以随意更改

    位置参数和关键字参数混用时,位置参数必须在关键字参数的前面

    def func1(a,b,c):
        print(f'a:{a},b:{b},c:{c}')
    
    
    # 位置参数
    func1(1,2,3)  # a:1,b:2,c:3
    func1(3,2,1)  # a:3,b:2,c:1
    # 关键字参数
    func1(a=10,c=20,b=30)  # a:10,b:30,c:20
    # 位置参数和关键字参数混用
    func1(10,c=20,b=1)   # a:10,b:1,c:20
    
    

    参数默认值

    定义函数的时候可以直接给一个或者多个形参赋默认值

    有默认值的参数在调用的时候可以不传参

    def func2(a=1, b=2, c=3):
        print(f'a:{a},b:{b},c:{c}')
    
    
    func2()  # a:1,b:2,c:3
    func2(15, 16)  # a:15,b:16,c:3
    func2(b=100)  # a:1,b:100,c:3
    
    
    def func3(a, b, c=3):
        print(f'a:{a},b:{b},c:{c}')
    
    
    func3(10, 20)  # a:10,b:20,c:3
    func3(10, 20, 30)  # a:10,b:20,c:30
    

    有默认值的参数必须在没有默认值的参数后面,不然会报错

    '''
    def func3(a, b=1, c):
        print(f'a:{a},b:{b},c:{c}') # SyntaxError: non-default argument follows default argument
    
    '''
    
  • 不定长参数

    定义函数的时候如果参数个数不确定,可以使用不定长参数

    1.带*的不定长参数

    在形参前加*,让这个形参变成不定长参数,可以同时接受多个实参(必须使用位置参数传参,不然会报错) 这个参数的本质是一个元组

    2.带**的不定长参数

    在形参前加**,让这个形参变成不定长参数,可以同时接受多个实参(必须使用关键字参数传参,不然会报错) 这个参数的本质是一个字典

    定义一个函数,求多个数的平均值

    def mean(*num):
        print(num) # ()元组
        sum1 = 0
        if len(num) != 0:
            for i in num:
                sum1 += i
            print(sum1/len(num))
        else: 
        	print('0')
            
            
    mean(1,2,3,4)    # 2.5    
    mean()      # 0
    

    一个*的情况

    def func4(x,*y):
        print('x:', x, 'y:', y)
        
    
    func4(1)  # x: 1 y: ()
    
    
    def func5(*x,y):
        print('x:', x, 'y:', y)
    
    func5(1,2,3,4,5,y=100)   # x: (1, 2, 3, 4, 5) y: 100
    

    两个*的情况

    def func6(*args,**kwargs):
        print(args,kwargs)
        
        
    func6(a=1,b=2)    #() {'a': 1, 'b': 2}
    func6(1,2,name=1,name2=2)   # (1, 2) {'name': 1, 'name2': 2}
    func6()    # () {}
    
    

猜你喜欢

转载自blog.csdn.net/weixin_44628421/article/details/108984779