• 函数及相关操作


    一、函数的创建和调用

    1、什么是函数

    • 函数就是执行特定任务和完成特定功能的一段代码

    2、函数创建格式

    def sum(a,b): #a,b称为形式参数,简称形参,形参的位置是在函数的定义处
        c=a+b
        return c
    
    result=sum(10,60)  #10,60称为实际参数的值,简称实参,实参的位置是函数的调用处
    print(result)
    
    运算结果:
    
    70

    3、函数调用的参数传递

    • 位置实参——根据形参对应的位置进行实参传递
    • 关键字实参——根据形参名称进行实参传递

    4、在函数的调用过程中,进行参数的传递。如果是不可变对象,在函数体的修改不会影响实参的值;如果是可变对象,在函数体中的修改会影响带实参的值

    n1=10
    n2=['hello','world']
    test(n1,n2)
    print(n1)  #10 可以发现n1的值没有发生改变,因为n1是不可变对象
    print(n2)  #['hello', 'world', 10]  可以发现n2发生了变化,因为n2是可变对象

    二、函数的返回值

    1、如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】,return可以省略

    2、函数的返回值,如果是1个,直接返回类型

    3、函数的返回值,如果是多个,返回的结果为元组

    #判断基数与偶数
    odd=[]
    even=[]
    def fun(lst):
        for i in lst:
            if i%2==0:
                even.append(i)
            else:
                odd.append(i)
        return odd,even
    
    lst=[10,29,34,23,44,53,55]
    print(fun(lst))  #可以发现已元组的形式输出

    三、函数参数定义

    1、函数定义默认值参数——函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参

    def fun(a,b=20):
        print(a,b)
    
    #函数的调用
    fun(100)     #100 20(在这里可以发现,只传入一个参数第二个参数使用默认值)
    fun(100,200) #100 200

    2、个数可变的位置参数

    • 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
    • 使用*定义个数可变的位置形参
    • 结果为一个元组
    def fun(*args):   #函数定义时的可变的位置参数
        print(args)
    
    #结果以元组的形式返回
    fun(10)
    fun(100,200)
    fun(30,40,50)
    
    运算结果:
    
    (10,)
    (100, 200)
    (30, 40, 50)

    3、个数可变的关键字形参

    • 定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
    • 使用**定义个数可变的关键字形参
    • 结果为一个字典
    def fun(*args):  #函数定义时的可变的位置参数,结果为一个元组
        print(args)
    
    fun(10)
    fun(10,30)
    fun(30,405,50)
    
    def fun1(**args):  ##函数定义时的可变的关键字参数,结果为一个字典
        print(args)
    
    fun1(a=10)
    fun1(a=10,b=20)
    
    '''
    def fun2(*args,*a):
        pass
    可以发现报错:个数可变的位置参数只能有一个;同理,个数可变的关键字参数也只能有一个
    在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求是个数可变的位置形参放在个数可变的关键字形参之前
    '''

    4、函数的调用

    将列表中的每个元素都转换为位置实参——使用*

    将字典中的每个键值对都转换为关键字实参——使用**

    def fun(a,b,c):#sa,b,c在函数的定义处,所以只是形式参数
        print('a=',a)
        print('b=',b)
        print('c=',c)
    
    '''
    函数的调用
    '''
    fun(10,20,30)#函数调用时的参数传递,称为位置传参
    lst=[10,20,30]
    #fun(lst)#不能直接把lst列表传入函数中,因为lst相当于是一个对象
    fun(*lst)#在函数调用中,使用*可以将列表中的每个元素都转换为位置实参传入
    
    print('______________________')
    fun(a=100,c=300,b=200)
    dic={'a':111,'b':222,'c':333}
    #fun(dic)#报错,dic只是一个对象,需要添加**将字典里面数据转化为关键字实参
    fun(**dic) #在函数调用时,将字典中的键值对都转化为关键字实参传入

    5、函数的定义

    def fun(a,b=10): #b是在函数的定义处,所以b是形参,而且进行了赋值,所以b称为默认值形参
        print(a)
        print(b)
    
    def fun2(*args): #个数可变的位置形参
        print(args)
    
    def fun3(**args2):#个数可变的关键字形参
        print(args2)
    
    fun2(10,20,30,40)   #元组
    fun3(a=10,b=20,c=30)#字典
    
    def fun4(a,b,c,d):
        print('a=', a)
        print('b=', b)
        print('c=', c)
        print('d=', d)
    
    #调用fun4函数
    fun4(10,20,30,40)#位置实参传递
    fun4(a=10,b=20,c=30,d=40)#关键字实参传递
    fun4(10,20,c=30,d=40)#前两个参数采用位置实参传递,后两个参数采用关键字实参传递
    '''
    如果只想c,d采用关键字实参传递,这需要在创建函数的时候在c,d前加一个*
    def fun4(a,b,*,c,d):
        print('a=', a)
        print('b=', b)
        print('c=', c)
        print('d=', d)
    '''

    四、函数变量

    局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明会变成全局变量

    全局变量:在函数体外定义的变量,可作用于函数内外

    def fun(a,b):
        c=a+b
        print(c)
    
    #print(a)  可以发现报错,因为 a c 都是局部变量
    #print(c)
    
    name='杨老师' #name的作用范围为函数内部和外部都可以使用——全局变量
    print(name)
    
    def fun2():
        print(name)
    fun2()
    
    def fun3():
        global age#使用global声明变量,可以使得局部变量变为全局变量
        age=20
        print(age)
    fun3()
    
    print(age)#报错,age是局部变量
    
    运行结果:
    
    杨老师
    杨老师
    20
    20
    

      

  • 相关阅读:
    平衡二叉查找树——AVL树
    Java 输入输出(一)——流
    C++获取系统当前时间(精确到微秒)
    C++ STL中哈希表 hash_map介绍
    ubuntu下面编译libuv
    linux使用select实现精确定时器详解
    .dll,.lib,.def 和 .exp文件
    没有core文件时候如何定位segment/core dump
    C++中string、char *、char[]的转换
    map自定义结构体作为key
  • 原文地址:https://www.cnblogs.com/xiaoqing-ing/p/14987077.html
Copyright © 2020-2023  润新知