函数
函数是可重用的程序代码块。
函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现
Python 函数的分类
内置函数
我们前面使用的 str()、list()、len()等这些都是内置函数,我们可以拿来直接使用。
标准库函数
我们可以通过 import 语句导入库,然后使用其中定义的函数
第三方库函数
Python 社区也提供了很多高质量的库。下载安装这些库后,也是通过 import 语句导入,然后可以使用这些第三方库的函数
用户自定义函数
用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。今天我
函数的使用
Python 中,定义函数的语法如下:
def 函数名 ([参数列表]) :
'''文档字符串'''
函数体/若干语句
简单定义一个函数
def add(a,b,c):
'''完成三个数的加法,并返回他们的和'''
sum = a+b+c
print("{0}、{1}、{2}三个数的和是:{3}".format(a,b,c,sum))
return sum
add(10,20,30) # 10、20、30三个数的和是:60
add(30,40,50) # 30、40、50三个数的和是:120
参数说明及注释
形参和实参
def printMax(a, b):
"""实现两个数的比较,并返回较大的值"""
if a > b:
print(a, "较大值")
return a
else:
print(b, "较大值")
return b
printMax(10, 20)
printMax(30, 5)
上面的 printMax 函数中,在定义时写的printMax(a,b)
。a和b
称为“形式参数”,简称“形参”。也就是说,形式参数是在定义函数时使用的。 形式参数的命名要符合“标识符”命名规则。
在调用函数时,传递的参数称为“实际参数”,简称“实参”。上面代码中,printMax(10,20)
,10和20
就是实际参数。
文档字符串(函数的注释)
程序的可读性最重要,一般建议在函数体开始的部分附上函数定义说明,这就是“文档字符串”,也有人成为“函数的注释”。我们通过三个单引号或者三个双引号来实现,中间可以加入多行文字进行说明。
def print_star(n):
"""
根据传入的n,打印多个星号
:param n: 传入的数字
:return: n个星号拼接的字符串
"""
s = "*" * n
print(s)
return s
help(print_star)
print(print_star.__doc__)
我们调用 help(函数名) 可打印输出函数的文档字符串,我们也可以通过函数名.doc直接获取到函数的文档字符串,自己进行打印。
返回值详解
如果函数体中包含 return 语句,则结束函数执行并返回值
如果函数体中不包含 return 语句,则返回 None 值
要返回多个值,使用列表、元组、字典、集合将多个值“存起来”即可
定义一个打印 n 个星号的无返回值的函数
def print_star(n):
print("*"*n)
print_star(5) # *****
定义一个返回两个数平均值的函数
def my_avg(a,b):
return (a+b)/2
#如下是函数的调用
c = my_avg(20,30)
print(c) # 25
返回一个列表
def printShape(n):
s1 = "#"*n
s2 = "$"*n
return [s1,s2]
s = printShape(5)
print(s) # ['#####', '$$$$$']
变量的作用域
变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。
全局变量:
- 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。
- 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
- 要在函数内改变全局变量的值,使用 global 声明一下
局部变量:
- 在函数体中(包含形式参数)声明的变量。
- 局部变量的引用比全局变量快,优先考虑使用
- 如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量
a = 100 # 全局变量
def f1():
global a # 如果要在函数内改变全局变量的值,增加global关键字声明
print(a) # 打印全局变量a的值
a = 300
f1() ## 100
f1() # 300
print(a) #300
a=100
def f1():
a = 3 #同名的局部变量
print(a)
f1() # 3
print(a) #a仍然是100,没有变化
提示
局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。