目录:
第11节 函数基础
目录
- (1)函数的作用——封装代码,高效的代码重用
- (2)函数的使用步骤——先定义后调用
- 🔺(3)函数的参数作用
- 🔺(4)函数的返回值作用——return 退出当前函数+返回结果给用户
- (5)函数的说明文档——help( )
- 🔺(6)函数嵌套
第12节 函数提高(参数、多返回值、拆包…)
目录
- 🔺(1)变量作用域:局部变量、全局变量、修改全局变量(关键字 global)
- (2)多函数程序执行流程
- 🔺(3)函数的返回值(多个)–以元组形式
- 🔺(4)函数参数–位置参数、关键字参数、缺省(默认)参数、不定长参数(*args、**kwargs)
- (5)拆包
- (6)交换变量值
- (7)引用
第13节 函数加强(递归、lambda表达式)
目录
- 🔺(1)函数应用:学员管理系统
- 🔺(2)递归
- (3)lambda表达式
学习内容:
#### 第11节 函数
目录
- (1)函数的作用——封装代码,高效的代码重用
- (2)函数的使用步骤——先定义后调用
- 🔺(3)函数的参数作用
- 🔺(4)函数的返回值作用——return 退出当前函数+返回结果给用户
- (5)函数的说明文档——help( )
- 🔺(6)函数嵌套
(1)函数的作用——封装代码,高效的代码重用
(2)函数的使用步骤——先定义后调用
# 定义函数
def 函数名(参数): #参数可有可无;冒号不能丢
代码1
代码2
......
# 调用函数
函数名(参数)
函数体验:复现ATM取钱功能
(3)函数的参数作用
# 需求:一个函数完成两个数的加法运算
def add_num(a, b):
c = a + b
print(f'和为{c}')
add_num(1, 2)
(4)函数的返回值作用——return 退出当前函数+返回结果给用户
def info_buy():
return '牛奶'
print("ok") # 遇到return退出当前函数,后面的代码不执行
goods = info_buy()
print(goods)
(5)函数的说明文档——help( )
# help(len) # help函数作用:查看函数的说明文档(函数解释说明的信息)
# 定义函数的说明文档
def 函数名(参数):
'''说明文档的位置'''
代码
......
# 查看函数的说明文档
help(函数名)
# 示例:
# 定义函数的说明文档-注释回车有奇效
def add_num(a, b):
'''
求a和b的和
:param a:
:param b:
:return:
'''
c = a + b
print(f'和为{c}')
# 查看函数的说明文档
# help(add_num(a, b)) # 报错,调用的是函数名,不能是函数
help(add_num)
(6)函数嵌套
# 1、打印一条横线
def print_line():
print('-'*20)
# 2、打印多条横线
def print_lines(num):
i = 0
while i < num:
print_line()
i += 1
# 3、打印
print_lines(5)
# 三个数求和
def sum_num(a, b, c):
return a + b + c
result = sum_num(1, 2, 3)
print(result)
# 三个数求平均值
def average_num(a, b, c):
result = sum_num(a, b, c)
return result / 3
d = average_num(1, 2, 3)
print(d)
第12节 函数提高(参数、多返回值、拆包…)
目录
- 🔺(1)变量作用域:局部变量、全局变量、修改全局变量(关键字 global)
- (2)多函数程序执行流程
- 🔺(3)函数的返回值(多个)–以元组形式
- 🔺(4)函数参数–位置参数、关键字参数、缺省(默认)参数、不定长参数(*args、**kwargs)
- (5)拆包
- (6)交换变量值
- (7)引用
(1)变量作用域:变量生效的范围,分为:局部变量、全局变量
- 修改全局变量:关键字 global
a = 100
print(a) # 100
def testA():
a = 50 # 此处不是对全局变量进行修改,相当于生成了一个新的局部变量
print(a)
def testB():
global a # global关键字:声明a为全局变量
a = 200
print(a)
testA() # 50
testB() # 200
print(a) # 200
(2)多函数程序执行流程
- 共用全局变量
- 函数1的返回值(所在变量)作为参数传递到函数2
(3)函数的返回值(多个)
- return后面可以连接列表、元组、字典,以返回多个值
def return_num():
return 1
return 2 # 不打印,因为第一个return已退出函数
def return_num2():
return 1, 2
print(return_num())
print(return_num2()) # 以元组形式打印,(1, 2)
(4)函数参数:
-
位置参数——调用函数时根据函数定义的参数位置来传递参数
-
关键字参数——调用时通过“键=值”的形式
def user_info(name, age, gender): print(f'我的名字是{name},我的年龄是{age},我的性别是{gender}') user_info('z', 2, '男') ''' 注意:传递和定义参数的<顺序>及<个数>必须一致;个数不一致会报错,顺序不一致会导致无意义 ''' user_info('z', gender='男', age=2) ''' 注意:如果存在位置参数,位置参数必须要在关键字参数前面 '''
-
【组包】缺省(默认)参数——用于定义函数,为参数提供默认值,调用函数时可不传递默认参数的值
def user_info2(name, age, gender='男'): print(f'我的名字是{name},我的年龄是{age},我的性别是{gender}') user_info2('z', age=15) user_info2('z', age=15, gender='女') # 修改默认值 ''' 注意:所有位置参数必须出现在默认参数前(包括函数定义和调用) '''
-
不定长(可变)参数——用于不确定调入时传入多少参数个数时,分为:包裹位置传递、包裹关键字传递
-
包裹位置传递
def user_info3(*args): print(args) # args接受所有位置参数,返回一个元组 user_info3('name') # ('name',) user_info3('zzz', 18) # ('zzz', 18)
-
包裹关键字传递
def user_info4(**kwargs): print(kwargs) # 收集所有的关键字参数,返回一个字典 user_info4(name='z', gender='男', age=2) # {'name': 'z', 'gender': '男', 'age': 2}
-
(5)拆包
-
元组(拆包)
def return_num(): return 100, 200 result = return_num() print(result) # 打印(100, 200) num1, num2 = return_num() print(num1) # 100 print(num2) # 200
-
字典(拆包)
dict1 = {'name': 'Z', 'age': 18} a, b = dict1 # 对字典进行拆包,取出来的是字典的key print(a) # 打印name print(dict1[a]) # 打印Z(字典通过key调用value值)
(6)交换变量值
-
方法一:借助另外的变量
-
🔺方法二:
a, b = b, a
(7)引用
-
在python中,值都是靠引用来传递得,可以使用id( )判断两个变量是否为同一个值的引用
-
可变数据类型
# 不可变:int型 A = 1 B = A print(id(A)) print(id(B)) # A与B的id值相同 A = 2 print(A, B) # 2 1
-
不可变数据类型
aa = [100, 200] bb = aa print(id(aa)) print(id(bb)) # id值相同 aa.append(300) print(aa, bb) # [100, 200, 300] [100, 200, 300] print(id(aa),id(bb)) # # id值相同
-
引用当作实参
''' 需求:引用是否可以当作实参 思路: 1、定义函数--有形参 1.1、打印参数值 1.2、打印形参id 1.3、改变形参的数据,打印值与id,看id是否改变 2、调用函数--把可变、不可变两种类型依次带入 ''' def text(a): print(a) print(id(a)) a += a print(a) print(id(a)) b = 1 text(b) ''' 结果: 1 140729310372688 2 140729310372720 ''' c = [10, 20] text(c) ''' 140729310372720 [10, 20] 1665897095816 [10, 20, 10, 20] 1665897095816 '''
-
可变、不可变类型——看数据能否直接修改
第13节 函数加强(递归、lambda表达式)
目录
- 🔺(1)函数应用:学员管理系统
- 🔺(2)递归
- (3)lambda表达式
(1)函数应用:学员管理系统
【代码统一放到下篇文章,请移步获取】
(2)递归–一种编程思想
-
特点:1、函数内部自己调用自己;2、必须有出口
-
''' 需求:3以内数字累加和 分析: 6=3+2以内数字累加和 2以内数字累加和=2+1以内数字累加和 1以内数字累加和=1 #出口 ''' def num(n): # 出口 if n == 1: return 1 else: return n + num(n-1) result = num(3) print(result)
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBP0pxtr-1661155312535)(python.assets/image-20220822114739233.png)]
(3)lambda表达式(也叫匿名函数)
-
作用:简化代码
- 【内存执行函数所占用的空间要大于执行lambda的内存空间】
-
语法:
lambda 参数列表 : 表达式 # lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用 # lambda表达式能接收任何数量的参数,但只能返回一个表达式的值
-
体验:
#需求:计算a+b # 函数实现 def add_num(a, b): return a + b print(add_num(1, 2)) # lambda表达式实现 c = lambda a, b: a + b print(c(1, 2))
-
lambda的参数形式
-
无参数
pn1 = lambda: 100 print(pn1()) # 100
-
一个参数
pn2 = lambda aa: aa print(pn2('Hello')) # Hello
-
默认参数
pn3 = lambda a, b, c=100: a + b + c print(pn3(1, 2)) # 103
-
可变参数*args
pn4 = lambda *args: args print(pn4(1, 2, 4)) # 接收不定长参数,打印:(1, 2, 4)
-
可变参数**kwargs
pn5 = lambda **kwargs: kwargs print(pn5(name = 'zz', age = 11)) # 接收不定长参数,打印:{'name': 'zz', 'age': 11}
-
应用
-
带判断的lambda
fn1 = lambda a, b: a if a > b else b print(fn1(100, 50))
-
列表数据按字典key的值排序
students = [{'name': 'z', 'age': 11}, {'name': 'x', 'age': 1}, {'name': 'y', 'age': 111} ] # 按name值升序排序 students.sort(key=lambda x: x['name']) print(students) # 按name值降序排序 students.sort(key=lambda x: x['name'], reverse=True) print(students)
-
-