本文目录:

一、函数初始

二、函数的使用原则

三、函数的定义与调用形式

四、函数的返回值

五、函数参数的使用

一、函数初始

1. 什么是函数

具备某一功能的工具->函数
事先准备工具的过程--->函数的定义
遇到应用场景,拿来就用---->函数的调用

函数分类两大类:
1. 内置函数
2. 自定义函数

2. 为何要用函数

1. 代码冗余
2. 可读性差
3. 可扩展性差

3. 如何用函数

  1. 原则:必须先定义,再调用
  2. 定义函数的语法:
  3. def 函数名(参数1,参数2,...):
  4. """文档注释"""
  5. code1
  6. code2
  7. code3
  8. ....
  9. return 返回值
  10. 调用函数的语法:
  11. 函数名(值1,值2,...)

二、函数的使用原则

储备知识:

函数的使用应该分为两个明确的阶段:

# 1. 定义阶段:只检测语法,不执行函数体代码
def func():
print('from func')

# 2. 调用阶段:会触发函数体代码的执行
# func()

  1. #先定义后调用
  2. # 示范一
  3. # def foo():
  4. # print('from foo')
  5. # bar()
  6. # foo()
  7.  
  8. # # 示范二:
  9. # def bar():
  10. # print('from bar')
  11. #
  12. # def foo():
  13. # print('from foo')
  14. # bar()
  15. #
  16. # foo()
  17.  
  18. # # 示范三:
  19. # def foo():
  20. # print('from foo')
  21. # bar()
  22. #
  23. # def bar():
  24. # print('from bar')
  25. #
  26. # foo()
  27.  
  28. # 示范四:
  29. def foo():
  30. print('from foo')
  31. bar()
  32.  
  33. foo()
  34.  
  35. def bar():
  36. print('from bar')

三、函数的定义与调用形式

函数的定义三种形式

  1. '''
  2. # 有参函数
  3. def func(x):
  4. pass
  5.  
  6. func(1)
  7.  
  8. # 无参函数
  9. def bar():
  10. pass
  11.  
  12. bar()
  13. # 空函数
  14. # def func():
  15. # pass
  16.  
  17. def auth():
  18. pass
  19.  
  20. def register():
  21. pass
  22.  
  23. def shopping():
  24. pass
  25.  
  26. def transfer():
  27. pass
  28.  
  29. def pay():
  30. pass
  31. '''

函数调用的三种形式

  1. # register() # 语句形式
  2.  
  3. def max2(x,y):
  4. if x > y:
  5. return x
  6. else:
  7. return y
  8.  
  9. # res=max2(10,20)*12 # 表达式
  10.  
  11. res=max2(max2(10,20),30) # 将函数的调用当作参数传给另外一个函数
  12. print(res)

四、函数的返回值

  1. # return 值:
  2. # 注意点:
  3. # 1. 函数的返回值没有类型限制
  4.  
  5. # 2. 函数的返回值没有个数限制
  6. # 2.1 返回多个值: 多个返回值用逗号分隔开,返回的是元组形式
  7. # def func():
  8. # print('from func')
  9. # return 1,1.1,'hello',[1,2,3]
  10. #
  11. # res=func()
  12. # print(res,type(res))
  13.  
  14. # 2.2 返回1个值: 返回的就是该值本身
  15. # def func():
  16. # return 123
  17. # res=func()
  18. # print(res,type(res))
  19.  
  20. # 2.3 返回0个值或者干脆没有return: 返回None
  21. # def func():
  22. # return
  23. # pass
  24. # res=func()
  25. # print(res)
  26. # return除了有返回值的功能,还有结束函数执行的的功能
  27. # 函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值返回
  28. def func():
  29. print(1)
  30. return
  31. print(2)
  32. return
  33. print(3)
  34. func()

五、函数参数的使用

函数的参数分为两大类:

# 形式参数(形参): 在定义函数阶段,括号内定义的参数/变量名称为形参

# 实际参数(实参): 在调用函数阶段,括号内传入的值/变量值称为实参

# ps: 在调用函数阶段会将实参(值)的值绑定给形参(变量名),这种绑定关系只在调用函数时生效,在函数执行完毕后就会解除绑定

  1. def func(x,y): #x=1 y=2
  2. # x=1
  3. # y=2
  4. print(x,y)
  5.  
  6. func(2,3)

细分:

1. 位置参数:

  1. # 1.1 位置形参: 在定义阶段,按照从左到右的顺序依次定义的形参称之为位置形参
  2. # 特点: 但凡时按照位置定义的形参,必须被传值,多一个不行少一个也不行
  3. # def func(x,y,z):
  4. # print(x,y,z)
  5.  
  6. # func(1,2)
  7. # func(1,2,3)
  8. # func(1,2,3,4)
  9.  
  10. # 1.2 位置实参: 在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参
  11. # 特点:
  12. # 1. 与形参一一对应
  13. # def func(x,y,z):
  14. # print(x,y,z)
  15. #
  16. # func(2,1,3)

