博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.1Python函数(一)
阅读量:6305 次
发布时间:2019-06-22

本文共 2839 字,大约阅读时间需要 9 分钟。

目录

目录

前言

分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习Python的初级函数。

(一)函数的基本知识

(1)函数的优点

  1. 体积小,减少内存大小,冗余度小。
  2. 重用性强,可重复利用。
  3. 维护方便。
  4. 分解任务,简化逻辑,使代码更加模块化。

(2)函数的分类

  1. 内建函数
  2. 三方函数
  3. 自定义函数

(二)函数的基本使用

==1.函数的简单定义==

(1)语法说明

def 函数名():

​ 函数体

(2)源代码

# 定义一个简单函数def test():    print(2**2)    print(2**3)    print(2**4)# 调用函数test()

(3)输出效果

01.png

==2.传值函数==

(1)语法说明

定义语法:

def 函数名(var1,var2,……)

​ 函数体

调用的时候,有两种方式:

  1. 顺序调用,要求实参与形参一一对应。
  2. 关键字调用,可以不按照顺序调用。

(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)输出效果

02.png

==3.不定长函数==

(1)语法说明

当形参为下面两种形式的时,为不定长参数

  1. *args --- 接收为元组类型, 只要使用星号就可以,名字没关系,习惯用args而已。
  2. **kwargs ---接收为字典类型。其传值时,必须是关键字传值。

注意:装包与拆包

  1. 装包:args与kwargs 就是表示整个元组与字典的整体,叫装包
  2. 拆包:*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)输出效果

03.png

==4.缺省函数==

(1)语法说明

在定义函数的时候,给形参赋值,就是缺省函数,所赋的值便是默认值,

def test(name="me")

而在调用的时候,可以传入参数,也可以不传入参数。

传入参数时,以所传的参数优先。

不传入参数时,为默认值。

(2)源代码

# 定义缺省参数def test(name="zyg"):    print(name)# 不传入参数, 默认值test()# 传入参数,优先值是传入的值test("me")

(3)输出效果

04.png

==5.函数的传值过程==

(1)语法说明

在python里函数的传值:都是==引用传递==

  1. 值传递(从实参复制一个副本)传递给形参
  2. 引用传递(直接把实参的id)传给形参

Python的可变数据类型与不可变数据类型

  1. 可变数据类型:value值改变,id值不改变。(列表,字典)
  2. 不可变类型:value值改变,id值随之改变。(数值类型,字符串类型,布尔类型,元组类型)

Python里函数是否可以改变实参内容问题

  1. 若实参是可变数据类型,则可以实参内容
  2. 若实参是不可变数据类型,则不可以实参内容

(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)

05.png

(3)不可变类型的实例

# 定义一个函数,用id()来判断其是值传递,还是地址传递?def test(num):    print(id(num))    num = 5    print(num)    print(id(num))number = 1print(id(number))test(number)print("最后的id", id(number))print("最后的值", number)

06.png

==6.具有返回值函数==

(1)语法说明

当我们需要函数处理过后,返回一个结果值。可以使用

return 结果值

结果值:可以是元组类型,列表类型,拆包后的数据

(2)源代码

# 定义一个具有返回值的函数def test(a, b):    mysum = a + b    mysub = a - b    return (a, b)n1 = 4n2 = 2sum_1, sub_1 = test(n1, n2)print(sum_1)print(sub_1)

(3)输出效果

07.png

==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)输出效果

08.png

作者:Mark

日期:2019/02/02 周六

转载于:https://www.cnblogs.com/zyg123/p/10348218.html

你可能感兴趣的文章
模版方法模式--实现的capp流程创建与管理
查看>>
软件需求分析的重要性
查看>>
eclipse的scala环境搭建
查看>>
UVA465:Overflow
查看>>
HTML5-placeholder属性
查看>>
Android选择本地图片过大程序停止的经历
查看>>
poj 2187:Beauty Contest(旋转卡壳)
查看>>
《Flask Web开发》里的坑
查看>>
Python-库安装
查看>>
Git笔记
查看>>
普通人如何从平庸到优秀,在到卓越
查看>>
SLAM数据集
查看>>
c#学习笔记05——数组&集合
查看>>
【图论算法】Dijstra&BFS
查看>>
注册和上传文件(头像)
查看>>
使用OVS
查看>>
键盘回收的几种方法
查看>>
Python(条件判断和循环)
查看>>
day4 linux安装python
查看>>
LeetCode Container With Most Water (Two Pointers)
查看>>