函数-变量-参数-递归

 一、局部变量和全局变量

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

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

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

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

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

 

posted @ 2018-07-07 22:41  灿烂初秋  阅读(490)  评论(0编辑  收藏  举报