day10 函数
函数
一、函数的定义与调用
定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
def 是固定的,不能变,必须是连续的def三个字母,不能分开
空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能
括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
调用:就是 函数名() 要记得加上括号
二、函数的返回值
def 函数():
return
ret = 函数()
print(ret)
没有返回值:
不写return == return None
只写一个return == return None
return的作用:1.返回一个值2.终止一个函数的继续
返回一个值:
可以返回任意的数据类型,返回什么就接收什么
返回多个值:
用一个变量接收返回值,接收到的是一个元组
返回值用多个变量接收,那么返回值的个数应该和接收变量的个数完全一致
三、函数的参数
def my_len(lst): # 参数:接收参数,形式参数,形参
count = 0
for i in lst:
count += 1
return count
len_count = my_len([1,2,3]) # 参数:传参数/传参,实际参数,实参
print(len_count)
写一个函数,接收参数一个列表或者字符串
如果这个列表或者字符串的长度大于2就返回True否则返回False
def foo(x):
if len(x) > 2:
return True
else:
return False
print(foo([1,2,3]))
参数
形参和实参
传参数可以传任意的数据类型,并且传什么接收什么
站在传参数的角度上看问题:一共有两种传参的方式
第一种:按照位置传参数
第二种:按照关键字传参数
def f(para):
print(para)
f(1)
传多个参数:多个参数分别可以使用任意数据类型
def f2(arg1,arg2): # 站在接收、形参的角度上:位置参数
print(arg1)
print(arg2)
f2(arg2=1,arg1='abc') # 按照关键字传参数
f2('abc',arg2=[1,2])
按照关键字传参数和按照位置传参数是可以混用的
但是,首先传按位置的,再传按关键字的
按照位置传完该接收的参数只能接收一个值,不接收或者重复接收都不行
形参
位置参数
数量必须与实参数量一致 ==> 必须传的参数
def classmate(name,sex='男'):
print('姓名:%s,性别:%s' %(name,sex))
classmate('尤悦')
classmate('曹超')
classmate('张建超')
classmate('晓梅','女')
默认参数:
默认参数是可以不传的参数
在不传参数的情况下可以使用默认的值
如果传了,就会使用传的值
魔性的用法:默认参数尽量避免使用可变数据类型
def func(l = []):
l.append(1)
print(l)
func() # [1]
func() # [1,1]
func() # [1,1,1]
动态参数
*args:接收所有按照位置传的参数,接收到的是参数组成的元组
**kwargs:接收所有按照关键字传的参数,接收到的是参数组成的字典
所有的参数的顺序:位置参数,*args,默认参数,**kwargs
def func(a,b,c,*args,key = 'key'): # 在参数前面加个*,这个参数就变成动态参数了
print(a,b,c)
print(key)
print(args) # 使用时,所有接收过来的参数都被组织成一个元组的形式
func(2,4,4,5,'abc',[1,3],key='qqxing')
def func(a,*args,key='qqxing',**kwargs):
print('a:',a)
print('args:',args)
print('key:',key)
print('kwargs:',kwargs)
# func(5)
func(5,6,7,key='xiaoxiaosu',b='hahaha',c='hehehe')
def my_sum(*args):
sum_2 = 0
for i in args:
sum_2 += i
return sum_2
print(my_sum(1,2,3,2))
魔性的用法
在调用函数的时候,可以打散:*l、**dic
def func(*args):
print(args) # (1, 2, 3)
l = [1,2,3]
func(*l) # 按顺序打散
def func(**kwargs):
print(kwargs) # {'b': 2, 'a': 1}
dic = {'a':1,'b':2}
func(**dic)
在调用函数的时候,可以打散:*l、**dic
四、函数的名字
第一类对象的概念:
函数名可以赋值
可以作为一个数据结构的元素
可以作为一个函数的参数
可以作为一个函数的返回值
def func():
print('in func')
return 10
def func2():
print('in func2')
return 20
print(func)
f = func
print(f)
f()
l = [func,func2]
for i in l:
i()
def func():
print('in func')
return 10
def func2(arg):
print(arg)
return arg
func2(func)
f = func2(func)
print(f)
f()


浙公网安备 33010602011771号