1.函数的定义:封装一个功能,便于调取的一组程序模块。
def 函数名():
函数体
1.函数有由来:
s = 'jidjsoijofjdo'
c = 0
for i in s:
c += 1
print(c)
l1= [1,2,3,4,'fdsaf','gfda','fc','sz']
c = 0
for j in l1:
c += 1
print(c)
已上方法就是len()的功能,在编程中,可能重复使用,在每次使用的时候就编写一次没效率也占用内存。
于是利用函数的模式,将程序封装起来,随用随取。
函数就是封装一个功能.以功能为导向
def my_len():
def 关键字 定义一个函数
my_name 函数名,函数名的书写规则与变量一样
def 与函数名之间一个空格
函数名(): 加上冒号,将函数名和函数体隔开,便于阅读
内容是函数体
函数执行:在不调用的情况下,封装以后在内存中开辟一个空间储存函数,叫做局部命名空间
2.函数的返回值:return
return在函数中一般都出现在末尾用做返回值操作,注意事项如下:
1.在函数中遇到return 就结束函数,后面不执行
2.将值返回给函数的调用者:
在使用return的过程中,可能出现一下几点问题,
1.函数里面没有return,返回None
2.return None,一般不多
3.return一个值 则会返回该值。
4.return多个值 则会将多个值放到一个元祖中,返回给调用者
def func(a):
return a
print(func('wwww'))#wwww
需要注意的是在函数中最好不要使用print,输出函数时如果利用print而且函数中还有一个print则会出现None。
3.参数#重点
def my_lenn(l): #这里的 l 是形式参数,形参
count = 0
for i in l:
count += 1
return count
print(my_lenn('ab')) #函数中的参数为实际参数,实参
函数分实参和形参
从实参角度出发定义:
1.位置传参.按顺序,需要与实参一一对应
2,按关键字传参数,不按顺序,也与实参是一一对应.
3.混合传参,关键字参数永远在最后面
def fuck(a,b):
return a if a > b else b
print(fuck(22,33)) #位置参数,与上方形参一一对应
################################
def fuck(a,b):,
return a if a > b else b
print(fuck(b=22,a=33))#关键参数
###################################
def func1(a,b,c,d,e):
print(a)
print(b)
print(c)
print(d)
print(e)
func1(1,2,d=4,c=3,e=5)
func1(1,4,e=2,d=9,c=5)
#混合参数:需要注意的是在使用混合参数的时候位置参数在关键参数的前面。
形参角度:
1.位置参数,安顺序一一对应,
2.默认参数,传参则覆盖,不传则默认,默认参数永远在位置参数的后面。
3.动态参数,1.当有大量的参数需要填入的时候需要用到动态参数使用*args
2.当有多余关键字参数时候使用**kwarge
在动态参数中的顺序是 1位置参数2*args3关键字参数4**kwargs
函数形参:
动态参数:当需要多个参数,利用*args的方法
def funx(*args):
print(*args)#增加*号则会直接输出所有实参,没有则会将实参聚合为一个元祖并且输出
funx(1,2,3,4,5,6,7,8,9)
def func(a,c,f,*args,d = 66,**wkargs):
return a,c,f,d,
print(func(2,3,5,2,1,4,3,12,3,5,3,12,3,4325,d = 4444))
def func(a,c,f,*args,d = 66,**kwargs):
print(args) #*args将所有的没有定义的元素组合起来输出
print(a) #顺序是优先位置参数,然后*args再然后就是默认参数
print(c)
print(f)
print(d)
print(kwargs)
print(func(2,3,5,2,1,4,3,12,3,5,3,h=12,m=3,n=4325,d=4444))
动态传参:
2.**kwargs:将关键字参数统合为字典类型输出,
def func(**kwargs):
print(kwargs)
func(e = 3,r = 2)
def func(*args):
print(args)
func(1,2,3,10,20,80)
* 的作用!
def func(*args):
return args
l1 = [3,4,5,6,7,3,1,]
l2 = [2,3,4,2,1,4]
print(func(*l1,*l2))
print(func(*(l1+l2))) #去列表
**的作用
def func(**kwargs):
print(kwargs)
func(a=1,c=2,v=3,y=7) #将关键字转化为字典格式
def func(**kwargs):
return kwargs
dic1 = {'name1':'alex','age1':46}##要注意的是调用的时候一定要加上函数名
dic2 = {'name':'老男孩','age':56}
print(func(**dic1,**dic2))
def func(**kwargs):
print(kwargs)
dic1 = {'name1':'alex','age1':46}
dic2 = {'name':'老男孩','age':56}
func(**dic1,**dic2)
利用*时候,要注意后面是可迭代对象,并且将其打散,组成元祖模式输出
利用**时候,要注意的是对应的为关键字参数,会将其聚合起来,组成字典类型输出