函数
如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数.
定义函数的格式
def 函数名(参数1,参数2,...,参数n):
函数体(语句块)
注意:
1)函数名的命名规则要符合python中的命名要求:一般用小写字母和单下划线、数字等组合 匈牙利命名法(sUserName), 驼峰式大小写(userName), 帕斯卡命名法(UserName)
2)def是定义函数的关键词,这个简写来自英文单词define
3)函数名后面是圆括号,括号里面,可以有参数列表,也可以没有参数
4)千万不要忘记了括号后面的冒号
5)函数体(语句块),相对于def缩进,按照python习惯,缩进四个空格
6)定义一个什么事也不做的空函数,可以用 pass 语句
7)pass 可以用来作为占位符,还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来
8)所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果. 没有返回值,默认返回None
函数的优势
从理论上说,不用函数,也能够编程,我们在前面已经写了程序,就没有写函数,当然,用python的内建函数姑且不算了。现在之所以使用函数,主要是: 1. 降低编程的难度(分而治之的思想) 2. 代码重用。避免了重复劳动,提供了工作效率。
局部变量
局部变量,就是在函数内部定义的变量 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用
# 代码
def saveMoney(money):
allMoney = 100
print("存钱前金额:", allMoney)
allMoney += money
print("存钱后金额:", allMoney)
def viewMoney():
allMoney = 500
print("余额:", allMoney)
if __name__ == "__main__":
saveMoney(66)
viewMoney()
# 运行结果
存钱前金额: 100
存钱后金额: 166
余额: 500
全局变量
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量。
在函数外边定义的变量叫做全局变量
全局变量能够在所有的函数中进行访问
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的 小技巧: 强龙不压地头蛇(就近原则)
不使用global声明全局变量时不能修改全局变量?
global的本质是声明可以修改全局变量的指向, 即变量可以指向新的数据。
1). 不可变类型的全局变量: 指向的数据不能修改, 不使用global时无法修改全局变量。
2). 可变类型的全局变量: 指向的数据可以修改, 不使用global时可以修改全局变量。
# 代码
allMoney = 100
def saveMoney(money):
global allMoney
print("存钱前金额:", allMoney)
allMoney += money
print("存钱后金额:", allMoney)
def viewMoney():
print("余额:", allMoney)
if __name__ == "__main__":
saveMoney(66)
viewMoney()
# 运行结果
存钱前金额: 100
存钱后金额: 166
余额: 166
注意:全局变量alloney为不可变数据类型,且有修改allMoney += money,必须global声明
形参与实参
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”
def add(x, y): #a,b为形参
"""
求两数之和
:param x:
:param y:
:return:
"""
return x + y
print(add(1, 2)) #1, 2为实参
参数检查
调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError;
如果参数类型不对,Python 解释器就无法帮我们检查;
数据类型检查可以用内置函数 isinstance 实现。
参数传递(默认参数)
默认参数可以降低调用函数的难度。
默认参数注意事项: 有多个参数时,变化大放前面,变化小的放后面; 必选参数在前,默认参数在后