1.什么是函数
- 函数就是对实现某一特定功能的代码段的封装
2函数的分类
- 内置函数(系统函数):python已经实现的函数,程序员直接用(例如print()/input()/max()/len()....)相当于系统造好的机器
- 自定义函数:程序员自己定义的函数,相当于自己造机器
3函数的定义(声明)
a.语法:
def 函数名(参数列表):
函数体
b.说明:
def -- 定义函数的关键字,固定写法
函数名 -- 要求: 标识符,非关键字
-- 规范: 见名知义(看到函数名,知道函数的功能);命名格式:所有字母小写,多个单词用下划线(_)隔开;同时不能与系统函数名或类名重复
() -- 固定写法
参数列表 -- 形参1,形参2,形参3,...(参数叫做形参,形参可以没有或者有多个)
== 变量名1,变量名2,变量名3,...
-- 形参的功能是将函数外部的数据传递到函数内
: -- 固定写法
函数体 -- 与def保持一个缩进的代码段;
函数体分为函数说明文档(函数体第一行)和实现函数功能的代码段两部分
初学者声明函数的步骤:
第一步:确定函数的功能
第二步:根据功能确定函数名
第三步:确定参数:确定需要几个参数(可以是0)看实现函数的功能需不需要从函数外部给函数传值,如果需要,确定需要几个参数
第四步:实现函数的功能(根据函数体重的代码段)
第五步:确定函数的返回值(暂时不需要)
写一个函数,功能是计算两个数的和
def sum_2(num1,num2):
"""
函数功能的说明:求两个数的和
:param num1: 参数说明,int
:param num2: int
:return:返回值说明,None
"""
print(num1+num2)
写一个函数,功能是求123*n积
def product(n):
"""
求n!
:param n: int
:return: n!
"""
product1 = 1
for a in range(1,n+1):
product1 *= a
print(product1)
product(10)
写一个函数,功能是打印10个*:
def print_star():
"""
打印10个*
:return:
"""
print('*'*10)
4.函数体在定义函数时,不执行;在调用函数时,才会执行函数体(重点)
5.函数调用 -- 使用机器
a.语法
函数名(参数列表)
b.说明:
函数名 -- 函数名对应的函数必须是已经定义过的函数
() -- 固定写法
参数列表 -- 参数叫做实参,实参是用来给形参赋值的.
-- 值1,值2,值3,...
"""
sum_2(10,30)
product(10)
print_star()
1.函数的调用过程(非常重要)
- 函数在定义时不执行函数体,调用函数时才会执行函数体
函数的调用过程:函数名(实参列表)
第一步:回到函数定义的位置
第二步:用实参给形参赋值(传参:要保证每个参数都有值)
第三步:执行函数体
第四步:执行完函数体,再回到函数调用的位置,接着往后执行
2.函数的参数
a.根据实参的写法将参数分为位置参数和关键字参数
位置参数(常用):调用函数的时候,实参的位置和形参一一对应,保证每个形参都有值
关键字参数:实参列表以 形参名1 = 值1,形参名2=值2,...的方式来调用函数。
注意:形参的顺序可以与定义的时候形参的顺序不同
注意:位置参数和关键字参数可混合使用(但位置参数必须在关键字参数的前面)
关键字参数(可打乱顺序)
def func1(a,b,c):
print(a,b,c)
func1(a=10,c=30,b=20)
参数默认值
- 定义函数时,函数的形参可以设置默认值。
- 注意:a.在设置默认值时,一部分参数有默认值,一部分参数没有默认值.没有默认值的必须在有默认值的参数前面.
- b.有默认值的参数,调用的时候可以不用传参;没有默认值的参数必须传参; 传参时,想跳过有默认值的参数时,必须使用关键字参数传参: 关键字参数= 新值
def func2(a,b=20,c=30):
print(a,b,c)
func2(10,c=200)
- 参数类型说明:除了给参数设置默认值外,还可以指定参数类型
- 方式1:给参数设置默认值,默认值是什么类型,参数就是什么类型;
- 方式2:直接说明类型 参数名:类型名
def func3(a,b,nums:list):
nums.append('aaa')
print(a,b,nums)
func3(22,22,[12])
写一个函数,函数的功能是统计一个列表中指定元素的个数,类似于count的功能
def func4(list1:list,item):
sum1 = 0
for a in list1:
if a == item:
sum1+=1
print(sum1)
func4([1,2,3,4,5,6,1,2,1],1)
不定长函数:在调用函数时,可以传多个参数值(不定)
- a. 定义函数的时候,在形参前加一个*,可以将形参变成元祖,同时储存多个位置参数的值
- 一个函数中可以同时存在不定长和定长参数,不定长参数要放在定长参数都后面.
- 不定长参数后面,跟赋有默认值的参数或者使用关键字传参
- b. 定义函数的时候,在形参前加**,可以将形参变成字典,同时储存多个关键字参数的值;关键字可以随便命名
-
注意:原则上一个函数的参数既可以有 定长参数,也可以有不定长参数(带的,和带*的)
-
注意:两种不定长参数同时存在,既可以用位置参数传参,也可以用关键字参数传参,也可以都用;
-
不能存在两个带 * 的,和两个带 ** 的
print(args,kwargs)
func_(1,2,3,4,a=1,b=2)
写一个函数,功能是求多个数的和
假设实现的函数是sum1 , sum1(10) == 10;sum1(1,2) ==3
def sum2(*num):
print(sum(num))
sum2(1,2,3,4,5)
def fun2(a,*num,c):
print(num,a,c)
fun2(12,5,12,0,c=9)
练习,写一个函数,求多个数的和,要求调用函数时,既可以使用位置函数传参,也可以用关键字传参
def sum_2(*args,**kwargs):
sum2 = 0
for item1 in args:
sum2 += item1
for key in kwargs:
sum2 += kwargs[key]
print(sum2)
sum_2(1,2,a=100,b=200)
=================================================
1.什么是函数返回值
返回值的作用是将函数体中产生的数据 传递到函数外面
返回值就是函数调用表达式的值,return关键字后面的值
-
注意:函数调用表达式 - 调用函数的语句:它的结果就是函数的返回值;
-
通过调用函数表达式,获取函数的返回值
-
2.return关键字
- return只能出现在函数体中:
- 当执行函数体的时候,遇到return,函数直接结束.并且将return后面的值作为函数值返回
- 如果没有遇到return,函数的返回值是None
3.函数的调用过程(完整版) 非常重要
1.先回到函数定义的位置
2.用实参给形参赋值--- 传参(保证每个参数都有值)
3.执行函数体
4.执行完函数体,确定返回值
--执行完函数体中所有语句,没有遇到return,确定返回值为None;
--执行过程中遇到return,返回值为return后面的值,如果return后面没有值,也为None
5.回到函数调用的位置,接着往后执行.(此时函数调用表达式的值才是函数的返回值)
def func1(n):
print(n)
a = func1(10)
print(a)
4.什么时候函数需要返回值
- 初学者的建议:只要实现函数的功能,产生了新的数据,就可以把数据用返回值返回.
python中一个函数可以有多个返回值:return后给多个值,用逗号隔开
写一个函数,求两个数的和:
def yt_sum(n1, n2):
return n1+n2
"""
score1 = 10
score2 = 20
print(yt_sum(score1, score2))
total = yt_sum(score1, score2)
person = {'name': '小明', 'scores': total}
"""
print([1, 2, 3].count(1))
list1 = [1, 2, 3]
print('===:', list1.append(4))
python中一个函数可以有多个返回值;return后给多个值,用逗号隔开
def func2():
return 10, 20
x, y = func2() # x, y = 10, 20
print(x)