- 什么是函数
函数就是对实现某一特定功能的代码段的封装
2 函数的分类:
2.1 内置函数,python已经实现的函数,可以直接调用
2.2 自定义函数,程序员自己定义用来实现某种功能的函数
3.函数的语法:
def 函数名 (参数列表):
函数体
说明:
def 声明函数的关键字,固定写法
函数名 - -要求:标识符、不能是关键字
规范:见名知意,所有字母小写,多个单词用下划线—隔开,不能和系统内置函数重名,否则会实现函数功能覆盖
() - 固定写法
参数列表--形参1,形参2.。。。形参n ,其实质是变量名,可以一个或者多个或者没有
: - 固定写法
函数体 - 必须和def保持一个缩进的代码段
函数体分为函数说明文档和实现函数功能的代码段两个部分
初学者声明函数的步骤:
1 先确定函数的功能
2 根据功能确定函数名
3 确定参数,以及需要几个参数
4 实现函数的功能
5 确定函数的返回值
特别注意的是,函数体在函数声明的时候不会执行,调用函数的时候才会执行函数体
函数的调用语法:
函数名(参数列表/实参列表)----函数名对应的函数行必须是已经声明过的函数
实参列表 --这儿的参数叫实参,实参是用来给形参赋值的,对应几个形参值就需要几个实参值
例如 :写一个函数。功能是计算两个数的和;
def sum1(num1,num2):
print(num1+num2)
sum1(1,2)
写一个函数功能是求123...N的积
def factorial(n):
factorial 阶乘的意思
sum2 = 1
for num in range(1,n+1):
sum2 *= num
print(sum1)
factorial(5) # 结果就是120
函数调用过程:
函数在声明的时候不会执行函数体调用函数的时候才会执行函数体
函数的调用过程:
1.先回到函数声明的位置
2 用实参给形参赋值(传递参数)
3 执行函数体
4 执行完函数体再回到函数调用的位置,接着往后执行
例如:
def sum1(num1,num2):
num1,num2 = 1,2
print(num1,num2) # print(3)
sum1(1,2)
函数的参数
根据实参写法,将参数分为位置参数和关键字参数
位置参数:调用函数的时候参数的位置要一一对应,保证每个参数都有值
关键字参数:以形参1=值1,形参2=值2 。。。的方式来调用函数,特别地,形参的顺科可以和声明的时候的形参的顺序不同
例如:
def func1(a,b,c):
print(a,b,c)
位置参数
func1(1,2,2)
关键字参数
func1(a=1,b=2,c=2) # 这里a,b,c,可以打乱顺序
混用写法
func1(5,b=2,c=2) # 调用函数的时候,位置参数必须在关键字参数前面,否则会报错
参数默认值
声明函数的时候函数的形参可以设置默认值
参数默认值
声明函数的时候函数的形参可以设置默认值.
注意:如果设置默认值的时候,是一部分有默认值,一部分没默认值,那么没有默认值的参数
a 一定要写在有默认值得参数的前面
b 有默认值的参数,调用的时候可以不传参数,没有默认值的参数,调用的时候必须传参
c .当我们传参的时候想要跳过某个或者某几个有默认值的参数,直接给后面的参数传参的时候,
后面的参数必须使用关键字传参
def func2(a,b=20,c=30):
print(a,b,c)
func2(100,200,30)
func2(100)
func2(a= 100,c=20)
参数类型说明
给参数设置默认值,默认是什么类型,参数就是什么类型
以参数名:类型名的方式说明参数类型
def func3(nums:list,a,b):
print(a+b)
func3([],10,0)
练习:写一个函数,函数的功能是统计一个列表中指定元素的个数(类似count()方法的功能)
print('-----------')
def count1(a:list,b):
count1= 0
for i in a:
if i == b:
count1 +=1
print(count1)
count1([1,2,3],1)
不定长参数
在声明函数的时候,在形参前加一个*,可以将这个形参变成元祖,然后同时接受多个位置实参的值
原则上一个函数的参数中既可以有定长的,也可以有一个的不定长和两个*的不定长;
如果同时存带一个参数和带两个*的参数,带一个的要放在带两个的前面
def f(a,*b):
print(a,b)
f(1,2,3,c=1,d=2)
def f(*num):
print(num)
f(12,230,90)
声明函数的时候,在形参前加**,可以将这个形参变成字典,然后可以同时接受多个关键字的值(关键字随意命名)
def f(**num):
print(num)
f(a=12, b=230, c=90)
def yh_sum1(*num):
print(num)
yh_sum1(1)
yh_sum1(1,2)
注意:一个函数中可以同时又不定长参数和定长参数,一般情况下不定长参数要放在后面
如果出现定长参数放在不定长参数的后面,那么在不定长参数后面的定长参数调用的时候需要使用关键字参数传参
def func1(a,*nums):
print(a,nums)
func1(1) #
func1(1,2) #
写一个函数求多个数的和,要求调用函数的时候既可以使用位置参数,也可以使用关键字参数传参
def sum1(num1,*num2):
sum2=0
for i in num1:
sum2 += int(i)
sum3=0
for key in num2:
sum3 += num2[key]
sum1= sum2 +sum3
print(sum1)
sum1(1,2)
sum1(1,2,num3=2,num4 = 3)
sum1(1,2,3,num = 100,)