一、函数
定义:函数是将一组语句的集合通过一个名字(函数名)封装起来,要执行这个函数,只需要调用函数名即可
特性
1.减少重读代码
2.可扩展性
3.使得程序变得易维护
1 def f(): 2 if ......: 3 f()#调用函数 4 def sayHI(name,age): 5 print('hello:%s'%name,age) 6 sayHI('songxiaonan',22)
函数的参数: 默认参数 所有的默认参数必须写在位置参数后面
关键参数 指定参数名 进行赋值
非固定参数 *args 以元组的形式传入数据
**kwargs 以字典的形式传入数据
def test(name,age,address,id,*args,**kwargs,salary=1): print('用户信息:%s,%s,%s,%s,%s'%(name,address,age,salary,id)) print('加入的其他参数:',args) print('加入的其他参数:', kwargs) test('song','xiao','nan',100,'book','1',book='追风筝的人',sel=200)
局部变量:只在函数内部生效
全局变量:一般定义在文件开头 局部变量和全部变量不冲突,如果重名,函数中想要修改全局变量,需要:global 变量名 变量名=值
name='songxiaonna' def f(): global name name='00000000' print(name)4 f() print(name)
返回值 :1、一旦函数经过调用并开始执行,外部的程序就没有办法再控制函数的执行过程,此时只能等待函数的执行结果,外部程序要根据函数的执行结果来决定下一步怎
怎么走,所以,执行结果就是以return的形式返回给外部程序
2、return代表着一个函数的结束
3、返回值可以返回任意数据类型
4、对于用户角度,函数可以返回任意数量的值,但是对于python,函数只能返回一个值
二:递归函数
一个函数在内部调用自己,这个函数就是递归函数
def fun(n): print('haha---------haha',n+1) fun(n+1) fun(0) def calc(n): if n//2>0: calc(n//2) print(n) calc(10)
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
三、匿名函数 lambda
无参数 fun=lambda :true
带参数:fun=lambda x,y:x+y
name='songxiaonan' def upper(data): Name=data.upper() return Name for i in map(upper,name):#前年是函数名 注意:不用加上(),后面是被函数的对象 print(i)
#以上的代码,可以用匿名函数: name='songxiaonan' map(lambda data:data.upper(),name) for i in map(lambda data:data.upper(),name): print(i)
四、内置函数
a=abs(-9)#求绝对值 all(['1',0])#元组、列表、字符串等集合中均为true的时候返回true,为空时,返回true any()#元组、列表、字符串等集合中一个元素为true返回true,为空时,返回false cmp(1,2)#比较xy的大小,x>y返回1,相等返回0,x<y返回-1 map(function,iterable)#遍历每个元素,执行function操作,并返回一个列表 filter(function,iterable)#遍历每个元素,执行function操作,并返回该funtion返回真值时的所有项,过滤函数返回假值的所有项 chr(67)#返回序号67在ascii表中对应的字符 ord()#返回指定字符串对应的ascii码或者unicode值 print(ord('o')) print(ord(u'a')) a=bin(10)#将10转换为二进制字符 b=oct(10)#将10转换为八进制字符 c=hex(10)#将10转换为十六进制字符 bool(['x'])#将内容转换为布尔类型 bytearray()#返回一个byte数组 float(99)#将一个数或者字符串转换为浮点数,如果没有参数则返回0.0 int(2.9)#将数字或者字符串转换成一个整数 结果为2 callable(a)#测试对象是否可调用,可调用对象包括:函数、方法、代码对象、类、已经定义了调用方法的类
#print() meg='灰太狼' f=open('new','w',encoding='utf-8') print(meg,'喜洋洋',sep='*',end='~',file=f)#输入结果:灰太狼*喜洋洋~ ,并将该输出写入到文件new中
complex()#把字符串或数字转换为复数。
getattr()
#delattr()#这个函数和setattr()有关。参数是一个对象和一个字符串。字符串必须是对象的某个属性的名字。只要对象允许,这个函数删除该名字对应的属性
# hasattr()
# dict()#创建字典
#list('song xiao')#将对象转换为列表['s', 'o', 'n', 'g', ' ', 'x', 'i', 'a', 'o']
#tuple('song xiao ')#将对象转换为元组,结果为('s', 'o', 'n', 'g', ' ', 'x', 'i', 'a', 'o', ' ')
# dir():以列表的方式返回对象所有的方法
# print(divmod(13,4))#完成除法运算,返回商和余(3,1)
#pow(2,4)#2的4次幂
#round(2.3)#四舍五入
# enumerate()打印序号
# eval()将字符串转为字典
# exec()执行字符串格式额代码
# float()
# format()字符串格式化
# frozenset()冻结集合,即将集合变成只读的
# print(globals())将当前程序在内存里的所有数据以字典的形式打印出来,只打印全局变量
# hash()
# isinstance(a,str)#测试对象类型,测试a是否是str
# issubclass()
# iter()
# print(locals())#只能放在函数里面,打印局部数
# max()求最大值
#min(1,22,3)#返回指定参数的最小值
# sum([1,2])#对列表求和
# memoryview
# next()
# object()
property repr() reversed()#反转 data=[1,2,3,4] data2=reversed(data) for i in data2: print(i)#输出:4321 str='abc' str2=reversed(str) for i in str2:print(i)#输出:cba set() setattr() slice sorted() name='song' print(sorted(name)) staticmethod str('fcdv')#将对象转换成可打印的字符串 super() vars()打印当前内存总所有地址
# zip() a=[1,2,3,4] b=['a','b','c','d','e'] for i in zip(a,b): print(i) #输出结果: (1, 'a') # (2, 'b') # (3, 'c') # (4, 'd')