函数(一)---定义、参数、返回值、作用域

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
posted @ 2022-01-12 21:27  ElsaWang  阅读(183)  评论(0)    收藏  举报