1,定义函数(定义任何函数其前面要加def)
s = '定义函数'
def my_len(): #定义函数
i = 0
for k in s:
i += 1
print(i)
my_len() #函数调用 #>>>4
2,关于函数中的return
- 函数没有返回时,有两种情况:
1,函数中没有return
2,函数中有return但是没有加返回值
- return的作用: return是结束此函数,并返回其要返回的值;
当程序运行到return时就会结束,不在继续运行这个函数
def func():
l = [3,5]
for i in l:
print(i)
if i == 3:
return #函数到这后结束,不会执行下面的,如果换成break,
print('****') #只是结束了for的循环,还会执行函数,因此会执行下面的语句
ret = func() #>>>3
print(ret) #>>>None
3,返回值的3种情况
1,没有返回值——>返回None
1.1,不写return
1.2,只写return——>结束一个函数的继续
1.3,return None——>不常用
2,返回一个值
2.1,可以返回任何数据类型
2.2,只要返回就可以接收
2.3,如果在一个程序中有多个return,那么只执行第一个
3,返回多个值
3.1,用多个变量接收:有多少返回值就用多少变量接收
3.2,用一个变量接收:得到的是一个元组
4,参数
4.1,参数分类
4.1.1,没有参数
1,定义函数和调用函数时括号里都不写内容
4.1.2,有一个参数
2,传什么就是什么
4.1.3,有多个参数
3,位置参数
4.2,站在实参的角度上:
4.2.1,按位置传参
4.2.2,按关键字传参
4.2.3,混着用可以:但是,必须先按照位置传参,在按关键字传参,不能给同一变量传多个值
4.3,站在形参的角度上
4.3.1,位置参数:必须传,且有几个参数就传几个值
4.3.2,默认参数:可以不传,如果不传就是用默认的参数,如果传了就用穿的
4.4,调用函数的时候
4.4.1,按位置传: 直接写参数的值
4.4.2,按关键字: 关键字 = 值
4.5,定义函数的时候:
4.5.1,位置参数:直接定义参数
4.5.2,默认参数(关键字参数):参数名 = ‘默认的值’
4.5.3,动态参数:可以接受任意多个参数,参数名前加*
4.5.4,定义的顺序:必须先定义位置参数,后定义默认参数
5,动态参数
5.1,只接收位置参数的动态参数,
加*的为位置参数的动态参数,动态参数可接收多个元素,并将接收的元素以元组的形式存放
def sum(*args):
n = 0
for i in args: # 因为*args为动态参数,args元组方式处理
n +=i
return n
print(sum(1,2))
print(sum(1,2,3))
5.2,只接收关键字参数的动态参数
加**的参数为关键字参数的动态参数,动态参数可以接收多个元素,并将接收的元素以字典的形存放
def func(**kwargs):
print(kwargs)
func(a = 1,b = 2,c = 3)
func(a = 1,b = 2)
5.3,动态参数的另一种传参方式
def func(*args): #站在形参的角度上,给变量加上*,就是组合所有传来的值
print(args)
func(1,2,3) #>>>(1, 2, 3)
l = [1,2,3]
func(*l) #>>>(1, 2, 3) #站在形参的角度上,给一个序列加上*,就是将这个序列按顺序分解
6,函数的注释
def func():
'''
这个函数实现了什么功能
参数1:
参数2:
:return: 返回的什么
'''
pass