函数可以实现一个特定的功能,比如:
- print() 在控制台输出
- input() 获取控制台输入的内容
- type() 获取变量的数据类型
- len() 获取容量的长度(元素的个数)
- range() 生成一个序列[0,n)
1. 函数
将多行代码(可以实现一个特定的功能)放在一块,并给它起一个名字,在需要使用多行代码的时候,可以使用名字代替。
定义函数的好处:减少代码冗余(重复的代码不需要多次书写),提高编程效率
函数必须是先定义后调用
2. 函数定义
是给多行代码起一个名字的过程,关键字使用def (define的缩写)
def 函数名():
代码块
3. 函数调用
语法是 函数名()
4. 参数
在函数定义的时候,在括号中写入变量,这个变量就成为函数的参数,是形式参数 (也叫形参)
在函数调用的时候, 可以给形参传递具体的数据值, 叫做实际参数(也叫实参)
注意点:目前书写的函数, 如果存在形参,必须传递相同个数的实参。
# 函数定义
def sum_2_num(a,b):
c = a + b
print(c)
#函数调用
sum_2_num(1,2) #1传给a,2传给b, 结果是3
5. 函数的嵌套调用
在一个函数中调用另一个函数
1)代码从上到下执行
2)函数定义不会执行函数中的代码
3)函数调用会进入函数中执行函数中的代码
4)函数中的代码执行结束, 会回到调用的地方继续向下执行
# 定义名为test01的函数
def test01():
print(0)
print(2)
# 定义名为test02的函数,并调用test01
def test02():
print(1)
test01()
print(4)
# 函数调用
test02()
# 结果是
1
0
2
4
6. 函数的返回值
返回值:函数执行的结果
- print() -->None
- input() -->键盘输入的内容, 类型字符串
- type() -->变量的数据类型
- len() -->容器长度
return 关键字的作用,将一个数据值返回到调用的地方,函数遇到return 会结束函数的执行
return 关键字只能用在函数中。 如果一个函数没有写return,返回值是None
# 设计一个函数,返回两个数中的较大数
def max_num(a,b):
if a >= b:
return a
else:
return b
# 调用
m = max_num(4,9)
print(f"较大的数为{m}")
# 较大的数为9
7. 模块
在python中,每个代码文件都可以称为是一个模块
想要使用别人模块中写好的功能, 需要先导入别人写好的模块
as 关键字,可以给模块或者功能起别名
模块导入的方法:
方式一:(多用于导入系统中常用的模块和功能)
import 模块名
模块名.功能名 #使用其中的功能
import random
num = random.randint(1,99)
print(num)
方式二:(多用于导入自己书写的,或者是第三方的模块)
from 模块名 import 功能名 #导入指定的功能
功能名() #使用
from random import randint
num = randint(1,10)
print(num)
8. __name__ 变量
作用:如果在导入模块的时候, 模块中的部分代码不想被执行,可以用__name__来解决
在模块中,直接运行代码, __name__变量的值是__main__;
如果是被导入运行代码文件, __name__变量的值是模块名
if __name__ == '__main__':
# 在这个if 缩进中书写的代码, 导入的时候不会被执行
9. 包 package
多个模块放在一个目录中集中管理, 并在这个目录中创建一个 __init__.py 文件(可以什么都不写),就是一个包
主要的使用方式是:
from 包名 import 模块名
模块名.工具名 #使用
10.变量的进阶
10.1 可变类型与不可变类型
根据内存中的数据是否允许修改, 将数据类型分为可变类型与不可变类型
1)可变类型:可以修改
列表(list)
字典(dict)
集合(set)
2)不可变类型:不允许修改
数字类型:int,float,bool
字符串:str
元组:tuple
10.2 局部变量和全局变量
根据变量定义的位置,将变量分为局部变量和全局变量
局部变量: 在函数内部定义的变量
如果想要在函数外部使用函数变量的值,使用return返回
def func1():
num = 10 #局部变量
print(num)
def fun2():
num = 20 #局部变量
print(num)
if __name__ == '__main__':
func1()
fun2()
func1()
返回
# 10
# 20
# 10
全局变量:在函数外部定义的变量
特点:
1)全局变量,可以在任意函数内访问,读取
2)想要在函数内部修改全局变量的引用,需要使用 global 关键字声明
3)如果在函数内部出现和全局变量名字相同的局部变量, 在函数内部使用的是局部变量
11. 函数进阶
11.1 函数返回多个数据值
return关键字两个作用:
1)返回数据值
2)结束函数的运行
函数中如果想要返回多个数据值,一般是组成元组进行返回
def calc(a,b):
"""返回两个数的和及差"""
return a+b,a-b
result = calc(10,20)
print(result)
# (30, -10)
11.2 函数传参的方式
是指如何将实参的值传递给形参
位置传参:在函数调用时, 按照形参的顺序将实参的值传递给形参
关键字传参:在函数调用时,指定将实参传递给哪个形参
混合使用:
1)位置参数必须写在关键字参数的前边
2)同一个形参只能接收一个实参值
def show_info(name,age):
print(f"name:{name},age:{age}")
# 位置传参
show_info("feifei",18)
# 关键字传参
show_info(age=18,name = "feifei")
# 混合使用
show_info("feifei",age=18)
#name:feifei,age:18
#name:feifei,age:18
#name:feifei,age:18
11.3 多值参数:
1)在函数定义的时候,不确定在调用的时候, 实际参数有多少个,可以用多值参数
2)普通函数前面加上一个 *,一般写作是*args (arguments),类型是元组
参数顺序
def 函数名(普通,*args,缺省):
pass
def my_sum(*args):
"""任意多个字符求和"""
num = 0
for i in args:
num += i
return num
print(my_sum(1,2)) #3
print(my_sum(1,2,3,4,5)) #15
11.4 拆包
my_tuple = (1,2,3,4,5)
print(my_sum(*my_tuple)) # 15
想要把列表(元组)中的数据作为位置参数进行传递,只需要在列表(元组)前加上一个 *,进行拆包