前面我们写过九九乘法表,但如果我要七七乘法表或五五乘法表的话,你会看到三者代码极其类似,只是循环变量不同,那么如何做到代码重用,而不是简单拷贝黏贴修改呢,其实可是使用函数完成这一功能!

先来试着看一看这个函数:

def table(row,col,sep=3):for i in range(1, row + 1):for j in range(1, col + 1):if j <= i:print("%d*%d = %2d" % (i, j, i * j), end='%*s'%(sep,' '))print('')
#一次编码,到处运行
table(8,8)
table(5,5,8)

下面就来介绍一下今天的内容--》python函数

1.函数定义

函数就是完成特定功能的代码块,本质上是对代码的封装

语法格式:

def 函数名([参数1],[参数2]....[参数n]):
函数体
  • 函数名命名规则同变量名,要满足标识符命名规则

  • 不能和系统函数重名,否则系统函数无法使用

  • 函数定义分两部分函数头和函数体

  • 函数体,就是实现功能的代码段,以:开头,必须缩进

  • 函数名的命名风格:一般建议用下划线分隔的小写单词组成:say_hello

函数的优点:

  • 代码可复用

  • 代码可维护性高

  • 容易排错

  • 可读性好

  • 利于团队开发

2 函数参数

2.1 实参和形参

  • 形参:就是函数定义时小括号里的变量

  • 实参:函数调用的时候,小括号里的表达式

  • 函数可以没有形参和实参

2.2 参数分类

  • 位置参数,要求实参顺序必须和形参顺序完全一致,由形参顺序决定实参顺序

    def say_hello(name,age,home):print('大家好,我是{},我今年{}岁了,我来自{}'.format(name,age,home))say_hello('王二妮',18,'湖北武汉') #实参个数、顺序必须和形参一致
  • 关键字参数,函数调用时,实参可以是键值对,键就是形参名字,这样的调用,实参不必关心形参的顺序。

    def say_hello(name,age,home):print('大家好,我是{},我今年{}岁了,我来自{}'.format(name,age,home))say_hello(name='王二傻',home='大连',age=20) #三个关键字参数
    say_hello('大傻',home='美国',age=30) #两个关键字参数
    sya_hello('二傻',24,home='何方')   #一个关键字参数
  • 默认值,如果形参在定义的时候给定一个值,那么函数在调用时就可以不传实参,可以简化调用

    def my_power(x,n=2):return (x) ** n
    my_power(3)
    my_power(4,0.5)def test(a=[]):a.append('end')print(a)
    test([1,2,3])
    test()   #['end']
    test()   #['end','end']
    • 默认值参数必须放到最右边

    • 如果传了实参,那么实参优先,不会使用默认值

    • 默认值只计算一次

    • 默认值必须是不可变对象

  • 可变参数,传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

    #使用*接收任意数量的位置参数
    #注意:*的不定长参数被当做元组处理
    
    def demo(a,b,*args):print(a,b,args)demo(12,33,90)
    demo(1,2,3,4,5)
    a=(1,2,3)
    demo(*a)#使用**接收任意数量的关键字参数
    #注意:**的不定长参数被当做字典处理
    def demo1(a,**args):print(a,args)
    demo1(1,name='kk',age=3)
    b = {'a':20,'b':12,'c':32}
    demo(**b)

2.3 参数组合

  • 形参顺序须按照以下顺序:位置参数、默认值参数、*args,**kwargs

3 函数调用

  • 函数调用必须在函数定义之后

  • 函数调用必须能够正确传递实参

    
    def demo(a,b,c=0,*arg1,**arg2):print(a,b,c,arg1,arg2)
    demo(1,3,k=4)
    demo(1,2,3,4,5)
    demo(1,b=3,c=3,d=5)
    demo(*(1,2,3),**{'name':12}) #任何函数都可通过这种形式传递参数

4 返回值

可以通过return语句返回计算结果。

  • return的作用一个是终止函数的执行,所有执行了return后,其后的语句不会被执行

  • 如果没有return语句,则默认返回的是None

  • return还可以返回给调用者数值

  • return可以返回一个值,如果要返回多个值,那么返回的是一个元组

    语法:

    def demo2():return 1
    def demo3():return 1,2,3
    print(demo2())
    print(demo3()) #(1,2,3)

5 文档字符串

函数文档字符串documentation string (docstring)是在函数开头,用来解释其接口的字符串。简而言之:帮助文档

  • 包含函数的基础信息

  • 包含函数的功能简介

  • 包含每个形参的类型,使用等信息

文档字符串书写规则:

  • 必须在函数的首行

  • 使用三引号注解的多行字符串(''' ''') 或(""" """)

  • 函数文档的第一行一般概述函数的主要功能,第二行空,第三行详细描述。

    def test():"""函数名:test功能:测试参数:无返回值:无"""print("函数输出成功")#使用__doc__属性查看文档字符串
    print(test.__doc__)

6.参数传递

python的参数传递是简单的值传递,当然这里的值是指变量的引用(地址),不是变量的值。不存在值传递和引用传递的区分。简而言之,python的参数传递可以称之为对象引用传递,对象可以分为:

  • 不可变对象:int、float、None、complex、bool、tuple、str,range

    • 在函数内部不可能修改函数外部的变量

  • 可变对象: dict、list

    • 可以在函数内部修改

7 空函数

借助于pass语句实现,函数体不完成任何功能,只有一个pass语句

