欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python函数的相关操作

程序员文章站 2022-07-09 10:19:26
...

python函数的相关操作

函数上

  • 定义函数

    def print_helloworld():
        print("hello world")
    
    
    #这是定义函数
    
  • 定义和调用函数

    #定义函数
    def print_helloworld():
        print("hello world")
    
    #调用函数
    print_helloworld()
    
    # 运行结果
    hello world
    
  • 带参函数

    def calculator(num1,num2):
        reault = num1+num2
        print("%d+%d=%d"%(num1,num2,reault))
    
    
    num1 = int(input("请输入第一个数字:"))
    num2 = int(input("请输入第二个数字"))
    calculator(num1,num2)
    
    # 运行结果
    请输入第一个数字:5
    请输入第二个数字6
    5+6=11
    
  • 函数返回值

    def calculator(num1,num2):
        reault = num1+num2
        print("%d+%d=%d"%(num1,num2,reault))
        return reault
    
    def number(num):
        num+=3
        print(num)
    
    
    num1 = int(input("请输入第一个数字:"))
    num2 = int(input("请输入第二个数字"))
    reault = calculator(num1,num2)
    number(reault)
    
    # 运行结果
    请输入第一个数字:5
    请输入第二个数字6
    5+6=11
    14
    
  • 函数一次反回多个值

    # 函数不能多个return
    # 函数遇到return就结束
    # 函数反回多个值的方法有很多种
    # 我就不一一列举
    def test():
        a = 11
        b = 22
        c = 33
        d = [a,b,c]
        return d
    #第一种   return d
    #第二种   return [a,b,c]
    #第三种   return (a,b,c)
    #第四种   return  a,b,c
    # 第四种等价第三种 都是以元组反回
    # 字典也可以能把多个书封装在一起的都可以就不一一
    #列举了
    num = test()
    print(num)
    
    # 运行结果
    [11, 22, 33]
    
  • 函数的嵌套调用

    def print_sum(num1,num2):
        result = num1 + num2
        return result
        
    def print_avg(num):
        num/=2
        return 2
    
    def print_avg_square(avg):
        avg**=2
        return avg
    
    
    #请输入两个数
    num1 = int(input("请输入第一个数:"))
    num2 = int(input("请输入第二个数:"))
    two_sum = print_sum(num1,num2)
    print("两数的和:%d"%two_sum)
    avg = print_avg(two_sum) 
    print("两数的开方:%d"%avg)
    square = print_avg_square(avg)
    print("两数开方的平方:%d"%square)
    
    # 运行结果
    请输入第一个数:5
    请输入第二个数:6
    两数的和:11
    两数的开方:2
    两数开方的平方:4
    
  • 函数的嵌套调用应用

    def test1():
        print("*"*50)
    
    def test2():
        i = 0
        while i<5:
            test1()
            i+=1
    test2()
    
    # 运行结果
    **************************************************
    **************************************************
    **************************************************
    **************************************************
    **************************************************
    

函数下

局部变量和全局变量

  • 局部变量

    def test1():
        a = 100  #a是test1函数里面的局部变量
        print("a = %d"%a)
    def test2():
         #test2 不能直接用test1里面的a变量
        pass
    
    test1()
    test2()
    
    # 运行结果
    a = 100
    
  • 全局变量

    a = 100 #全局变量
    
    def test1():
        print("a = %d"%a) #先找函数里的局部变量 然后 找函数外的全局变量
    
    def test2():
        print("a = %d"%a)
    
    test1()
    test2()
    
    # 运行结果
    a = 100
    a = 100
    
  • 全局变量和局部变量的区别

    
    '''
    # 局部变量的用法
    def get_wendu():
        wendu = 100
        return wendu
    
    def print_wendu(num):
        print("wendu=%d"%wendu)
    
    num = get_wendu()
    print_wendu(num)
    '''
    
    # 全局变量的用法
    wendu = 0
    def get_wendu():
        #如果wendu这个变量已经在全局变量的位置定义了,此时还想在函数中对这个全局变量进行修改的话
        #那么 仅仅是 wendu=一个值 这还不够,,,此时wendu这个变量是一个局部变量,仅仅是和全局变量的
        #名字相同罢了
        #wendu = 33
    
    
        #使用 global 用来对一个全局变量的声明,那么这个函数中的wendu = 33 就不是应以一个局部变量,而是
        #对全局变量进行修改
        global wendu #提示计算机下面用到全局变量
        wendu = 33
    
    def print_wendu():
        print("wendu=%d"%wendu)
    
    get_wendu()
    print_wendu()
        
    
    # 运行结果
    wendu=33
    
  • 全局变量的定义位置

    a = 10
    b = 20
    c = 30
    def test():
        print(a)
        print(b)
        print(c)
    
    
    test()
    #只要在函数调用前定义的全局变量  都有效
    #不过 一般 定义函数的最上面写 全局变量
    #然后定义函数
    #在调用函数  这三个模块
    
    # 运行结果
    10
    20
    30
    
  • 全局变量和局部变量名字相同

    a = 100
    # 定义全局变量
    # 最好在变量前面加 g_a = 100 一看就知道是个global的全局变量
    def test1():
        a = 200 #在函数中 如果对一个和全局变量名字相同的变量进行=value的时候,默认是定义一个变量
                #只不过这个变量的名字和全局变量的名字相同罢了
                #
                #如果想在执行a=value时,不是定义局部变量,而是对全局变量修改,那么可以添加global进行声明
        print("a = %d"%a)
    
    def test2():
        print("a = %d"%a)#如果打印了100就声明了test函数没有对全局变量进行修改,而是定义了一个局部变量
    
    test1()
    test2()
    
    # 运行结果
    a = 200
    a = 100
    

