文章目录
一、函数的定义
# 创建高楼
def create_building():
# 创建房间
create_room()
# 创建电梯
create_stair()
def create_room():
print('开始创建房间')
print('正在创建房间')
print('创建房间完成')
def create_stair():
print('开始创建电梯')
print('正在创建电梯')
print('创建电梯完成')
create_building()
开始创建房间
正在创建房间
创建房间完成
开始创建电梯
正在创建电梯
创建电梯完成
二、4种函数的参数形式
# 1. 普通参数
def say_hi(name):
print(f'hello,{name}')
print('欢迎来到大熊课堂')
say_hi('JackMa')
def create_window(width,height):
print(f'窗口的宽是{width};高是{height}')
create_window(2,1)
# 2. 默认参数
def total(hour, salary=8):
print(f'今天的薪水是{hour * salary}元')
total(8) # 用默认值,不会报错
total(8, 10)
# 3. 关键字参数 解决函数传参顺序问题
def student(firstname, lastname):
print(f'firstname is {firstname};lastname is {lastname}')
student('andy', 'Feng')
student(lastname='Feng', firstname='andy')
# 4. 不定长参数 *args元组 **kwargs字典
def my_function(width, height, *args, **kwargs):
print(width)
print(height)
print(args)
print(kwargs)
my_function(2.3, 4.5, 'hello', 'welcome', 'to', 'daxiong', 'thankyou', lastname='Feng', firstname='andy')
hello,JackMa
欢迎来到大熊课堂
窗口的宽是2;高是1
今天的薪水是64元
今天的薪水是80元
firstname is andy;lastname is Feng
firstname is andy;lastname is Feng
2.3
4.5
('hello', 'welcome', 'to', 'daxiong', 'thankyou')
{'lastname': 'Feng', 'firstname': 'andy'}
三、函数返回值
# 例1:求圆的面积
pi = 3.14
def area(r):
return pi * (r ** 2)
print(area(2))
# 例2:将分钟转化为“时-分” 100分钟=1小时40分 1小时=60分钟 100/60
def transform_minute(minute):
hours = minute // 60
minutes = minute % 60
print(f'{minute}分钟可以转化为{hours}小时{minutes}分钟')
return hours, minutes
hours, minutes = transform_minute(200)
print(f"hours is {hours}")
print(f'200分钟可以转化为{hours}小时{minutes}分钟')
print(transform_minute(200))
12.56
200分钟可以转化为3小时20分钟
hours is 3
200分钟可以转化为3小时20分钟
200分钟可以转化为3小时20分钟
(3, 20)
四、函数的作用域,全局/局部变量
# 全局变量
a = 1 # 不可变类型 想在函数内修改需要在前面加global
l = [1, 2, 3] # 可变类型 不用global类型就可以在函数内修改
def test1():
# a = 100 # 局部变量
global a
a += 1 # 修改全局变量
l.append(4)
print(l)
def test2():
# a = 300 # 局部变量
print(a)
test2()
test1()
print(a)
1
[1, 2, 3, 4]
2
五、函数的嵌套
def test1():
a = 10
print('test1开始执行')
print(f'test1内部变量a的值是{a}')
def test2():
# 内部函数修改外部函数的值,需要加nonlocal函数
# 函数内部修改不可变全局变量,需要加global函数
nonlocal a
a = 100
print('test2开始执行')
print(f'test2内部变量a的值是{a}')
test2()
print(f'test1内部变量a的值是{a}')
test1()
# test2() # 不能调用,只能在内部
test1开始执行
test1内部变量a的值是10
test2开始执行
test2内部变量a的值是100
test1内部变量a的值是100
六、函数的递归
大部分递归都可以用循环来代替
例子:算阶乘
def fact(n):
if n == 1:
return 1
result = n * fact(n-1)
return result
# 不能用太多递归次数,因为python用栈来存函数变量,如果函数太多,会导致栈溢出
result = fact(3)
print(result)