def test():pass

8 匿名函数

不再使用def 函数名()这种形式定义函数,而是使用lambda来创建匿名函数

特点:

  • lambda只是一个表达式,函数体比def简单的多

  • lambda的函数体不再是代码块

  • lambda只有一行,增加运行效率

语法:lambda [arg1,arg2....argn]:函数体
add = lambda a,b:a + b
print(add(3,5))

9.函数类型

函数也是一种类型,我们自定义的函数就是函数对象,函数名保存了函数对象的引用(地址)

def test():print('我是测试函数')print(test) #函数名是变量,指向了函数对象
pf = test   #pf变量也指向了函数对象,所以也可以通过pf调用test函数
pf()

10.传入函数

一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数,也可以称之为传入函数。可以实现通用编程,排序等复杂功能

总结

本节给大家介绍了 Python  函数的使用,对于初步了解的同学可能不大友好,还需要自己把不明白的地方多看多查资料深入了解。

参考:

https://www.runoob.com/python/python-functions.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017105145133280

【Python基础入门系列】第05天:Python函数相关推荐

  1. 【Python基础入门系列】第01天:环境搭建

    其实 Python 已经是一个很老的编程语言了,到现在(2019年) Python 已经高龄 28 岁,比很多程序员的年龄都大.现在之所以这么流行和社区.人工智能的发展,有很大的关系. 千里之行始于足 ...

  2. 【Python基础入门系列】第03天:Python 变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可 ...

  3. Python基础入门篇【2】--python脚本结构

    目录 文章目录 python脚本简单介绍 编写一个简单的python脚本 新建一个python脚本 python脚本的结构 python脚本的执行 python脚本的头部注释 什么是头注释? 头注释的 ...

  4. 【Python基础入门系列】第10天:Python 类与对象

    首先,我已经假定你是个萌新或已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿,我觉得有必要找一篇生动形象的示例来讲解. 由于你可能没有编程经验, 所以无法从学过 ...

  5. 【Python基础入门系列】第07天:Python 数据结构--序列

    python内置序列类型最常见的是列表,元组和字符串.(序列是python中最基础的数据结构,而数据结构是计算机存储,组织数据的方式.) 另外还提供了字典和集合的数据结构,但他们属于无顺序的数据集合体 ...

  6. 【Python基础入门系列】第04天:Python 流程控制

    在编程的世界中,流程控制是程序员运行的基础,流程控制决定了程序按照什么样的方式去执行,本节给大家介绍 Python 流程控制相关语法. if 语句 if 语句表示如何发生什么样的条件,执行什么样的逻辑 ...

  7. 【Python基础入门系列】第02天:Python 基础语法

    Python 语言与 Perl,C 和 Java 等语言有许多相似之处.但是,也存在一些差异.在本章中我们将来学习 Python 的基础语法,让你快速学会Python 编程. 开始你的第一个 Pyth ...

  8. 【Python基础入门系列】第09天:Python tuple

    Python 中的数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字.字符.甚至可以是其他数据结构 在 Python 中,最基本的数据结构是序列(在前面文章我们也说过序列),序列 ...

  9. 【Python基础入门系列】第08天:Python List

    Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. LIST   列表 比如,列出班里所有同学的名字,就可以用一个list表示: >> ...

最新文章

  1. mysql backup_MySQL备份还原——AutoMySQLBackup介绍
  2. Slack:日活跃用户50万人、6周增幅35%造就奇迹
  3. highcharts如何把图多余的空白页面_零基础如何快速学会WORD基础操作?有秘籍了.........
  4. 软件项目组织管理(四)项目集成管理
  5. 查询linux kafka安装目录,Kafka 1.0.0安装和配置--Linux篇
  6. AjaxPro新发现-错误处理
  7. java远程关机_通过jsch实现对linux服务器的shell客户端远程控制关机完整示例代码分享...
  8. overscroll-behavior称为“滚动链”
  9. Python删除文件第一行
  10. 【数字信号处理】基于matlab GUI IIR低通+FIR高通信号时域+频谱分析【含Matlab源码 1029期】
  11. 【深入理解Nginx】Nginx的配置
  12. win7从光盘进入修复计算机,win7光盘修复系统步骤
  13. adobe flash builder 4.6最新能用的序列号
  14. h264解码延迟优化_FFMPEG H264/H265 编码延迟问题
  15. 使用strace查看后台程序stdout输出
  16. 用大白话聊聊JavaSE -- 自定义注解入门
  17. 1.10 新概念 have a cold/headache
  18. 李航统计学习方法笔记——泛化误差上界
  19. Notepad++ 提示:An exception occurred due to plugin: HexEditor.dll 出错
  20. 自然语言处理-jieba

热门文章

  1. 解决:阿里云ECS服务器 远程连接不上、极慢 (主机监控的实现)
  2. TCP/IP协议族 详解(TCP/IP四层模型、OSI七层模型)
  3. Navicat工具导出mySQL数据库某个视图结构的.sql脚本
  4. 排序代码(python,c++) 及 基本算法复杂度
  5. [Educational Round 5][Codeforces 616F. Expensive Strings]
  6. Angular15 利用ng2-file-upload实现文件上传
  7. 出栈顺序 与 卡特兰数(Catalan)的关系
  8. 计算客 (人人都有极客精神)爆力
  9. 图论测试题(一)第一题:longest
  10. HDU 4279 - Number