2. 关键字实参: 在调用阶段,按照key=value的形式定义的实参称之为关键字实参

  1. # 特点: 可以完全打乱顺序,但仍然能为指定的形参传值(总结:指名道姓地为指定的形参传值)
  1. # def func(x,y,z):
  2. # print(x,y,z)
  3.  
  4. # func(x=1,y=2,z=3)
  5. # func(1,2,3)
  6. # func(z=3,y=2,x=1)
  7. # 实参的形式可以是位置实参与关键字实参混合使用,但是必须遵循原则
  8. # 1.位置实参必须放在关键字实参的前面
  9. # 2.不能对同一个形参重复传值
  10. # func(1,z=3,y=2)
  11. # func(z=3,1,y=2) #错误
  12. # func(1,z=3,x=2,y=3) #错误

3. 默认形参:在定义阶段,就已经为形参赋值,该形参称之为默认参数

  1. 特点
  2. 1. 定义阶段就已经有值意味着调用阶段可以不用传值
  3. 2. 位置形参必须放到默认形参的前面
  4. 3. 默认形参的值在函数定义阶段就已经固定死了,定义阶段之后的改动不会影响该值
  5. 4. 默认形参的值通常应该是不可变类型
  1. # def func(x,y,z=100):
  2. # print(x,y,z)
  3.  
  4. # func(10,20)
  5. # func(10,20,200)
  6.  
  7. # def register(name,age,sex='male'):
  8. # print(name,age,sex)
  9. #
  10. # register('egon',18,)
  11. # register('lxx',38,)
  12. # register('cw',48,)
  13. # register('yyh',58,)
  14. # register('alex',73,'female')
  15.  
  16. # def func(x,z=100,y):
  17. # print(x,y,z)
  18.  
  19. # m=10
  20. # def func(x,y,z=m):
  21. # #z=10
  22. # print(x,y,z)
  23. # m=100
  24. # func(1,2)
  25.  
  26. # def add_hobby(name,x,hobbies=None):
  27. # if hobbies is None:
  28. # hobbies=[]
  29. # hobbies.append(x)
  30. # print('%s 的爱好有 %s' %(name,hobbies))
  31. #
  32. # add_hobby('egon','read',)
  33. # add_hobby('wxx','eat',)
  34. # add_hobby('alex','piao')

4. 可变长参数:

  1. 可变长实参:指的是在调用阶段,实参值个数是不固定的,
  2. 实参无非两种形式(位置,关键字实参),对应着形参也必须有两种解决方案来分别接收溢出位置实参或者关键字实参
  3. *--->溢出的位置实参
  4. **--->溢出的关键字实参
  1. # def sum2(*x): #x=(1,2,3,4,5)
  2. # res=0
  3. # for i in x:
  4. # res+=i
  5. # return res
  6. # print(sum2(1,2,3,4,5))
  1. # 4.1 *的用法
  1. # 在形参前加*:*会将溢出的位置实参存成元组的形式,然后赋值给*后的形参名
  2. # def func(x,y,*z): #z=(3,4,5)
  3. # print(x,y,z)
  4. # func(1,2,3,4,5)
  5.  
  6. # 在实参前加*:但凡碰到实参中带*的,先将实参打散成位置实参再与形参做对应
  7. # def func(x,y,z):
  8. # print(x,y,z)
  9. # func(1,2,[3,4,5])
  10. # func(*[1,2,3,4,5]) #func(1,2,3,4,5)
  11. # func(*[1,2,3]) #func(1,2,3)
  12.  
  13. # def func(x,y,*z):
  14. # print(x,y,z)
  15.  
  16. # func(1111,2222,*[1,2,3,4,5]) #func(1111,2222,1,2,3,4,5)
  1. # 4.2 **的用法
  1. # 在形参前加**:**会将溢出的关键字实参存成字典的形式,然后赋值给**后的形参名
  2. # def func(x,y,**z): #z={'c':3,'b':2,'a':1}
  3. # print(x,y,z)
  4. # func(1,y=2,a=1,b=2,c=3)
  5.  
  6. # 在实参前加**:但凡碰到实参中带**的,先将实参打散成关键字实参再与形参做对应
  7. # def func(x,y,z):
  8. # print(x,y,z)
  9.  
  10. # func(1,**{'y':2,'z':3}) #func(1,z=3,y=2)
  11. # func(1,**{'a':2,'y':333,'z':3}) #func(1,a=2,y=333,z=3) # 错误
  12.  
  13. # def func(x,y,**z):
  14. # print(x,y,z)
  15.  
  16. # func(**{'y':1,'x':2,'a':1111,'b':2222}) #func(y=1,x=2,a=1111,b=2222)
  17.  
  18. # 形参中:*args,**kwargs
  19. # def func(x,*args):
  20. # print(x)
  21. # print(args)
  22. #
  23. # def func(x,**kwargs):
  24. # print(x)
  25. # print(kwargs)
  26.  
  27. # *与**的应用:
  28. def index(name,age,sex):
  29. print('index=====>',name,age,sex)
  30.  
  31. # 会将wrapper函数接收的参数格式原封不动地转嫁给其内部的index函数,必须要遵循的是index的参数规则
  32. def wrapper(*args,**kwargs): #args=('egon',) kwargs={'sex':'male','age':18}
  33. # print(args)
  34. # print(kwargs)
  35. index(*args,**kwargs) #index(*('egon',),**{'sex':'male','age':18}) #index('egon',sex='male',age=18)
  36.  
  37. # wrapper(1,2,3,4,5,a=1,b=2,c=3)
  38. wrapper('egon',sex='male',age=18)

                                    

                                 

