函数
函数:提高代码的复用性,让代码更简洁(函数、方法、功能指的都是函数)
函数名一定要见名知意
#return
1
def say hello(): #定义函数名
print('hello') #函数体
函数不调用是不会被执行的
调用函数
say hello( ) #调用函数
实现乘法计算:
def call(a,b): #形参,形式参数、位置参数、必填参数
res=a*b
print('%s*%s=%s'%(a,b,res))
call(7,8) #实参,实际参数
局部变量:函数里面定义的变量只能在函数里面用,出了函数就不能用了;return=res #调用完函数之后,返回什么结果
返回的结果如何获取到:res=op_file('a.txt') #res接受的是函数的返回值 print(res);如果不使用return返回,print(res)=None
修改文件的函数:
def op_file(file,connect=None): if connect: with open(file,'a+',encoding='utf-8') as f: f.seek(0) f.write(connect) f.flush() else: with open(file,encoding='utf-8') as f: res=f.read() return res res=op_file('a.txt') print(res)
结束函数用法:最终打印出来的结果是:0,1,2,3
def haha(): for i in range(5): print(i) if i==3: return haha()
最终结果:500
money=500 def test(consume): return money-consume def test1(money): return test(money)+money money=test1(money) print(money)
常量 :大写字母定义的就是常量,常量就是不会变化的;
PORT=3306
FILENAME='user.txt'
全局变量:公共的变量,都可以用的变量
想改全局变量,需要先声明 一下,你修改的值是全局变量
全局变量会一直占着内存,直到程序运行完才释放,所以尽量不用全局变量;
def sayname(): global name name='刘伟' print('name1',name) name='李西囊' return name res=sayname() print(res) 结果: name1 刘伟 李西囊
一种按位置顺序传参,一种按参数名传参,按参数名传参可以不考虑顺序
def op_mysql(host,port,username,password,db,charset,sql): print('连接数据库') op_mysql( '192.168.1.1', 3306,'root','123456','jxz','utf-8','select') op_mysql( '192.168.1.1', db='sfsdf', charset='sdfsdf', sql='select * from user;' )
函数不固定参数
def syz(*args):#参数组: username=args[] pwd=args[1] age=args[2] syz() syz('niuhanyan','2324') syz('is','sdf')
关键字参数
def sys2(**kwargs): #关键字参数 pring(kwargs) syz2() syz2(name='nhy',age=38) syz2(name='nhy',age=38,addr='回龙观,home='河南') syz2('nhy') 1、必须指定XX='XXX'
def syz(a,*args): #参数组 print(a) username = args[0] pwd = args[1] age = args[2] # syz('niuhanyang','2423',2323) # syz('1s','sdf') def syz2(time,**kwargs): #关键字参数 print(kwargs) syz2('sdf') syz2(name='nhy',age=38,time='20180912') syz2('2018',name='nhy',age=38,addr='回龙观',home='河南') syz2(time='xx',xx='xxx') #1、必填参数还是非必填的 #2、它有没有限制参数个数 #3、它是把传过来的参数放到哪里
递归
函数自己调用自己就叫递归,可以实现循环功能,但递归的效率不高,写代码少用递归,递归最大循环次数是999次
i=0
def test():
global i
i+=1
print(i)
test()
test()
# def say(): # num1=1 # num2=2 # num3=3 # return num1,num2,num3,4 # res=say() # print(res) #1、函数如果返回多个值的话,会把值放在元组里面 #结果:(1, 2, 3, 4) def say(): num1=1 num2=2 num3=3 return num1,num2,num3 res1,res2,res3=say() print(res1) print(res2) print(res3) #结果: 1 2 3
字典排序
d={'a':8,'b':2,'c':3} #字典是无序的,直接对字典排序是不存在的 res=sorted(d.items(),key=lambda x:x[1])#下标取1是对值进行排序,0是对key进行排序 print(res) for k,v in res: print(k,v)
# #匿名函数,这个函数功能很简单,只用一次
# res=lambda x:x+1
# res(1)
# print(res(1))
import random
red_num=random.sample(range(1,34),6)
new_num=[str(num).zfill(2) for num in red_num] #列表生成式
l=[i for i in range(1,101,2)]
print(new_num)
#内置函数
#zip # l1=['a','b','c','d','e','f','g'] # l2=[1,2,3,4,5,6,7] # print(list(zip(l1,l2))) # # for a,b in zip(l2,l1): # print(a,b) #zip,就是把俩list合并到一起,把两个一维数组变成二维数组 #a 1 #b 2 #c 3 # # new_lis=[] # def my(num): # return str(num) # lis=[1,2,3,4,5,6,7,8,9] # res=list(map(my,lis)) # print(res) #效果相同,map的功能就是帮你自动循环调用函数 # for i in lis: # new_lis.append(my(i)) # print(new_lis) #filter 也是帮你循环调用函数的,过滤 def even(num): if num%2==0: return True return False lis=[1,2,3,4,5,6,7,8,9] res=filter(even,lis) #filter只保留返回为真的数据 print('filter..',list(res)) res2=map(even,lis) #循环调用函数,返回什么,就保存什么 print('map...',list(res2)) #结果: #filter.. [2, 4, 6, 8] #map... [False, True, False, True, False, True, False, True, False]