函数介绍
- 函数: 对某块具有独立功能的代码的封装,提高代码的重用性。
- 函数的定义和调用
- 定义:def 函数名()
- 调用: 函数名()
(1)每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了。
(2)如果函数中执行到了return也会结束函数
(3)遵循代码由上往下执行 会把上面的进行覆盖
- 函数的文档说明:help(函数名)-----能查看函数的相关说明
1、 函数参数
-
缺省参数:
(1)含义:在形参中默认有值的参数,称之为缺省参数。调用函数时,缺省参数的值如果没有传入,则取默认值。
(2)带有默认值的参数一定要位于参数列表的最后面 -
不定长参数
(1)定义:有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。
(2)如果很多个值都是不定长参数,那么这种情况下**,可以将缺省参数放到 args的后面*, 但如果有kwargs的话,kwargs必须是最后的
(3)def functionname([formal_args,] *args, **kwargs):
- def 函数名(*args): (备注 args名字可以自定义)
- 加了星号(*)的变量args会存放所有未命名的变量参数,
- 不定长参数元组是缺省参数,默认值为空元组
- 不定长参数元组需要使用位置参数调用
- 而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
- 不定长参数字典是缺省参数默认值为空字典
- 调用函数的参数方式
要么按照位置传参(实参和形参的个数相同, 位置要一一对应),要么以关键字传参(不关心其位置 只要把形参名写对即可)。
- 小总结
(1)调用时小括号中的参数,用来传递给函数用的,称为 “实参”
(2)定义时小括号中的参数,用来接收参数用的,称为 “形参”
2、函数返回值
返回值:所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果
一个函数中可以有多个return语句,但是只要有一个return语句被执行到,那么这个 函数就会结束了。
-
return的作用
(1)标识着一个函数有返回值 (return 返回值)
(2)提前结束函数的调用 (return) -
一次返回多个数据
(1)return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据
(2)如果return后面有多个数据,那么默认是元组
def function():
# return [1, 2, 3]
# return (1, 2, 3)
return {"num1": 1, "num2": 2, "num3": 3}
In [1]: a = 1, 2
In [2]: a
Out[2]: (1, 2)
In [3]:
In [3]: b = (1, 2)
In [4]: b
Out[4]: (1, 2)
In [5]:
3、函数类型
- 无参数,无返回值的函数
使用情况:一般情况下,打印提示灯类似的功能
- 无参数,有返回值的函数
一般情况下,像采集数据
- 有参数,无返回值的函数
对某些变量设置数据而不需结果时
- 有参数,有返回值的函数
一般情况下,像数据处理并需要结果的应用
4、函数的嵌套调用
def testB():
print('---- testB start----')
print('这里是testB函数执行的代码...(省略)...')
print('---- testB end----')
def testA():
print('---- testA start----')
# 调用 B函数
testB()
print('---- testA end----')
testA()
5、局部变量
- 定义:在函数内部定义的变量
- 作用范围:这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
- 作用:为了临时保存数据需要在函数中定义变量来进行存储
- 存在时间:当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了
不同的函数可以定义相同名字的局部变量
6、全局变量
- 定义:在函数外边定义的变量叫做全局变量
- global 变量名:告知python这不是定义一个与全局变量名相同的局部变量 而是要修改全局变量的值
- 作用范围:全局变量能够在所有的函数中进行访问
可以使用一次global对多个全局变量进行声明,global var_name,不能在声明的时候赋值。
global a, b
7、拆包、交换变量的值
- 对返回的数据直接拆包
拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
- 除了对元组拆包之外,还可以对列表、字典等拆包
- python的写法
(1)name, age, no = “小明”, 20, “001”
(2)0 <= a <= 10 - 交换2个变量的值
# 第1种方式
# a = 4
# b = 5
# c = 0
#
# c = a
# a = b
# b = c
#
# print(a)
# print(b)
# 第2种方式
# a = 4
# b = 5
# a = a+b # a=9, b=5
# b = a-b # a=9, b=4
# a = a-b # a=5, b=4
# print(a)
# print(b)
# 第3种方式
a, b = 4, 5
a, b = b, a
print(a)
print(b)
8、引用
python中变量保存的不是数值 而是引用
- 我们可以用id()来判断两个变量是否为同一个值的引用
- 引用当作实参
(1)python中函数参数是引用传递(注意不是值传递)
(2)对于不可变类型,因变量不能修改,所以运算不会影响到变量自身
b = b + b 和 b += b 都是属于重新赋值
(3)而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量
b = b + b (重新赋值)–引用改变
b += b (b.extend(b)) (对原来的数据进行修改)–引用不改变 - 对于不可变类型的
9、可变、不可变类型
- 定义:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
- 可变类型有:列表、字典、集合
- 不可变类型有:数字、字符串、元组