1.什么是函数
函数就是对实现某一特定功能的代码段的封装
2.函数的分类
内置函数(系统函数):python已经实现的函数,程序员直接用。
自定义函数:自己定义的函数。
3.函数的定义(声明)
1.语法:
def 函数名(参数列表):
函数体
2.说明:
def - 关键字,固定写法
函数名 - 要求:标志符、不能是关键字
规范:看到函数名大概能直到函数的功能、所有字母都小写,多个英文单词用下划线隔开、不能和系统的函数名重名。
() - 固定写法
参数列表 - 形参1,形参2,形参3,。。参数的专业语叫形参,形参可以有多个也可以没有
形参的功能是将函数外面的数据传递到函数里面
: - 固定写法
函数体 - 和def保持一个缩进的代码段:
函数体分为函数说明文档和实现函数功能的代码段两个部分
3.初学者声明函数的步骤:
第一步:确定函数的功能
第二步:根据功能确定函数的名字
第三部:确定参数,(确定是否需要参数,需要几个参数)
看实现函数的功能是否需要从函数外面给函数传值,如果需要则需要几个?
第四部:实现函数的功能
第五步:确定返回值 (暂时不管)
4.函数体在函数声明的时候不会执行,调用函数的时候执行函数体
5.函数的调用
1.语法:
函数名(参数列表)
2.说明:
函数名 - 函数名对应的函数必须是已经声明过的函数
() - 固定写法
参数列表 - 实参 => 用来给形参赋值 (值1,值2,值3,...)
实参的有无根据形参的有无来确定
写一个函数,功能是计算两个数的和
def N_sum(num1,num2):
"""
函数说明:求两个数的和
"""
print(num1 + num2)
N_sum(1,1)
N_sum(1,2)
写一个函数,功能是求 123...n 的积
def product(n):
"""
求 1*2*3*...*n 的积
"""
sum1 = 1
for num in range(1,n+1):
sum1 *= num
print(sum1)
product(4)
=========================================
1.函数调用过程
函数在声明的时候不执行函数体,调用的函数的时候才会执行函数体
函数的调用过程:
1.先回到函数声明的位置
2.用实参给形参赋值(专业用语: 传参) - 传参要保证每个参数都有值
3.执行函数体
4.执行完函数体再回到函数调用的位置,接着往后执行
2.函数的参数
a.根据实参的写法将参数分为位置参数和关键字参数
位置参数:调用函数的时候实参的位置和形参一一对应,保证每个参数都有值
关键字参数:实参列表以'形参名1 = 值1,形参名2 = 值2...'的方式来调用函数
实参列表中的实参位置可以不与形参位置对应
函数输出的结果顺序和形参的位置顺序一样
注意:位置参数和关键字参数可以混合使用,但是使用的时候要保证位置参数要在关键字参数的前边
def func1(a,b,c):
print(a,b,c)
func1(1,3,5)
# func1(c=5,1,3) SyntaxError: positional argument follows keyword argument
b.参数默认值
声明函数的时候,函数的形参可以设置默认值。
设置默认值时,未设置默认值参数必须在设置默认值参数的前面
有默认值的参数,调用的时候可以不用传参;没有默认值的参数,调用的时候必须传参
当传参的时候想要跳过有默认值的参数,后面的参数必须使用关键字传参
def func2(a=1,b=1,c=2):
print(a,b,c)
# def func2(a=1,b,c): SyntaxError: non-default argument follows default argument
func2(c=3)
3.参数类型说明
a.给参数设置默认值,默认是什么类型,参数就是什么类型
b.以'参数名:类型名'的方式说明参数类型
def func3(nums:list,a:int,b=0):
nums.append('abc')
print(a+b,nums)
func3([],10,1)
练习:写一个函数,函数的功能是统记一个列表中指定元素的个数
def func4(a:list,b):
"""统计列表 a 中,元素b 的个数"""
num1 = 0
for x in a:
if x == b:
num1+=1
print(num1)
func4([1,2,2,3,4,5,3,4],2)
4.不定长参数
a.声明函数的时候,在形参前加一个*,即将形参转为元祖,可以同时接受多个位置实参的值
b.声明函数的时候,在形参前面加 ** ,即将形参转为 字典,同时接受多个关键字参数的值
写一个函数,功能是求多个数的和
def N_sum(*num):
print(sum(num))
N_sum(1,2,3,4,5,6,7)
注意:一个函数中够可以同时有定长参数和不定长参数,不定长参数要放在后面 如果不定长参数在定长参数前面的时候,调用函数的时候,定长参数使用关键字参数传参
def func1(a,*b,c):
print(b,a,c)
func1(1,2,c=3)
def func(**a):
print(a)
func(name=1,age=2)
注意:原则上一个函数的参数中既可以有定长,也可以有带一个的不定长和带的不定长; 如果同时存在带一个参数和带两个*的参数,带一个的参数要在前面
def func(*args,**kwargs):
print(args,kwargs)
func(1,2,3,4)
func(a=1,b=2,c=3)
func(1,2,c=3)
练习:写一个函数,求多个数的和,要求调用函数时既可以使用位置参数传参,也可以使用关键字参数传参
def nums(*args,**kwargs):
num1 = 0
for num in args:
num1 += num
for key in kwargs:
num1 += kwargs[key]
print(num1)
nums(1,2,3,a=1,b=2)
=========================================
1.什么是返回值
返回值的作用是将函数体中产生的数据传递到函数外面
返回值就是函数调用表达式的值 -- return关键字 后面的值
注意:a.函数调用表达式 - 调用函数的语句; 它的结果就是这个函数的返回值
通过函数调用表达式获取函数的返回值
2.return关键字
return只能出现在函数体中;
当执行函数体的时候遇到return,函数直接结束;并且会将return后面的值作为函数的返回值;
如果在执行函数体的时候没有遇到return,函数的返回值是None
3.函数的调用过程(完整版)!!!!!
1.先回到函数声明的位置
2.用实参给形参赋值 - 传参(保证每个参数都有值)
3.执行函数体
4.执行完函数体,确定返回值
(执行完函数体中所有的语句没有遇到return,函数的返回值为None;
执行过程中遇到return,函数的返回值就是return后面的值)
5.回到函数调用的位置,接着往后执行。(此时函数调用表达式的值才是函数的返回值)
4.什么时候函数需要返回值
初学者指导思想:只要实现函数的功能产生了新的数据,就可以把这个数据用返回值返回
python中一个函数可以有多个返回值;return后给多个值,用逗号隔开