函数
1.什么是函数
函数就是对实现某一特定功能的代码段的封装
2.函数的分类
内置函数(系统函数):python已经实现的函数,程序员直接用,例如:print()、input()、max()、len()等相当于系统造好的机器
自定义函数:程序员自己定义的函数,相当于自己造机器
3.函数的定义(声明)
"""
1)语法:
def 函数名(参数列表):
函数体
2)说明:
def python声明函数的关键字,固定写法
函数名 - 要求:标识符,不能是关键字,不能和系统的函数名或者类名重名
规范:见名知意(看到函数名字大概知道函数的功能) 所有字母都是小写,多个单词用_隔开,
不能和系统的函数名类名重合
() - 固定写法
参数列表 - 形参1,形参2,形参3.... --> 变量名1,变量名2,变量名3,...;这儿的参数叫形参,形参可以没有也可以有多个
形参的功能是将函数外面的数据传递到函数里面
: - 固定写法
函数体 - 和def保持一个缩进的代码段;
函数体分为函数说明文档和实现函数功能的代码段两个部分
3)初学者声明函数的步骤:
第一步:确定函数的功能
第二步:根据功能确定函数的名字
第三步:确定参数(确定需不需要参数,需要几个)
看实现函数的功能需不需要从外面给函数传值,如果需要需要几个?
第四步:实现函数的功能
第五步:确定返回值
4)函数体在函数声明的时候不会执行,调用函数的时候才会执行函数体(重要!)
5)函数调用 - 使用机器
语法:
函数名(参数列表/实参)
说明:
函数名 - 函数名对应的函数必须是已经声明过的函数
() - 固定写法
参数列表 - 实参;实参是用来给形参赋值的
值1,值2,值3
"""
计算两个数的和
def sum1(num1, num2):
"""
函数功能的说明:求两个数的和
:param num1: int
:param num2:
:return:
"""
print(num1 + num2)
#调用
sum1(10,30)
# 求1*2*3*...*n
def ride(n):
"""
求n的阶乘
:param n:
:return:
"""
sum2 = 1
for num in range(1,n+1):
sum2 *= num
print(sum2)
# 打印10个*
def print_star():
"""
打印10个*
:return:
"""
print('*'*10)
1.函数调用过程(重要!)
"""
函数在声明的时候不执行函数体,调用的时候才会执行函数体
函数的调用过程:
1)先回到函数声明的位置
2)用实参给形参赋值(传参) - 要保证每个参数都有值
3)执行函数体
4)执行完函数体再回到函数调用的位置,接着往后执行
"""
def c_sum(num1,num2):
print(num1+num2)
c_sum(1,2)
2.函数的参数
1)根据实参的写法将参数分为位置参数和关键字参数
a.位置参数:调用函数的时候,实参的顺序和形参一一对应,然后保证每个形参都有值
b.关键字参数:以‘形参名1 = 值1,形参名2 = 值2,...’,的方式来调用函数,在这里形参的顺序可以和声明的时候形参的顺序不同
def func1(a, b, c):
print(a, b, c)
func1(a=10, b=20, c=30)
func1(b=10, a=20, c=30)
# 位置参数和关键字参数混合使用 - 注意:位置参数一定要在关键字参数前面
func1(5, c=12, b= 23)
2)参数默认值
声明函数的时候,形参可以设置默认值。
注意:a.如果设置默认值的时候一部分形参有默认值,一部分没有默认值,那么没有默认值得参数一定要写在有默认值的参数的前面
b.有默认值的参数可以不用赋值,也可以给他赋值,覆盖原来的默认值;没默认值的参数,调用的时候必须赋值
c.当我们传参的时候想要跳过某个或某几个有默认值的参数,直接给后面的参数传参的时候,后面的参数必须使用关键字参数传参
def func2(a, b=20, c=30):
print(a, b, c)
func2(100, 200, 300)
func2(100,c=300)
3)参数类型说明
a.给参数设置默认值,默认值是什么类型,参数就是什么类型
b.以'参数名:类型名'的方式说明参数类型
def func3(nums: list, a: int, b=0):
nums.append('abc')
print(a+b, nums)
func3([], 10, 0)
练习:写一个函数,函数的功能是统计一个列表中指定元素的个数(类似count()方法的功能)
def statistics(list1: list, n):
'''统计一个列表中指定元素的个数'''
m = 0
for x in list1:
if x == n:
m += 1
print(m)
statistics([1,2,3,1],1)
4)不定长参数
a. 声明函数的时候,在形参前加一个*,可以将这个形参变成元祖,然后同时接受多个位置参数的值
def sum1(*num):
print(num)
sum1(1, 2, 3, 4)
b. 声明函数的时候,在形参前加,可以将这个形参变成字典,然后可以同时接受多个关键字参数的值(这里的关键字自己随便命名)
** 注意:元祖上一个函数的参数中既可以有定长的,也可以有带一个的不定长和带两个的不定长;
如果同时存在带一个参数和带两个的参数,带一个的要放在带两个*的前面
def sum1(**num):
print(num)
sum1(a=10, b=23, c=50)
# 写一个函数,功能是求多个数的和
def sum1(*num):
print(sum(num))
sum1(1,2,3,4)
def sum1(*args,**num):
print(args,num)
sum1(1,2,3,c1 = 4)
注意:一个函数中可以同时有不定长参数,一般情况下不定长参数要放在后面;如果出现定长参数放在不定长参数的后面,那么在不定长参数后面的定长参数调用的时候需要使用关键字参数传参
def func3(a, *nums, b):
print(nums, a, b)
func3(1,2,3,4,b='hello')
练习:写一个函数求多个数的和,要求调用函数的时候既可以使用位置参数传参,也可以用关键字参数传参。
# c_sum2(1,2,3) == 6 c_sum2(num1=10, num2=20) == 30
# c_sum2(1,2,num3=100, num4=200) == 303
def c_sum(*c_sum2,**c_sum3):
sum1 = 0
for num in c_sum2:
sum1 += num
for key in c_sum3:
sum1 += c_sum3[key]
print(sum1)
c_sum(1,2,3)
c_sum(num1=10,num2=20)
c_sum(1,2,num3=100,num4=200)
1.什么是返回值
返回值的作用是将函数体中产生的数据传递到函数外面
返回值就是函数调用表达式的值,就是return关键字后面的值
注意:a.函数调用表达式 - 调用函数的语句;他的结果就是这个函数的返回值;通过函数调用表达式获取函数的返回值
2.return关键字
return只能出现在函数体中;当执行函数体的时候,遇到return,函数直接结束,并且会将 return后面的值作为函数的返回值;如果在执行函数体的时候没有遇到return,函数的返回值是None。
3.函数的调用过程(完整版)
"""
1)先回到函数声明的位置
2)用实参给形参赋值 - 传参(保证每个参数都有值)
3)执行函数体
4)执行完函数体,确认返回值(执行完函数体的最后,没有遇到return,函数的返回值为None;
执行过程中遇到return,函数的返回值就是return后面的值)
5)回到函数调用的位置,接着往后执行。(此时函数调用表达式的值才是函数的返回值)
"""
def func1(n):
print(n)
print(func1(10))
def func1(n):
print(n)
return n*2
print(func1(10))
4.什么时候函数需要返回值
初学者指导思想:只要实现函数的功能产生了新的数据,就把这个数据用返回值返回
#写一个函数,求两个数的和
def c_sum(n1, n2):
return n1+n2
score1 = 10
score2 = 20
print(c_sum(score1, score2))
total = c_sum(score1, score2)
person = {'name':'小明', 'scores': total}
print(person)
# python中一个函数可以有多个返回值;return后给多个值,用逗号隔开
def func2():
return 10, 20
x, y = func2()
print(x, y)