一、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