函数(一)---定义、参数、返回值、作用域
1. 什么是函数?
函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项任务时,无须反复编写完成该任务的代码,只需要调用执行该任务的函数,让Python运行其中的代码即可
2. 函数的定义
定义完函数后,函数是不会自动执行的,需要调用它才可以
def say_hello(): #函数名 print('hello') #函数体 say_hello() #调用函数
def create_room(): print('准备创建房间') print('正在创建房间') print('完成创建房间') def create_stair(): print('准备创建楼梯') print('正在创建楼梯') print('完成创建楼梯') def create_building(): create_room() create_stair() create_building() """ 运行结果: 准备创建房间 正在创建房间 完成创建房间 准备创建楼梯 正在创建楼梯 完成创建楼梯 """
3. 函数的参数
a. 普通参数
单个参数
def say_hello(name): print(f'hello, {name}') say_hello('Elsa') # 运行结果: hello, Elsa
多个参数
def create_door(width, height): print(f'门的宽是{width}m,高是{height}m') create_door(2, 1)
b. 默认参数:
如果默认参数不传递新值, 则它的值为默认值, 否则,默认值为新传递的值
def day_salary(day, salary=11000): print(f'平均每天的薪水是{salary / day:.2f}元') day_salary(22) # 运行结果:平均每天的薪水是500.00元 day_salary(22, 14000) # 运行结果:平均每天的薪水是636.36元
c. 关键字传参
无须考虑函数调用中的参数顺序,还清楚地指出了函数调用中各个值的用途
def full_name(firstname, lastname): print(f'Your full name is {firstname} {lastname}') full_name(lastname='Wong', firstname='Elsa') # 运行结果:Your full name is Elsa Wong
d. 不定长参数
*args: 元组
def function_a(*args): print(args) for arg in args: print(arg) function_a('hello', 'Elsa') """ 运行结果: ('hello', 'Elsa') hello Elsa """
**kwargs: 字典
{'firstname': 'Elsa', 'lastname': 'Wong'}
firstname->Elsa
lastname->Wong
def function_c(width, height, *args, **kwargs): print(width) print(height) print(args) print(kwargs) function_c(2, 3, 'hello', 'world',firstname='Elsa', lastname='Wong') """ 运行结果: 2 3 ('hello', 'world') {'firstname': 'Elsa', 'lastname': 'Wong'}

4. 返回值
所谓“返回值”,就是程序中函数完成一件事后,最后得出的结果

def area(width, height): return width * height print(area(2, 3))
# 将分钟转换成时-分 def transfer_minute(minute): hours = minute // 60 minutes = minute % 60 return hours, minutes, minute hours, minutes, minute = transfer_minute(100) print(f'{minute}分钟可以转化成{hours}小时{minutes}分钟') # 运行结果:100分钟可以转化成1小时40分钟
5. 函数作用域
局部变量:
函数中定义的变量,不同的函数可以有相同的变量名,它的作用是临时保存函数中使用的数据
def test_1():
a = 100 #局部变量
print(a)
def test_2():
a = 300 #局部变量
print(a)
test_1()
test_2()
"""
运行结果:
100
300
"""
全局变量
模块级别定义的变量
a = 100 #全局变量
def test_1():
print(a)
def test_2():
b = 300 #局部变量
print(a)
print(b)
test_1()
# 运行结果:100
test_2()
"""
运行结果:
100
200
"""
print(a)
# 运行结果:100
全局变量的修改:
不可变类型的全局变量, 是要使用global关键字修改;可变类型的全局变量,不使用global也可以修改
a = 100 #不可变类型
def test_1():
global a
a = 1
print(a)
test_1()
print(a)
"""
运行结果:
1
1
"""
l = [1,2,3,4] #可变类型
def test_2():
l.append(5)
print(l)
test_1()
print(l)
"""
运行结果:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
"""
变量的优先级
局部变量 > 全局变量
a = 100 #全局变量
def test_1():
a = 200 #局部变量
print(a)
def test_2():
b = 300 #局部变量
print(a)
print(b)
test_1()
# 运行结果:200
test_2()
"""
运行结果:
100
200
"""
print(a)
# 运行结果:100

浙公网安备 33010602011771号