函数

什么是函数

把工具事先准备好,然后下次使用的时候,直接使用就行了。我们的函数就是工具

为何用函数

1.遇到重复的功能只能重复编写实现代码,代码冗余

2.功能需要扩展时,需要找出所有实现该功能的地方修改,扩展性差

3.代码的组织结构不清晰,可读性差

函数使用原则

先定义,再调用。即一个函数分成两个阶段:定义阶段和调用阶段

  • 定义阶段:定义函数阶段只识别语法,不运行代码
  • 调用阶段:执行函数体代码

定义函数

# 语法
def 函数名(参数1,参数2,参数3,...):
"""注释:用来解释声明函数功能"""
函数体·
return 返回的值 # 可以用“函数名.__doc__()”来查看定义函数中的"""..."""

函数名

函数名类似于变量名,用来接收变量值;要具有某种意义;用字母、数字、下划线组成,不能以数字开头;且不能是关键字

定义函数的三种方式

拿比较两个数大小举例

# 第一种定义方式:无参函数.在定义函数参数时不给定参数
def sel_max():
'''定义函数'''
x, y = 10, 20
if x > y:
print(x)
else:
print(y) sel_max() # 调用函数 # 第二种方式:有参函数,需要根据外部传进来的参数,才能执行相应的逻辑,有几个参数,就必须传入几个参数
def sel_max(x, y):
if x > y:
print(x)
else:
print(y) sel_max(100,299) # 第三种方式:空函数,设计代码结构。
def sel_max():
pass sel_max()
20

调用函数

语法:函数名加括号,如 self_max()

函数返回值

def sel_max():
pass
result = sel_max()
print(result) # 无返回值
None
def sel_max():
return 'nick' # 返回一个值
result = sel_max()
print(result)
nick
def sel_max():
return 'nick',[1,2,3],20 # 返回多个值 result = sel_max()
print(result)
('nick', [1, 2, 3], 20)

1. 无返回值时,默认返回 None

2. return 1个值时,返回1个值,可以返回任意数据类型的数据

3. return 多个值时,会以元组的形式把多个值包在一起,返回一个元组

4. 函数体遇到return会终止函数,类似于while循环中的break语句

函数的参数

形参与实参

定义函数中的参数称为形参,形参具有描述意义,类似于变量名,不为具体的数据类型

调用函数中的参数称为实参,实参必须是具体分数据类型

位置参数:按从左到右的顺序定义的参数

  • 位置形参:必选参数
  • 位置实参:按照位置给形参传值
def compare(x,y):
if x > y:
return x
return y
print(compare(10,20))
20

关键字参数:按照key = value的形式定义的实参

  • 关键字参数必须在位置实参右面
  • 对同一个形参不能重复传值
  • 不需要按照位置为形参传值
def compare(x=10,y=8):
if x > y:
return x
return y
print(compare()) # 在定义时给定了关键字参数,不需要再调用时赋值
print(compare(y=20)) # 实参传值时,实参传的值会覆盖形参的值
10
20

默认参数:在定义形参时为其赋值

可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)

def compare(x,y=8):
if x > y:
return x
return y
print(compare(10,y=20)) # 默认形参必须在位置形参后面
20

可变长参数:指的是实参值的个数不固定

而实参有按位置和关键字两种形式定义,针对这两种形式的可变长,形参约定俗成用*args存放位置参数、用**kwargs来存放关键字参数

def self_max(*args,**kwargs):
print(args)
print(kwargs)
self_max(1,2,3,4,5,6,7,x=6,y=8,z=20,a=10,c=1000)
(1, 2, 3, 4, 5, 6, 7)
{'x': 6, 'y': 8, 'z': 20, 'a': 10, 'c': 1000}
  • args接受了所有位置实参,然后以元祖的形式保存下来,只接受位置参数,不接受关键字实参
  • kwarg接收所有的关键字实参,然后以字典的形式保存下来

函数对象

在python中,一切皆对象,函数也是一类对象,即函数可以当做数据传递,从而可实现函数的嵌套

def self_max(x, y):  # x=1000,y=100
if x > y:
return x # 100 # 返回一个值,给函数名 # return 任意数据类型的数据
else:
return y def max_4num(x, y, a, b):
res1 = self_max(x, y)
res2 = self_max(res1, a)
return self_max(res2, b)
res = max_4num(100,2000,2000,40000)
print(res)
40000

最新文章

  1. java反射案例
  2. JMS学习(四) Selector详解
  3. LeetCode Median of Two Sorted Arrays 找中位数(技巧)
  4. ubuntu 安装qq
  5. 「Poetize5」Vani和Cl2捉迷藏
  6. JS高级——闭包
  7. 通过代码...CGRectmake 创建的控件如何自适应屏幕。
  8. SQL语言类
  9. 理解Twisted与非阻塞编程
  10. 检查服务器是否开启GD库
  11. VSCode 同步设置及扩展插件 实现设备上设置统一
  12. Uva 10550 Combination Lock
  13. ASP.NET Core 2.0 : 八.图说管道
  14. python3之redis
  15. 不消失的 taskeng 黑窗口?
  16. C语言中的__LINE__宏
  17. Codeforces445B(SummerTrainingDay06-N 并查集)
  18. ABAP术语-Update Module
  19. css常用左右布局方案整理
  20. 设计模式入门,工厂模式,c++代码实现

热门文章

  1. NetCore +EFCore+SqlServer根据数据库生成实体类到项目中
  2. windows 2008 64位在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  3. Java---15---单例设计模式:---饿汉式和懒汉式
  4. LeetCode 788. Rotated Digits (旋转数字)
  5. 第一章 Java Collections Framework总览
  6. idea2016的使用心得 --- 太棒了
  7. AngularJS2.0 一个表单例子——总体说来还是简化了1.x 使用起来比较自然
  8. Codeforces--14D--Two Paths(树的直径)
  9. bzoj 5090 组题
  10. JSP-Runoob:JSP 隐式对象