• 函数-变量-参数-递归


     一、局部变量和全局变量

    局部变量:在函数里面定义的变量都是局部变量,出了函数之后就不能用了

    全局变量:在文件最上面定义的这个变量,就是全局变量,一般定义在代码的最上面,大家都可以用的

    全局变量会一直占用内存,不释放,直到程序运行完成之后才会释放。

    局部变量是函数运行的时候占用一次,函数运行完就释放。所以实际使用中如何可以用局部变量就尽量用局部变量

    name = '小黑'
    FILE_NAME = 'goods.json' # 常量
    
    # 局部变量
    #   在函数里面定义的变量都是局部变量,出了函数之后就不能用了
    # 全局变量
    #   在文件最上面定义的这个变量,就是全局变量
    def hhh():
        global name # global函数定义说明使用的是全局变量
        name = '小白'
        print(name)
    hhh()
    print(name)

    二、字典和list

     字典和list,这种可变变量,不需要用global来声明,就可以直接改了

    str、int、float、tuple、bool需要声明的

    d =  {'name':'abc'}
    #字典和list,这种可变变量,不需要用global来声明,就可以直接改了
    
    def my():
       d['sex'] = 29
       print(d)
    my()
    print(d)

    三、可选参数(参数组)

    可选参数,它不是必传的,不限制参数个数,它是把参数放到了一个list里面

    习惯性的使用args作为参数

    #可变参数,参数组
    def send_mail(*args):
        print(args)
        print('eamil..',args)
    
        #print('给xxx发邮件了%s'%email)
    send_mail('niuhanyang@163.com')
    send_mail('niuhanyang@163.com','lxy@qq.com','zyf@126.com')
    send_mail()

    四、可变参数,参数组

    def run(name,age=29,*args):
        print(name)
        print(age)
        print('args..',args)
    run('Lcs',28,'beijing','天通苑')
    #1、是否必填
    #2、有没有限制参数个数

    五、

    def nhy():
        name = '牛牛'
        sex = ''
        age = 18
        return name,sex,age
    
    a,b,c = nhy()
    print(a,b,c)

    六、

    def op_db(ip,port,db,user,passwd,sql):
        print('连接mysql操作数据库')
        pass
    
    op_db('192.1681.12','xxx',3306,'sdf','sdf','sdf')
    op_db('192.169.1.12',3306,user='root',passwd='12345',db='jxz',sql='select')
    
    #位置参数(必填参数),默认值参数(不必填),可变参数(不必填的,不限制参数个数)
    #关键字参数

    七、关键字参数

    关键字参数,它不是必传的,不限制参数个数,它是把参数放到了一个字典里面,
    但是它传参的时候必须得用关键字的方式
    一般习惯使用kwargs作为参数
    # 关键字参数
    def my(**info):
        print(info)
    
    my(name='hhh',sex='',age=18)
    my()
    my(type='car',a=1,c=1)
    # 1、是否必填(不必填)
    # 2、有没有限制参数个数(没有限制)
    # 3、把传过来的参数放到了什么里面(放到了字典里面)

    def my(name,sex='',*args,**kwargs):
        print(name)
        print(sex)
        print(args)
        print(kwargs)
    
    my('hhh','yyy','args','args2',k='1',k2='v2')

    八、如果几种参数同时使用,顺序是一定的(了解即可,用到的次数较少)

    必须按照如下顺序:

    #1、必填参数
    #2、默认值参数
    #3、参数组
    #4、关键字参数
    如:
    def nb_func(name,age,country='China',sex='',*args,**kwargs):
        #1、必填参数
        #2、默认值参数
        #3、参数组
        #4、关键字参数
        print(name)
        print(age)
        print(sex)
        print(country)
        print(args)
        print(kwargs)
    
    nb_func('xh',18,'abc','efg','hhh',name=1,b=2,c=3)

     如果关键字参数未传,则为空

    nb_func('xh',18,'japan','nan','abc','efg','hhh','2335','23532')

    必填参数不可不传。

    九、递归

    递归:函数自己调用自己

    用递归的话,必须得有一个明确的结束条件

    count = 0
    #递归,函数自己调用自己
    def add():
        global count
        count+=1
        print('hhh',count)
        #add()
    add()
    #递归的话,最多循环999次

    def my2():
        num = input('输入一个数字:')
        num = int(num)
        if num%2 !=0:
            print('请输入偶数')
            return my2()
    my2()
    #1、用递归的话,必须得有一个明确的结束条件

    十、列表推导式、列表生成式

    res = [26, 7, 18, 27, 32, 28]
    for i in range(len(res)):
      res[i] = str(res[i]).zfill(2)
    print(res)

    以上循环可用列表推导式、列表生成式实现:

    res = [26, 7, 18, 27, 32, 28]
    
    #列表推导式,列表生成式
    res1 = [ str(i).zfill(2) for i in res]
    print(res1)

    其他示例:

    示例1:

    res = [26, 7, 18, 27, 32, 28]
    
    res2 = [ i+10 for i in res ]
    print(res2)

    示例2:

    #1000 偶数
    hh = [ i for i in range(0,1001,2)]
    print(hh)

     运行结果:

    D:work_softMiniconda3python.exe F:/python-besttest/day05/aaa.py
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000]
    
    Process finished with exit code 0

    十、函数传参

    传参是list或者字典时,可以使用1个星号*或者两个星号**进行拆包,传参

    def hhh(name,age,sex):
        print(name)
        print(age)
        print(sex)
    
    l = ['xh',18,'nan']
    d = {'name':'xh','age':18,'sex':'nan'}
    hhh(*l)# 'xh',18,'nan'
    hhh(**d)#name=xh,age=18,sex=nan
  • 相关阅读:
    一个星期自动态的网站设计
    java特权制度设计篇
    mac默认截图、截图代码
    NSDateFormatter
    vlan 以及 Linux实现的IEEE 802.1Q VLAN
    gtk+blade+anjuta 的简单实例
    NetBSD是个开源到源码的系统
    创作gtk源码级vim帮助文档 tags
    linux 怎么使用一个c/c++库
    linux 终端控制-- 多彩输出 格式排版
  • 原文地址:https://www.cnblogs.com/Noul/p/9278709.html
Copyright © 2020-2023  润新知