python函数:函数使用原则、定义与调用形式的更多相关文章

  1. JS中函数的本质,定义、调用,以及函数的参数和返回值

    要用面向对象的方式去编程,而不要用面向过程的方式去编程 对象是各种类型的数据的集合,可以是数字.字符串.数组.函数.对象…… 对象中的内容以键值对方式进行存储 对象要赋值给一个变量 var cat={ ...

  2. python 函数定义及调用

    1.什么是函数? 在程序中,函数就是具备某一功能的工具,事先将工具准备好即函数的定义:遇到应用场景拿来就用即函数的调用:函数必须遵循先定义后调用的原则 2.为什么要用函数 不用函数的问题是: 程序冗长 ...

  3. PYTHON-函数的定义与调用,返回值,和参数

    函数基础'''1. 什么是函数 具备某一功能的工具->函数 事先准备工具的过程--->函数的定义 遇到应用场景,拿来就用---->函数的调用 函数分类两大类: 1. 内置函数 2. ...

  4. Python 学习 第七篇:函数1(定义、调用和变量的作用域)

    函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...

  5. Python快速入门学习笔记(三)——函数的定义与调用

    定义函数 Python中定义函数的格式为: def fun([参数列表]): ... 函数在执行到return语句时结束,并将结果返回.如果没有return语句,函数执行完毕后返回None. 例: d ...

  6. python中函数的定义,调用,全局变量,局部变量,函数的嵌套使用-初级篇

    函数的基本概述 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,可以思考一下如果有某个功能的代码是在多个地方使用的是否可以只写一次?此时的代码该如何定义.先观察以下的案例: ...

  7. Python基础--函数的定义和调用

    一.函数的作用: 提高代码的可读性,减少代码的冗余,方便调用和修改,组织结构清晰 二.函数的定义:函数遵循先定义后调用的原则 1.无参函数 def funcname(): #def 是关键字,后跟函数 ...

  8. Python基础(函数,函数的定义,函数的调用,函数的参数,递归函数)

    1.函数 我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...

  9. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

随机推荐

  1. FlexBox布局的重要属性

    /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, { ...

  2. Validform表单验证时的 【坑】

    代码如下 <input style="width: 360px" name="ll_wb_job.qcwyJobUrl" value="&quo ...

  3. Python C/S架构,网络通信相关名词,socket编程

    主要内容: 一.  C/S架构 二. 网络通信的相关名词 三. socket编程 一. C/S架构和B\S架构概述 1. C/S架构: Client/Server(客户端/服务端)架构 描述: C/S ...

  4. 【科普杂谈】IP地址子网划分

    1.学习子网前的准备知识-什么是数制 现场讲解版 二进制和十进制的关系   二进制和十六进制的关系  16进制的每个位是2进制的4位 F=1111  二进制转16进制,按上面4位一组分开转 2.IP地 ...

  5. PHP学习(6)——代码重用与函数编写的一些注意事项

    一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小. 代码重用的好处:降低成本.提升可靠性和一致性. 1.使用require()和include()函数 使用一条 ...

  6. 【ActiveReports 大数据分析报告】2019国庆旅游出行趋势预测

    今年国庆假期全国接待国内游客人数有望达到8亿人次! 随着2019国庆小长假的临近,不少游客已经开始着手规划假期出游路线.据权威机构发布的<2019国庆旅游趋势预测报告>显示,今年“十一黄金 ...

  7. WijmoJS V2019.0 Update2发布:再度增强 React 和 Vue 框架的组件功能

    前端开发工具包 WijmoJS 在2019年的第二个主要版本 V2019.0 Update2 已经发布,本次发布涵盖了React 和 Vue 框架下 WijmoJS 前端组件的功能增强,并加入更为易用 ...

  8. 处理idea加载不到Spring的xml或者properties配置文件

    在pom文件的 标签钱添加以下代码 <!--防止ieda加载不到xml或者properties文件开始--> <resources> <resource> < ...

  9. C#面向对象10 继承

    1.继承: **** 我们可能会在一些类中,写一些重复的成员.我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类. Student,Teacher,Driver ----子类  派生类 ...

  10. 基于C#实现与JY61姿态角度传感器通信

    产品介绍:  此六轴模块采用高精度的陀螺加速度计 MPU6050,通过处理器读取 MPU6050 的测量数据 然后通过串口输出,免去了用户自己去开发 MPU6050 复杂的 IIC 协议,同时精心的 ...