一、函数的介绍

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数

函数的语法格式:

def 函数名():
函数的功能代码

注意:python不像其他编程语言使用{}控制作用域,python严格使用缩进控制作用域,所以在python中使用,函数要严格的控制缩进。

二、函数的调用

定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它,调用函数很简单的,

通过  函数名()  即可完成调用

def printMenu():
print("-----------------------------------")
print(" 1、查询 ")
print(" 2、修改 ")
print(" 3、增加 ")
print("-----------------------------------") #函数的调用
printMenu()
#函数可以重复调用
printMenu()

运行结果为:

-----------------------------------
1、查询
2、修改
3、增加
-----------------------------------
-----------------------------------
1、查询
2、修改
3、增加
-----------------------------------

说明:

  1. 函数在调用前,一定要先声明定义,才能使用函数
  2. 在声明定义好之后,可以在需要的地方多次调用。
  3. 函数的调用就是函数名(),例如代码汇总的printMenu()

三、带有参数的函数

参数分为实参和形参两种形式

  • 实参 – 在调用函数的时候给函数参与运算的真实数据
  • 形参 – 在函数声明的时候用来给真实数据做占位使用的虚拟数据

带参数函数的定义格式:

def 函数名(形参1,形参2,形参3....):
要执行的代码

举个例子:

#定义一个具有两个形式参数的函数
def sum(a,b):#a,b就是形参
result = a+b
print(result) #sum()函数的调用
sum(4,5)#4,5就是真实参数

运行结果为:9

带参数函数的精髓就是,可以灵活的处理数据的运算。

四、函数的返回值

所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果,就像一个例子中,计算a+b的值是直接打印出来了,但是现在我不想在函数里面打印出来了,我需要在函数外面使用这个结果继续参与其他运算该怎么办呢?这就需要定义带返回值的函数了。

带返回值的函数声明定义格式:

def function(形参...):
函数执行的代码
return 返回值

举个例子:

def sum(a,b):
result = a+b
return result#result就是程序要返回出去的值 res = sum(4,5)
print(res)

运行结果为:9

五、函数的类型

按照格式来划分有四种类型,具体可以根据使用场景合理的设计函数的类型。

  1. 无参无返回值函数
  2. 有参无返回值函数
  3. 无参有返回值函数
  4. 有参有返回值函数

六、函数的嵌套调用

一个函数里面却可以使用其他函数,这叫做函数的嵌套调用。

def printMenu():
print("-----------------------------------")
print(" 1、查询 ")
print(" 2、修改 ")
print(" 3、增加 ")
print("-----------------------------------") def main():
#在main()中调用printMenu()函数
printMenu()
print("请输入你的选择:") main()

运行结果为:

-----------------------------------
1、查询
2、修改
3、增加
-----------------------------------
请输入你的选择:

七、局部变量和全局变量

说明:上面程序中a是全局变量,b是局部变量,所以代码在第8行出错,错误提示 NameError: name ‘b’ is not defined b变量没有定义

  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用
  • 全局变量既能在一个函数中使用,也能在其他的函数中使用,

局部变量和全局变量重名,函数内使用的是局部变量的值,不影响外面的全局变量的值。

a = 1#全局变量
print("---1---: %d"%(a))
def test1():
b = 2#局部变量,只能在test1中使用
print("---2---: %d"%(b)) def test2():
a = 3#局部变量,只能在test2中使用
b = 4#局部变量,只能在test2中使用
print("---3---: %d"%(a))
print("---4---: %d"%(b)) test1()
test2()
print("---5---: %d"%(a))

运行结果为:

---1---: 1
---2---: 2
---3---: 3
---4---: 4
---5---: 1

上面的例子可以看出,局部变量和全局变量重名,并不会修改全局变量的值,但是当我们在一个函数中,就需要修改全局变量的值怎么办呢?只需要在函数内使用global修饰全局变量即可。

a = 1#全局变量
print("---1---: %d"%(a))
def test1():
b = 2
print("---2---: %d"%(b)) def test2():
global a #在函数内部直接使用全局变量
a = 3 #修改全局变量的值
b = 4
print("---3---: %d"%(a))
print("---4---: %d"%(b)) test1()
test2()
print("---5---: %d"%(a))

运行结果为:

---1---: 1
---2---: 2
---3---: 3
---4---: 4
---5---: 3

第3次和第5次一样说明全局变量在函数内部修改成功。

八、缺省参数

  • 定义函数的时候可以某个参数指定默认值,具有默认值的参数,就叫做缺省参数
  • 带有默认值的参数一定要位于参数列表的最后面
def printInfo(name,age = 18):
print("name = %s,age = %d"%(name,age)) printInfo("Se7eN_HOU")
printInfo("Se7eN_HOU",28)

运行结果为:

