函数-变量-参数-递归
一、局部变量和全局变量
局部变量:在函数里面定义的变量都是局部变量,出了函数之后就不能用了
全局变量:在文件最上面定义的这个变量,就是全局变量,一般定义在代码的最上面,大家都可以用的
全局变量会一直占用内存,不释放,直到程序运行完成之后才会释放。
局部变量是函数运行的时候占用一次,函数运行完就释放。所以实际使用中如何可以用局部变量就尽量用局部变量
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.168.1.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_soft\Miniconda3\python.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