一、函数的基本操作
函数:表示生活中的一种行为
1.函数的定义
def 函数名称(参数列表): 参数列表:表示可以接受0~n个参数
函数中要执行的代码
[return 返回结果] 可以有返回结果/没有返回结果
def eat():
print("模拟执行函数中的代码...")
print("函数中的代码在执行")
print("函数中的代码在执行")
print("函数中的代码在执行")
print("函数中的代码在执行")
# 执行函数:调用执行:通过函数的名称,直接执行函数中的代码
eat()
# 函数的命名规范:和变量的命名规范一致!
# 见名知意:基本要做到的是~单词全拼,不要担心函数/变量名称太长
# 命名规则:字母、数字、下划线组成,数字不能开头
# 项目规范:《下划线分隔命名法》、驼峰命名法
二、函数的参数
参数:其实就是一种变量
是一种特殊的变量:专门给函数接受数据使用的
# 多个参数的操作
def show_msg(name, msg):
# 留言的函数
print("%s给您留言了:%s" % (name, msg))
show_msg('tom', '我在未来等你...')
三、函数的返回值
程序
函数:返回值:返回的(运算)结果
返回值操作:return关键字
四、变量
变量:临时存储数据的容器:工具!
1. 所有人都可以使用的:全局变量
# 2. 只有当前函数可以使用的变量:局部变量
全局变量:声明在函数外部,当前文件中~从声明开始的所有地方都可以访问的变量
# 局部变量:声明在函数内部,只有当前函数中可以访问的变量;出了函数~谁都解析不了
global name # 声明在函数中要使用全局变量 name 函数外部有全局变量时
global msg # 在函数中声明定义了一个全局变量 msg
五、函数中参数的处理
1 位置参数
def test1(p1, p2, p3):
print(p1, p2, p3)
按照位置顺序 test1(10, 20, 30)
2 默认值参数:定义函数的参数时,可以给参数赋值
def test2(n1, n2, opra="+"):
#def test(n1, opra="+", n2):
print("计算n1:[%s]和n2[%s]进行opra[%s]运算" % (n1, n2, opra))
test2(10, 20)
test2(10, 20, "/")
3. 实参关键字参数[可选]:主要目的是为了提高代码的可读性
def test3(p1, p2, p3):
print(p1, p2, p3)
test3(10, 20, 30)# 按照默认的位置顺序赋值
test3(p2=20, p1=10, p3=30)# 按照形参名称赋值[可以打乱位置顺序]
4. 实参强制关键字参数:提高代码的可读性
def test4(*, p1, p2, p3):
实参传递数据时,形式参数中符号* 后面的所有参数~都要使用k=v的关键字参数方式传递数据
test4(p1=10, p2=20, p3=30)
print(p1, p2, p3)
六、参数操作进阶
1. 可变参数:函数在执行过程中,可以接受0~N个参数
def test(*args): # args: arguments 参数
print(args)
test("hello", "jerry")
test(1, 1, 2, 3, 5, 8, 13, 21)
2. 可变关键字参数
def test2(**kwargs): # keyword arguments=>kwargs
print(kwargs,kwargs.get('name'))
test2(name="jerry", age=18, gender="男")
3. 函数的参数:万能形参
def test3(*args, **kwargs):
print(args, kwargs)
test3("hello", "world", name="tom")
七、解包
def test(p1, p2):
print(p1, p2)
非正常调用:列表解包
nums = [10, 20]
# 列表参数前面添加一个*符号,表示将列表拆分成一个一个独立的数据传递
test(*nums) # test(*nums) -> test(10, 20)
# 非正常调用:字典解包
nums2 = {"p1": 100, "p2": 200}
test(**nums2) # test(**nums2)-> test(p1=100, p2=200)