name = Se7eN_HOU,age = 18
name = Se7eN_HOU,age = 28

第一次age未传值的时候,打印出来的是默认值18,第二次打印的是传进来的值28.

九、不定长参数

使用场景:例如定义一个求两个数之和的函数,然后在编写一个求三个数之和的函数,也就是说,这样的话每多一个数就要编写一个函数,很麻烦,这里就需要设计成为一个具有不定长参数的函数。

1、带一个 “*” 的参数

用一个星号 “ * ”修饰的参数是元组类型,在使用的时候可以将传递多来的实际有多少个参数都放在元组里面

def sum(*agrs):
result = 0
for x in agrs:
result += x
print(result) sum(1)
sum(1,2)
sum(1,2,3)

运行结果为:1、3、6

2、带两个“**”的不定长参数

用两个星号“**”修饰的参数是字典类型,在使用的时候可以以字典的形式传递多个值给到函数参与运算

运行结果为:

十、匿名函数

lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,...,agrn]]:expression

实例如下:

sum = lambda arg1,agr2:arg1+agr2

#调用sum函数
print("sum :%d"%sum(10,20))

运行结果为:30

  • Lambda函数能接收任何数量的参数但只能返回一个表达式的值
  • 匿名函数不能直接调用print,因为lambda需要一个表达式

使用场景

1、函数作为参数传递

def fun(a,b,opt):
print("a=%s"%(a))
print("b=%s"%(b))
print("result = %s"%opt(a,b)) fun(1,2,lambda x,y:x+y)

运行结果为:

a=1
b=2
result = 3

2、作为内置函数的参数

stus = [{"name":"zhangsan","age":18},{"name":"lis","age":19},{"name":"wangwu","age":17}]

按name排序

stus.sort(key = lambda x:x["name"])
print(stus)

运行结果为:[{'name': 'lis', 'age': 19}, {'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}]

按age排序

stus.sort(key =lambda x:x["age"])
print(stus)

运行结果为:[{'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}, {'name': 'lis', 'age': 19}]

python基础-函数(9)的更多相关文章

  1. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  2. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  3. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  4. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  5. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  6. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  7. Python基础-函数篇

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数  函数与函数式编程 1.面向对象: 华山派-- ...

  8. python基础——函数

    1.内置函数的调用: 可以在官方网站查找内置函数及说明,也可以通过help(abs)函数查看相应的信息. https://docs.python.org/3/library/functions.htm ...

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

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

  10. Python 全栈开发四 python基础 函数

    一.函数的基本语法和特性 函数的定义 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的.函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数 ...

随机推荐

  1. 你不知道的JavaScript--Item24 ES6新特性概览

    ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...

  2. 跟我学ASP.NET MVC之六:SportsStrore添加产品目录导航

    摘要: 上一篇文章,我建立了SportsStore应用程序的核心架构.现在我将使用这个架构向这个应用程序添加功能,你将开始看到这个基础架构的作用.我将添加重要的面向客户的简单功能,在这个过程中,你将看 ...

  3. 关于Kafka配额的讨论(2)

    继续前一篇的讨论.前文中提到了两大类配额管理:基于带宽的以及基于CPU线程使用时间的.本文着重探讨基于CPU线程时间的配额管理. 定义 这类配额管理被称为请求配额(request quota),管理起 ...

  4. JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)

    [我是一个初学者,自己总结和网上搜索资料,代码是自己敲了一遍,亲测有效,现将所有的目录结构和代码贴出来分享给像我一样的初学者] 作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计 ...

  5. java基础学习周计划之3--每周一练

    每周一练第一周 一. 关键代码:1.斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...数列第一项和第二项是1, 从第三项开始, ...

  6. https://blog.csdn.net/u011489043/article/details/68488459

    转自https://blog.csdn.net/u011489043/article/details/68488459 String 字符串常量   StringBuffer 字符串变量(线程安全) ...

  7. 不吹不擂,你想要的Python面试都在这里了【315+道题】

    写在前面 近日恰逢老男孩全栈8期毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答 ...

  8. 数字证书中读取PublicKey

    1. 读取https签发证书中的key 1) 在下面的代码中,是实现读取证书字符串来读取key的,CERTIFICATE 就是一个证书的字符串, 而方法cf.generateCertificate() ...

  9. linux 文本编辑 软件管理

    gerp 命令 : grep是强大的文本搜索工具,它对文本文件逐行查看,如果找到匹配的模式,就会打印出包含此模式的所有行,并且grep支持正则表达式 1  grep 选项 模式 被查找文件 : gre ...

  10. 用keras实现人脸关键点检测(2)

    上一个代码只能实现小数据的读取与训练,在大数据训练的情况下.会造内存紧张,于是我根据keras的官方文档,对上一个代码进行了改进. 用keras实现人脸关键点检测 数据集:https://pan.ba ...