5.1Python函数(一)
程序员文章站
2022-04-30 10:15:29
目录 [TOC] 前言 分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习Python的初级函数。 (一)函数的基本知识 (1)函数的优点 1. 体积小,减少内存大小,冗余度小。 2. 重用性强,可重复利用。 3. 维护方便。 4. 分解任务,简化逻 ......
目录
目录
前言
分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习python的初级函数。
(一)函数的基本知识
(1)函数的优点
- 体积小,减少内存大小,冗余度小。
- 重用性强,可重复利用。
- 维护方便。
- 分解任务,简化逻辑,使代码更加模块化。
(2)函数的分类
- 内建函数
- 三方函数
- 自定义函数
(二)函数的基本使用
==1.函数的简单定义==
(1)语法说明
def 函数名():
函数体
(2)源代码
# 定义一个简单函数 def test(): print(2**2) print(2**3) print(2**4) # 调用函数 test()
(3)输出效果
==2.传值函数==
(1)语法说明
定义语法:
def 函数名(var1,var2,……)
函数体
调用的时候,有两种方式:
- 顺序调用,要求实参与形参一一对应。
- 关键字调用,可以不按照顺序调用。
(2)源代码
# 定义一个带参数的函数 def test(var1, var2): print(var1+var2) print(var1**2+var2**2) print(var1**3+var2**3) # 顺序调用带参数的函数 print("顺序调用") test(1, 2) # 关键字调用带参数函数 print("关键调用") test(var2=2, var1=1)
(3)输出效果
==3.不定长函数==
(1)语法说明
当形参为下面两种形式的时,为不定长参数
- *args --- 接收为元组类型, 只要使用星号就可以,名字没关系,习惯用args而已。
- **kwargs ---接收为字典类型。其传值时,必须是关键字传值。
注意:装包与拆包
- 装包:args与kwargs 就是表示整个元组与字典的整体,叫装包
- 拆包:*args 与 **kwargs 表示元组和字典的每个元素,叫拆包
(2)源代码
# 定义不定长的参数- *args 接收的是元组类型 def test1(*args): print(args, type(args)) print(*args) # 定义不定长的参数- *args 接收的是字典类型 def test2(**kwargs): print(kwargs, type(kwargs)) # 输出keyword print(*kwargs) # 使用value,不能打印出来,不过可以使用 # 而且形参与实参的keyword一样,其实就是关键字调用 test3(**kwargs) def test3(a, b, c): print(a) print(b) print(c) # 调用参数,并接收的是 元组 test1(1, 2, 3) # 调用参数,并接收的是 字典 test2(a="zsj", b=18, c="m")
(3)输出效果
==4.缺省函数==
(1)语法说明
在定义函数的时候,给形参赋值,就是缺省函数,所赋的值便是默认值,
def test(name="me")
而在调用的时候,可以传入参数,也可以不传入参数。
传入参数时,以所传的参数优先。
不传入参数时,为默认值。
(2)源代码
# 定义缺省参数 def test(name="zyg"): print(name) # 不传入参数, 默认值 test() # 传入参数,优先值是传入的值 test("me")
(3)输出效果
==5.函数的传值过程==
(1)语法说明
在python里函数的传值:都是==引用传递==
- 值传递(从实参复制一个副本)传递给形参
- 引用传递(直接把实参的id)传给形参
python的可变数据类型与不可变数据类型
- 可变数据类型:value值改变,id值不改变。(列表,字典)
- 不可变类型:value值改变,id值随之改变。(数值类型,字符串类型,布尔类型,元组类型)
python里函数是否可以改变实参内容问题
- 若实参是可变数据类型,则可以实参内容
- 若实参是不可变数据类型,则不可以实参内容
(2)可变类型的实例
# 定义一个函数,用id()来判断其是值传递,还是地址传递? def test(num): print(id(num)) num[1] = 5 print(num) print(id(num)) list1 = [1, 2, 3] print(id(list1)) test(list1) print("最后的id", id(list1)) print("最后的值", list1)
(3)不可变类型的实例
# 定义一个函数,用id()来判断其是值传递,还是地址传递? def test(num): print(id(num)) num = 5 print(num) print(id(num)) number = 1 print(id(number)) test(number) print("最后的id", id(number)) print("最后的值", number)
==6.具有返回值函数==
(1)语法说明
当我们需要函数处理过后,返回一个结果值。可以使用
return 结果值
结果值:可以是元组类型,列表类型,拆包后的数据
(2)源代码
# 定义一个具有返回值的函数 def test(a, b): mysum = a + b mysub = a - b return (a, b) n1 = 4 n2 = 2 sum_1, sub_1 = test(n1, n2) print(sum_1) print(sub_1)
(3)输出效果
==7.函数的使用说明==
(1)说明:
函数的说明都有一个标准的写法,才能调用help查看
def 函数名():
"""
功能:xxxxx
var1:
var2:
....
return xxxx
"""
查看帮助可以用:help(函数名) ,注意是函数名,不是函数调用。
(2)源代码
# 定义一个具有返回值的函数 def test(a, b=1): """ 功能:该函数实现两个值的加减,并返回结果。 :param a: 参与运算的一个值,数字类型,不可选,无默认值 :param b: 参与运算的另一个值,数字类型,可选,默认值为1 :return: 和与差的结果,元组类型。例如 (1, 2) """ mysum = a + b mysub = a - b return (a, b) # 查看帮助 help(test)
(3)输出效果
作者:mark
日期:2019/02/02 周六
上一篇: 原先只是他一个,现在可能加上他老婆了
下一篇: 我有个同学路哥