函数

  • 名片管理系统-函数版

    #用来存储名片
    card_infors = []
    
    def print_menu():
        '''这是完成打印功能的'''
        print("="*50)
        print(" 名片管理系统 8v.6")
        print(" 1、添加一个新的名片")
        print(" 2、删除一个名片")
        print(" 3、修改一个名片")
        print(" 4、查询一个名片")
        print(" 5、显示所有的名片")
        print(" 6、退出系统")
        print("="*50)
    
    #1、打印功能提示
    print_menu()
    
    
    def append_list():
        '''这是完成添加功能的'''
        global card_infors
        new_name = input("请输入新的名字:")
        new_qq = input("请输入新的qq:")
        new_weixin = input("请输入新的weixin:")
        new_addr = input("请输入新的地址:")
    
        #定义一个新的字典,用来存储一个新的名片
    
        new_infor = {}
        new_infor['name'] = new_name
        new_infor['qq'] = new_qq
        new_infor['weixin'] = new_weixin
        new_infor['addr'] = new_addr
    
        #将一个新的字典,添加到列表中
        card_infors.append(new_infor)
    
        #print(card_infors) for test
        print("="*50)
        print()
    
    def del_list():
        '''这是完成删除功能的'''
        global card_infors
        new_name = input("请输入你要删除人的姓名:")
        lenght = len(card_infors)
        i = 0
        while i<lenght:
        
            if card_infors[i]['name'] == new_name:
                del card_infors[i]
                break
            i+=1
        print("="*50)
        print()
    
    def amend_list():
        '''这是完成修改功能的'''
        global card_infors
        index = 0
        i = 0
        name = input("请输入你要修改的名字:")
        for dict_name in card_infors:
            if dict_name['name'] == name:
                card_infors[i]['name'] = input("请输入一个新的名字:")    
                card_infors[i]['qq'] = input("请输入一个新的qq:")    
                card_infors[i]['weixin'] = input("请输入一个新的weixin:")    
                card_infors[i]['addr'] = input("请输入一个新的地址:")
                #表示找到了
                index=1
                break
            i+=1
        #判断是否找到
        if index == 0:
            print("没有找到。。。")
        print("="*50)
        print()
    
    def in_list():
        '''这是完成查询功能的'''
        global card_infors
        index = 0
        name = input("请输入你要查找的名字:")
        for dict_name in card_infors:
            if dict_name['name'] == name:
                index+=1
                print("名字\tQQ\t微信\t住址")
                print("%s\t%s\t%s\t%s"%(dict_name['name'],dict_name['qq'],dict_name['weixin'],dict_name['addr']))
                break
        if index == 0:
            print("没找到。。。")
        print("="*50)
        print()
    
    def show_list():    
        '''这是显示当前名片信息的功能的'''
        global card_infors
        print("名字\tQQ\t微信\t住址")
        for card in card_infors:
            print("%s\t%s\t%s\t%s"%(card['name'],card['qq'],card['weixin'],card['addr']))
        print("="*50)
        print()
    
    def main():
        '''完成对整个程序的控制'''
        while True:
            #2、获取用户的输入
            reault =int(input("请输入你的选择:"))
    
            #3、根据用户的输入,执行相应的功能
            if reault == 1:
                append_list()
    
            elif reault == 2:
                del_list()
    
            elif reault == 3:
                amend_list()
    
            elif reault == 4:
                in_list()
    
            elif reault == 5:
                show_list()
    
            elif reault == 6:
                break
            else:
                print("你输入的有误,请亲从新输入(1-5)谢谢亲的配合。。。")
    
    #调用主函数
    main()
    
    
    # 运行结果
    ==================================================
     名片管理系统 8v.6
     1、添加一个新的名片
     2、删除一个名片
     3、修改一个名片
     4、查询一个名片
     5、显示所有的名片
     6、退出系统
    ==================================================
    请输入你的选择:1
    请输入新的名字:李白
    请输入新的qq:131231231
    请输入新的weixin:21312312
    请输入新的地址: 老街
    ==================================================
    
    请输入你的选择:5
    名字	QQ	微信	住址
    李白	131231231	21312312	老街
    ==================================================
    
  • 缺省函数

    #这里默认的b == 22 如果你传了b的值就用传的那个值 缺省参数只能放在最后面
    # b,c缺省参数
    def test(a,b=22,c=33):
        print(a)
        print(b)
        print(c)
    
    
    test(11)#默认是一个个相对传递
    print("*"*50)
    
    
    #c是命名参数  意思是给指定的形参赋值
    test(22,c=44)
    print("*"*50)
    
    #命名参数
    test(a=11,b=33,c=55)
    print("*"*50)
    
    # 运行结果
    11
    22
    33
    **************************************************
    22
    22
    44
    **************************************************
    11
    33
    55
    **************************************************
    
  • 不定长参数一

    def test(a,b,*args):
        print(a)
        print("*"*50)
        print(b)
        print("*"*50)
        print(args) #args把剩下的值当元组反回
        print("*"*50)
        sum_value = 0
        for temp in args:
            sum_value+=temp
        print(sum_value)
        print("="*50)
    # result = a+b
    #   print("result=%d"%result)
    #   print("*"*50)
    
    test(11,22,33,44,55,66,77)
    test(11,22,33)
    test(11,22)
    #test(11) 错误,因为 形参有2个 所以也至少要传递2个实参 args可以忽略
    
    # 运行结果
    11
    **************************************************
    22
    **************************************************
    (33, 44, 55, 66, 77)
    **************************************************
    275
    ==================================================
    11
    **************************************************
    22
    **************************************************
    (33,)
    **************************************************
    33
    ==================================================
    11
    **************************************************
    22
    **************************************************
    ()
    **************************************************
    0
    ==================================================
    
  • 不定长参数二

    def test(a,b,c=33,*args,**kwargs):
        print(a)        #必须传的a
        print(b)        #必须传的b
        print(c)        #可选的c
        print(args)     #多余的没名字的以元组打印
        print(kwargs)   #多余的有名字以字典形打印
    
    test(11,22,33,44,55,66,77,task=99,done=89)
    
    # 运行结果
    11
    22
    33
    (44, 55, 66, 77)
    {'task': 99, 'done': 89}
    
  • 拆包,元组.字典

    def test(a,b,c=33,*args,**kwargs): #这写*表示保留一些特殊的值
        print(a)        #必须传的a
        print(b)        #必须传的b
        print(c)        #可选的c
        print(args)     #多余的没名字的以元组打印
        print(kwargs)   #多余的有名字以字典形打印
    
    #test(11,22,33,44,55,66,77,task=99,done=89)
    A = (44,55,66)
    B = {'name':'laowang','age':18}
    
    test(11,22,33,A,B)#这里的A,B都传递给了args当成了元组,因为没有名字
    print("*"*50)
    test(11,22,33,*A,**B) #这里的*是拆包元组 ,**是拆包字典
    
    # 运行结果
    11
    22
    33
    ((44, 55, 66), {'name': 'laowang', 'age': 18})
    {}
    **************************************************
    11
    22
    33
    (44, 55, 66)
    {'name': 'laowang', 'age': 18}
    
  • 引用

    a = [11,22,33] #a指向了这个地址
    b = a#b也指向了这个地址
    a.append(44)
    print(a)
    print(id(a))#查看a的地址
    print("***************************")
    print(b)
    print(id(b))#查看b的地址
    
    # 运行结果
    [11, 22, 33, 44]
    4330477960
    ***************************
    [11, 22, 33, 44]
    4330477960
    
  • 不可变.可变类型

    '''
    不可变:
        数字
        字符串
        元组
    
    可变:
        列表
        字典 字典的键必须是不可变类型
    '''
    
  • 递归

    def fact(num):
        '''递归函数'''
        if num > 1:
            return num*fact(num-1)
        else:
            return num
    num = int(input("请输入一个数:"))
    number = fact(num)
    print(number)
    
    # 运行结果
    请输入一个数:5
    120
    
  • 递归的问题

    def test():
        print("hahaha")
       ''' test()  #死循环的递归'''
    
    test()
    
    # 递归必须要有结束条件
    
相关标签: 函数