python基础知识总结(第二篇):基础语句(判断语句和循环语句)
python基础知识总结(第五篇):文件操作、异常、模块与包
目录
一、函数初阶
1.函数定义
函数:是组织好的,可重复使用的,用来实现特定功能的代码段
语法:
def 函数名(传入参数):
函数体
return 返回值
# 定义一个函数,输出相关信息
def say_hi():
print("你好,python")
# 调用函数,让定义的函数开始工作
say_hi()
说明:函数必须先定义,才能调用
2.函数的参数
参数作用:在函数运行的时候,接受外部传入的数据
示例:
# 定义2数相加的函数,通过参数接收被计算的2个数字
def add(x, y, z):
result = x + y + z
print(f"{x} + {y} + {z}的计算结果是:{result}")
# 调用函数,传入被计算的2个数字
add(5, 6, 7)
说明:
- 函数定义中的参数,称之为形式参数
- 函数调用中的参数,称之为实际参数
- 函数的参数数量不限,使用逗号分隔开
- 传入参数的时候,要和形式参数一一对应,逗号隔开
3.函数的返回值
返回值:程序中函数完成事情后,最后给调用者的结果
语法:
def 函数名(传入参数):
函数体
return 返回值
变量 = 函数(参数)
这样函数的返回值就会被存进变量里
# 定义一个函数,完成2数相加功能
def add(a, b):
result = a + b
# 通过返回值,将相加的结果返回给调用者
return result
# 函数的返回值,可以通过变量去接收
r = add(5, 6)
print(r)
4.变量的作用域
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
分为两类:局部变量和全局变量
- 局部变量:定义在函数体内部的变量,即只在函数体内部生效
# 局部变量
def test_a():
num = 100
print(num)
test_a()
# 出了函数体,局部变量就无法使用了
print(num)
- 全局变量:在函数体内外都能生效的变量
# 全局变量
num = 200
def test_a():
print(f"test_a: {num}")
def test_b():
print(f"test_b: {num}")
test_a()
test_b()
print(num)
- global关键字:可以在函数内部声明变量为全局变量
# global关键字,在函数内声明变量为全局变量
num = 200
def test_a():
print(f"test_a: {num}")
def test_b():
global num # 设置内部定义的变量为全局变量
num = 500
print(f"test_b: {num}")
test_a()
test_b()
print(num)
二、函数进阶
1.函数多返回值
如果有多个返回值,用逗号隔开
# 演示使用多个变量,接收多个返回值
def test_return():
return 1, "hello", True
x, y, z = test_return()
print(x)
print(y)
print(z)
2.函数多种传参方式
(1) 位置传参
调用函数时根据函数定义的参数位置来传递参数
def user_info(name, age, gender):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
# 位置参数
user_info('小明', 20, '男')
(2) 关键字传参
调用函数时通过“键=值”形式传递参数
def user_info(name, age, gender):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
# 关键字参数
user_info(name='小王', age=11, gender='女')
# 可以不按照参数的定义顺序传参
user_info(age=10, gender='女', name='潇潇')
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info('甜甜', gender='女', age=9)
(3) 不定长传参
不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
类型:位置传递和关键字传递
- 位置不定长传递以*号标记一个形式参数,以元组的形式接受参数,形式参数一般命名为args
# 位置不定长, *号
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def user_info(*args):
print(f"args参数的类型是:{type(args)},内容是:{args}")
user_info(1, 2, 3, '小明', '男孩')
运行结果:
- 关键字不定长传递以**号标记一个形式参数,以字典的形式接受参数,形式参数一般命名为kwargs
# 不定长 - 关键字不定长, **号
def user_info(**kwargs):
print(f"args参数的类型是:{type(kwargs)},内容是:{kwargs}")
user_info(name='小王', age=11, gender='男孩')
运行结果:
(4) 缺省传参
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(所有位置参数必须出现在默认参数前,包括函数定义和调用)
作用:当调用函数时没有传递参数,就会默认使用缺省参数对应的值
# 缺省参数(默认值)
def user_info(name, age, gender='男'):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
user_info('小天', 13)
3.匿名函数
(1) 函数作为参数传递
这是一种计算逻辑的传递,而非数据的传递
# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
result = compute(1, 2) # 确定compute是函数
print(f"compute参数的类型是:{type(compute)}")
print(f"计算结果:{result}")
# 定义一个函数,准备作为参数传入另一个函数
def compute(x, y):
return x + y
# 调用,并传入函数
test_func(compute)
运行结果:
(2) lambda匿名函数
语法:lambda 传入参数: 函数体(一行代码)
# 定义一个函数,接受其它函数输入
def test_func(compute):
result = compute(1, 2)
print(f"结果是:{result}")
# 通过lambda匿名函数的形式,将匿名函数作为参数传入
test_func(lambda x, y: x + y)
运行结果:
注意事项:
- 匿名函数用于临时构建一个函数,只用一次的场景
- 匿名函数的定义中,函数体只能写一行代码,如果函数体要写多行代码,不可用lambda匿名函数,应使用def定义带名函数