一、python中函数的定义:

定义函数使用def关键字,后面是函数名,函数名不能重复。

其中AB是行参,形参只在函数内部有效,调用函数时传的参数lily和lucy是实参。

def name(A,B=2233):#定义一个函数
      print("Hi")#函数体 
name(liliy,lucy)

二、函数的四种参数类型:

函数中定义四种参数的顺序:位置参数、默认参数,可变参数、关键字参数

位置参数:

位置参数是按照参数的位置来进行传参,A就是位置参数,位置参数是必传的。

位置参数调用时也可以通过指定名字调用,例如A=lily

默认参数:

默认参数是在定义形参的时候,给函数默认赋一个值,B就是默认参数

以后在调用的时候若是没传入这个参数,它就使用默认的值,若是给默认参数传值的话,它就会使用传入的值。

默认值参数必须放在位置参数后面定义。默认参数是非必传的,

可变参数:

可变参数也叫参数组,非必传,是用*来接收的,它不限时参数的个数,传几个都可以,会把参数放到一个元祖里。

def send_sms(*args):
    print('phones',args)
send_sms(110,123) #展示的是元祖

关键字参数:

关键字参数是用**来接收的,非必传,同样不限参数的个数,调用的时候必须使用关键字传参,否则会报错。

1 def kwfunc(**kwargs):
2     print(kwargs)
3 kwfunc() #展示的是字典
4 kwfunc(age=123,name='haha')

三、函数在调用时有一种拆包的方式

当调用时的实参与行参都是一一对应的时候,定义的参数放到list里可以通过*调用,放到字典里可以通过**幸好调用

1 def redis(ip,pwd,port=6379):
 2     print('连接redis')
 3     print(ip)
 4     print(pwd)
 5     print(port)
 6     print('='*10)
 7  redis_info = ['127.0.0.1','123456',6378]#list
 8 # redis(redis_info[0],redis_info[1],redis_info[2])
 9  redis(*redis_info) #这种方式叫拆包,这么写同上一步一个意思
10 
11 redis_info2={'ip':'127.0.0.1','pwd':'123456','port':1111} #字典
12 #redis(redis_info2['ip'],redis_info2['pwd'],redis_info2['port'])
13 redis(**redis_info2) #同上一步一个意思

四、内置函数

1 l='fsdwerabc94'
 2 sorted(l) #排序
 3 print(sorted(l)) #排序
 4 print(all([1,2,3,4,'']))#如果list里面都为真的就返回true
 5 print(any([0,0,0,1]))#判断可迭代的对象里面的值是否有一个为真
 6 print(bin(10))#十进制转二进制
 7 print(bool(0))#把一个对象转换成布尔类型
 8 print(chr(66))#打印数字对应的ascii
 9 print(ord('B'))#打印字符串对应的ascii码
10 print(dict(a=1,b=2))#转换字典
11 s='a'
12 print(dir(s))#打印传入对象的可调用方法
13 print(eval('[]'))#执行python代码,只能执行简单的,定义数据类型和运算
14 print(exec('def a():pass'))#执行python代码
15 print(filter(lambda x:x>5,[12,3,12,2,1,2,35]))#把后面的迭代对象根据前面的方法筛选,过滤数据
16 print(map(lambda x:x>5,[1,2,3,4,5,6]))#调用函数的方法,每次的返回值都会保留
17 print(max([12,3,4,5]))#取最大值 
18 print(min([12,3,4,5]))#取最小值 
19 print(oct(9))#把数字转换成8进制 
20 print(round(3.1415926,3))#取几位小数
21 zip() #同时循环多个list时用zip传

 五、递归函数

递归就是函数自己调用自己,说白了呢就是循环,递归最多循环999次,写个小例子

def func():
    num = int(input('num:'))
    if num % 2 ==0:
        print('是偶数')
        return
    else:
        func() #不是偶数继续执行

func()#递归最多循环 999次

六、匿名函数

写简单函数的时候不需要定义函数,可以直接用匿名函数,匿名函数使用后就不在了,不会占用内存。

匿名函数用lambda,格式:lambda x:x+1 ,冒号前面的是入参,后面的是返回值

lambda x:x+1 等同于下面2行代码:

def f(x)

     return x+1

写一个小例子:

result=list(map(lambda x:str(x).zfill(2),range(1,30)))
print(result)

结果:
['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20',
 '21', '22', '23', '24', '25', '26', '27', '28', '29']

七、enumerate()函数

enumerate()函数能同时获取到list中的下标和元素。

enumerate(l,1)这样表示下标从1开始

例子:

l=['id', 'name', 'sex', 'age', 'addr', 'grade', 'phone', 'gold']
for index,value in enumerate(l):
    print('%s=>%s ' %(index,value))

结果:
0=>id 
1=>name 
2=>sex 
3=>age 
4=>addr 
5=>grade 
6=>phone 
7=>gold