函数(function)是可重用的的代码块:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None
- 调用函数的格式:函数名()
一、调用函数之前,必须先定义函数,即先调用def定义函数对象:
- 内置函数对象会自动创建。
- 标准库和第三方库,在import导入模块时,会执行模块中的def语句。
二、程序的执行顺序:
def test():
'''函数执行顺序'''
print("第一个打印")
print("第二个打印")
test()
这个程序的执行顺序:
- 知道有test01这个函数,但不执行其内容
- 走到test(),执行该函数
- 打印:第一个打印
- 打印:第二个打印
如果下面这样写就会报错:
test()
def test():
'''写法有误函数'''
print("第一个打印")
test()
这个程序的执行顺序:
- 执行test()这个函数,但是已读信息的没有定义这个函数,所以报错。
三、形参和实参:
def test(a):
"""形参,实参"""
print(a)
test(10)
- 形参:在定义函数用的a
- 实参:调用函数时传的实际值10
四、return返回值:
-
如果函数中语句执行到return语句,则结束函数执行并返回return后方内容。
-
如果函数中不包含return语句,则返回None值。
-
要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可。
五、将函数的地址给另一个变量,感觉像类的实例化
def test():
print('打印输出')
c = test01
c()
# 结果和test()的执行结果是一样的
六、传递可变对象的引用
a = [1,2,3,4] # a是可变对象
def test(m): # a和m是同一对象,也就是引用的一个值,修改也是修改的同一个对象的值
m.append(15)
print(m)
test(a)
print(a)
[1, 2, 3, 4, 15]
[1, 2, 3, 4, 15]
a = [1,2,35]
b = a
b.append(56)
print(a)
print(b)
[1, 2, 35, 56]
[1, 2, 35, 56]
七、传递不可变对象
a = 100
b = a # 这时引用的还是一个地址
b += 200 # 由于a为不可变对象,所以此时新建对象,生成新引用
print(a)
print(b)
100
300
八、全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
九、各种函数
- 内置函数:list(),len(),str(),可以拿来直接用
- 标准库函数:可以通过import直接导入的库,然后使用其中定义的函数
- 第三方库函数:Python社区中提供的高质量库,通过下载安装库,也可以import使用
- 用户自定义的函数:就是def定义的