目录

前言

分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习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)输出效果

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

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

4.缺省函数

(1)语法说明

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

def test(name="me")

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

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

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

(2)源代码

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

(3)输出效果

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)

(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 周六

5.1Python函数(一)的更多相关文章

  1. 5.2Python函数(二)

    目录 目录 前言 (一)偏函数 ==1.说明== ==2.原代码== ==3.显示效果== (二)高阶函数 ==1.说明== ==2.源代码== ==3.运行效果== (三)返回值函数 ==1.说明= ...

  2. 2.1Python数据处理篇之---内建有关数学的函数

    目录 目录 前言 (一)数学相关得内建函数 (二)具体演示 1.求绝对值 2.创建一个复数 3.求商和余数 4.求x得y次幂 5.生成一个序列 6.四舍五入 7.对一个集合求和 8.求最大值 9.求最 ...

  3. 【学习总结】GirlsInAI ML-diary day-14-function函数

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day14 认识函数function 函数相当于一个固定的公式,一个映射.有输入,有输出. 1-python内置函数 max ...

  4. PYDay6- 内置函数、验证码、文件操作、发送邮件函数

    1.内置函数 1.1Python的内置函数 abs() dict() help() min() setattr() all() dir() hex() next() slice() any() div ...

  5. 17.3.13---join函数

    1-----Python中有join()和os.path.join()两个函数,具体作用如下:     join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成 ...

  6. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  7. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  8. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  9. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

随机推荐

  1. 【Java基本功】一文读懂String及其包装类的实现原理

    String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. S ...

  2. MongoDB比较两列大小 使用$subtract函数

    是找出整个表 a大于b的总数量,要怎么操作数据库呢,那就要用到$subtract函数 MongoDB比较两列大小 使用$subtract函数, // MongoDB 比较两列大小求出 啊>b 的 ...

  3. JavaWeb学习 (二十)————JavaWeb的两种开发模式

    一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示

  4. 模块,import,from xxx import xxx

    一,模块 模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别: 1,使用python编写的py文件 2,已被变异 ...

  5. [转]Angular4 自制分页控件

    本文转自:https://blog.csdn.net/Junyuan_123/article/details/79486276 过年后第一波,自制的分页控件,可能功能没有 PrimeNG 那么好,但是 ...

  6. LinQ是什么?

    •LINQ(发音:Link)是语言级集成查询(Language INtegrated Query) •LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询 •LINQ的目标是 ...

  7. ES6+ 开发 React 组件

    在这里简要的说一下这些语言新特性对 React 应用的开发有什么影响,这些 ES6+ 特性使得 React 开发更简单更有趣. 类 迄今为止,最能体现我们使用 ES6+ 来编写 React 组件的就是 ...

  8. foreach 引发的值类型与引用类型思考

    用都知道的一句话概括:“引用类型在堆上,栈上只保存引用:值类型即可存放于栈上也可存放于堆上,值类型变量直接存储值本身”. class Program { static void Main(string ...

  9. Java中&0xFF是什么意思?计算机的原码、补码和反码

    https://blog.csdn.net/xmc281141947/article/details/74740061

  10. 【Java基础】15、负数的二进制表示方法

    在计算机中,负数以其正值的补码形式表达. 什么叫补码呢?这得从原码,反码说起. 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码. 比如 00000000 00000000 00000000 ...