函数
def sayhi():
print('Hello World!')
sayhi()
def calc(x,y):
res = x*y
return res
c = calc(3,2)
def stu_register(name,age,country='CN'): #参数默认值
print(name,age,country)
stu_register('zhangsan',22,'England')
stu_register('lisi',25)
stu_register(age = 21, name = 'wangwu') #如果不按顺序,需要指明参数
函数非固定参数
*args
def stu_register(name,age,*args): #*args会把传入的参数一起变成一个元组的形式
print(name,age,args) #调用时不加*
stu_register('lisi',25)
stu_register('zhangsan',22,'England','python')
'''
----输出----
lisi 25 ()
zhangsan 22 ('England', 'python')
'''
**kwargs
def stu_register(name,age,*args,**kwargs): # **kwargs把传入的参数变成字典形式
print(name,age,args,kwargs)
stu_register('lisi',25)
stu_register('zhangsan',22,'England','python')
stu_register('wangwu',23,'CN','python',sex = 'male',province = 'Beijing')
'''
---输出---
lisi 25 () {}
zhangsan 22 ('England', 'python') {}
wangwu 23 ('CN', 'python') {'province': 'Beijing', 'sex': 'male'}
‘’‘
嵌套函数
name = 'lisi'
def change_name():
name = 'zhangsan'
def change_name2():
name = 'wangwu'
print('3层打印',name)
change_name2() #调用内层函数
print('2层打印',name)
change_name()
print('外层打印',name) #不能在外层调用内层函数
'''
3层打印 wangwu
2层打印 zhangsan
外层打印 lisi
'''
递归函数
def calc(n):
print(n)
if int(n/2) == 0:
return n
return calc(int(n/2))
calc(10)
二分查找
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
def bi_search(dataset,find_num):
dataset.sort()
if len(dataset)/2 >1:
mid = int(len(dataset)/2)
temp_num = int(dataset[mid])
if find_num == temp_num:
print('找到数字',dataset[mid].index)
elif find_num < temp_num:
print('\033[31;1m找的数字在mid[%s]左边\033[0m' %temp_num)
return bi_search(dataset[0:mid],find_num) #不需要-1,因为切片是左闭右开[)
else:
print('\033[31;1m找的数字在mid[%s]右边\033[0m' %temp_num)
return bi_search(dataset[mid+1:],find_num)
else:
if dataset[0] == find_num:
print('找到数字')
else:
print('没找到')
return
匿名函数
#不需要显式的指定函数
def calc(n):
return n**n
print(calc(10))
#换成匿名函数
calc = lambda n:n**n
print(calc(10))
与其它函数搭配使用
res = map(lambda x:x**2,[1,3,5,7])
for i in res:
print(i)
高阶函数
#变量可以指向函数,函数的参数能接受变量,函数也可以接受另一个函数作为参数
def add(x,y,f):
return f(x) + f(y)
res = add(3,-6,abs)
print(res)