四种类型的函数
#无参数无返回
def show():
print("hello,python!")
show()
#有参数无返回
def show(name):
print("hello:%s"%name)
show("世界")
#无参数有返回
def return_show():
msg = "good study day up"
return msg
result = return_show()
print(result)
#有参数有返回
def show_msg(name):
msg= "my name is :%s" %name
return msg
result = show_msg("Sean")
全局变量
全局变量&局部变量
scores =120
def show():
# global score 表示对全局变量进行修改
# scores = 100
print("score:",scores)
show()
def scores_show():
print("grade:",scores)
scores_show()
调用函数的传参方式
#按位置参数传参, 必须按照顺序传参
def show(name,age):
print(name,age)
show("a") #这个会报错,因为缺少了age参数
show("a",20)
#使用关键字传参,前面用关键字,后面也要用关键字传参,不能使用位置参数传参
#show(name="bc",10)会报错
#show(name='bc',age3=10)还是错,age3关键字错误
#可以不按照顺序传参
show(age=10,name="pi")
show(name="bc",age=10)
# 如果混合使用,必须前面使用位置参数,后面使用关键字
show(name="wangsan",19) #这个是错误示范
函数的不定长参数
函数的不定长参数,调用函数的时候不确定传入多少个参数,可能0个或多个
1.不定长位置参数 2.不定长关键字参数
1.不定长位置参数
def sum_num(*args):
print(args,type(args))
sum_num(2,23,2) #最后是封装到一个元组里面,元组类型
2.不定长关键字参数, **kwargs表示不定长关键字参数,字典类型
def show_msg(**kwargs):
print(kwargs,type(kwargs))
show_msg(a=1,b=1)
#不定长(位置)参数函数的使用方法
def show_msg(*args):
print(args)
for value in args:
print(value)
def show(*args):
show_msg(*args) #对元祖进行拆包
show(1,2)
#不定长(关键字)参数函数的使用方法
def show_msg(**kwargs):
print(kwargs)
for key,value in kwargs.items():
print(key,value)
def show(**kwargs):
show_msg(**kwargs) #对字典进行拆包
show(a=1,b=2)
# 这里重点提一下,调用*args和**kwargs用于拆包,就是如果你不用,直接使用变量的话,
它就会直接把一个元组或者字典直接嵌套到一个新的元组或者字典中,而拆包就是为了获取里面的元素
函数的参数的高级使用
def show(name,age,*args,**kwargs):
print(name,age,args,kwargs)
#不能用下面方法,因为前面用关键字,后面就不能使用位置参数
show(name="shawn",age=18,10,30)
#使用位置参数,要按照顺序,下面是正确方式
show("sean",20,1,2,3,a='apple',b='banana')
#args放前面,就只能后面全用关键字了
def show(*args,name,age,**kwargs):
print(name,age,args,kwargs)
show(1,2,3,name='Shawn',age=18,c='cool')
#kwargs放在前面,直接报错,所以kwargs必须放最后
#关键字参数全给kwargs,后面就啥都没有了,而且位置参数也无法搞了
def show(**kwargs,name,age,*args):
print(name,age,args,kwargs)
show(1,2,3,name='Shawn',age=18,c='cool')
#如果要使用age=18,缺省参数,就要放在args后面,如下
def show(name,*args,age=18,**kwargs)
print(name,age,args,kwargs)
show("wilson","haha","xixi",a=1)
#如果有必选参数和缺省参数,那么缺省参数必须放到必选参数后面
def sum_num(a,b=1) #正确例子
def sum_num(a=1,b) #错误例子
函数的注意事项
注意事项:1.函数名不能相同 2.变量名不能和函数名相同
必须参数使用关键字传参
注意:星号 后面的参数必须使用关键字传参
def show(address,sex,*,name,age):
print(address,sex)
print("i am :%s age:%d" %(name,age))
#使用位置参数传参,报错TypeError: show() takes 2 positional arguments but 4 were given
show('ss','male',"haha",56) #错误写法
show('ss','male',name="haha",age=56) #正确写法
函数嵌套
def show():
def test():
print("sub def")
#函数内的函数只能在父函数内使用,外面用不了
test()
show()
递归函数
在函数中调用自己本身 特点:1,传递 2,回归
阶乘 5! = 54!, 4!=43!, 3!=3*2!..
import sys
def calc_num(num):
#当计算1的阶乘的时候不需要往下传递,需要返回结果
if num==1: #必须要设置结束递归的条件和返回值
return 1
else:
return num*calc_num(num-1)
sys.setrecursionlimit(1100)#设置递归次数
aa = sys.getrecursionlimit() #获取递归次数
print(aa)
注意点:1,不能无限递归调用,默认递归调用次数1000
匿名函数
函数没有名字,使用lambda关键字定义函数就是匿名函数,匿名函数只适合做一些简单的操作,返回值不需要加上return
一般使用变量保存匿名函数
result = (lambda x,y:x+y)(1,2)
print(result)
func = lambda x,y: x*y
result = func(2,3)
print(result)
'匿名函数的应用场景,简化代码'
'如果不用匿名函数就像以下这样: 判断是否偶数,很复杂'
def is_os(num):
if num%2 == 0:
return True
else:
return False
result =is_os(2)
print(result)
"使用匿名函数的话,还能用if,这是判断是否偶数的简化版"
new_func = lambda num: True if num%2 ==0 else False
result = new_func(4)
print(result)
'对字典列表排序的时候还可以使用匿名函数'
my_list = [{'name':'zs','age':60},{'name':'qq','age':50}]
#不可以直接my_list.sort() , 因为不能对字典进行排序,但是可以对数字或者字符串
'item: 表示列表中的每一项字典数据,item["age"]:根据字典中age对应的value值排序'
'默认从小到大,reverse=True 可改变方向'
my_list.sort(key=lambda item: item['age'],reverse=True)
print(my_list)
内置函数
1.内置函数就是直接可以使用的函数,比如:len,max,min,sorted,open
2.内置函数是python自己定义的函数,可以直接使用
3.len函数可以统计容器类型(字符串,列表,元祖,字典,集合)的个数
实例:
'统计字符串的个数'
resykt =len(['abc','asd'])
print(resykt)
pap = len((1,2))
print(pap)
pap = len({"name":"shawn"})
print(pap)
'max函数统计龙i去类型数据的最大值, min函数最小值'
result = max("1356") #结果是6
print(result)
result = min("1356") #结果是1
print(result)
result = max([5,10,11])
print(result) # 结果是11
'排序'
newList = sorted([8,6,7])
print(newList)
'del函数可以删除变量'
del(newList) #或者del newList
print(newList) #会报错
切片
根据下标的范围获取一部分数据,比如:列表,字符串可以使用切片
切片使用格式 :
my_str[起始下标:结束下标:步长]
提示,起始下标默认0,结束下标指的位置不包含在结果内,步长默认为1
my_str = 'hello'
result=my_str[1:4:1] #取中间3个
print(result)
result=my_str[:3] #取前3个
print(result)
result=my_str[2:5] #取后3个
print(result)
result=my_str[-3:] #使用负数下标方式取后3个
print(result)
'从倒数第三个取到最后一个,可以获取倒数后面数据,冒号后面不指定,可以取到最后一个数据'
result=my_str[:] #快速获得整个字符串
print(result)
result=my_str[-2:-5:-1] #步长是负数,代表从后往前取值
print(result)
result=my_str[3:0:-1] #用正数下标,从后往前取值
print(result)
result=my_str[::-1] #倒着取整个字符串
print(result)