1. 函数的定义
1.1 函数的概念
函数就是实现某一特定功能的代码的封装。
函数就是把实现某一个功能的代码打成一个包,以后再需要这段代码对应的功能的时候不需要再写这段代码,而是直接调用封装这段代码的函数。
1.2 函数分类
1)系统函数(别人造好的机器):python自带的函数,例如:print、input、type、max、min、sorted等;
2)自定义函数(自己造的机器):由程序员自己创建的函数。
1.3 定义/创建函数
1.3.1 语法
'''def 函数名(形参列表):
函数说明文档
函数体
'''
1.3.2 说明
1)def:关键字;固定写法;
2)函数名:由程序员自己命名,但是必须符合命名要求和规范;
要求:是标识符;不能是关键字
规范:a. 见名知义(看到函数名就大概知道这个函数对应的功能是什么);
b. 字母都小写,多个单词用下划线隔开;
c. 不使用系统的函数名、类名、模块名;
3)(): - 固定写法;
4)形参列表:以’变量名1,变量名2,变量名3,…'的形式存在,这里的变量名可以有也可以没有
a. 形参的作用:将函数外部的数据传输到函数里面;
b. 怎么确定形参:看实现函数的功能需不需要额外的数据,需要几个(在函数体中,就把形参当成对应的数据来使用);
5)函数说明文档:本质就是一个多行注释,用来描述函数的功能和使用方法;
6) 函数体:
结构上:和def保持一个缩进的一条或者多条语句(至少一条) ;
逻辑上:函数体就是实现函数功能的列表。
1.3.3 练习
练习1:定义一个函数,统计指定字符串中中文的个数。
def count_chinese(str1):
"""
统计字符串中中文的个数
:param str1: 指定的字符串
:return: None
"""
count = 0
for x in str1:
if '\u4e00' <= x <= '\u9fa5':
count += 1
print(count)
练习2:定义一个函数,将指定的数据插入到指定列表的最前面。
def prepend(list1,num1):
"""
将输入的数据插入到指定列表的最前面
:param list1: 列表
:param num1: 需要插入的数据
:return: None
"""
list1.insert(0,num1)
print(list1)
练习3:定义一个函数,任意一个整数的阶乘。
def factorial(num1):
"""
求任意整数的阶乘
:param num1: 需要求阶乘的数(必须是大于等于1的整数)
:return:
"""
s = 1
for x in range(1,num1+1):
s *= x
print(s)
练习4:定义一个函数,求任意一个圆的面积。
def circle_area(r):
"""
求圆的面积
:param r: 圆的半径
:return: None
"""
print(3.14 * r **2)
1.4 函数的调用
1.4.1 定义函数不会执行函数体
定义函数不会执行函数体,调用函数才会执行函数体。
1.4.2 怎么调用函数
1)语法:函数名(实参列表);
2)说明:
a. 函数名:需要哪个函数的功能就调用哪个函数,就写哪个函数的函数名(注意:函数名必须是已经定义好的函数的函数名);
b. ():固定写法;
c. 实参列表:以’数据1,数据2,数据3,…'的形式存在;实参就是通过形参从函数外部传递到函数内部具体的数据。
1.4.3 函数调用过程
当代码执行到函数调用语句的时候:
第一步:先回到先回到函数定义的位置;
第二步:传参(用实参给形参赋值);
第三步:执行函数体;
第四步:确定函数返回值;
第五步:回到函数调用的位置接着往后执行。
2. 函数的返回值
2.1 返回值
返回值就是从函数内部传递到函数外部的数据。
2.1.1 怎么确定函数返回值
看看执行函数体的时候有没有遇到return,如果遇到return,return后面的值就是返回值;如果没有遇到return,返回值是None。
2.1.2 怎么获取函数返回值
1)获取函数调用表达式的值就是获取函数的返回值。
(每个函数表达式都是有结果的,结果是返回值,所有函数返回值能做的事情,函数调用都可以做)。
2)函数调用表达式:调用函数的语句。
2.1.3 什么时候需要返回值
1)如果实现函数的功能产生了新的数据,我们就应该将新的数据返回;
2)原因:每次调用函数的时候,系统会自动为这个函数创建一个临时的栈区域,用来保存在函数中产生的数据(形参也保存在这个里面),当函数调用结束的时候,系统会自动释放这块内存(内存中的数据会被删除),只有返回值不会直接删除。
def func1():
print(100)
x1 = func1()
print('x1:',x1)
def func2():
print('hello world')
return 100
x2 = func2()
print('x2:',x2)
print(func2() * 2)
def func3(n):
if n % 2:
return 100
else:
return 200
x3 = func3(3)
print(f'x3:{
x3}')
x4 = func3(4)
print(f'x4:{
x4}')
def func4():
return 100,200
x5 = func4()
print(f'x5:{
x5}') # x5:(100, 200) - 元组
def func5():
return 'abc'
a = 'abc'
b = func5()
print('abc'[-1],func5()[-1]) # c c
print('abc'.upper(),func5().upper()) # ABC ABC
练习:定义一个函数求任意两个数的和。
def sum1(num1,num2):
"""
求两个数的和(函数功能说明)
:param num1: 第一个数(参数说明)
:param num2: 第二个数
:return: None(返回值说明)
"""
return num1 &