文档章节

python基础-函数(9)

o
 osc_fmg49rzg
发布于 2019/03/19 05:02
字数 1898
阅读 0
收藏 0
def

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

一、函数的介绍

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

函数的语法格式:

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}]

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)

点击了解更多Python课程>>>   老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)大小:236G 此课程为老男孩全栈开发最新完结课程,适合零基础对python全栈开发兴趣浓厚...

osc_odfa308v
2019/08/28
17
0
Python基础

1 操作系统介绍 >> 2 python语言简介 >> 3 python 历史 >> 4 python 基础数据类型 >> 5 python 变量与常量,引用与回收 >> 6 python 运算符与表达式 >> 7 python 流程控制与条件分支 >> 8 pyt......

osc_o18rkfva
2018/02/22
1
0
小白学 Python(17):基础数据类型(函数)(下)

人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变量基础操作 小白学 Py...

osc_0i27cy0p
2019/11/08
10
0
python开发(老)

一、计算机基础: 0、计算机基础 二、Python: 基础: 1、Python基础 2、基本数据类型 3、python垃圾回收机制 4、字符编码、文件处理 5、函数基础 6、函数嵌套,名称空间,作用域,函数对象,...

osc_rxp5t2vl
2019/04/18
4
0
全网最热Python3入门+进阶 更快上手实际开发

全面系统 Python3入门+进阶课程 更快上手实际开发 无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言 ,这次课程,就将带你从基础入门Python3,掌握Python3.x 版本语法,并结...

就是中意你
2019/04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java架构师成长路线-高并发网络编程的分类

鲁班学院java架构师成长路线 随着互联网时代的到来,高并发网络编程这一新鲜名词早已跃然于纸上,为了满足大众眼光的需求,我为大家找了些关于高并发网络编程方面的资料,本文便来介绍高并发...

osc_o494ayqf
刚刚
0
0
python dict乱码如何解决

定义字典并直接输出,结果输出结果中文是乱码展示 d={'name':'lily','age':18,'sex':'女','no':1121}print d 输出结果: {'age': 18, 'no': 1121, 'name': 'lily', 'sex': '\xe5\xa5\xb3'}...

osc_9mjo6c4e
1分钟前
0
0
硬肝50天,18w字的实战编程资料《重学Java设计模式》终于 出炉了

沉淀、分享、成长,让自己和他人都能有所收获! 一、前言 作者从5月20日那天投身实战型设计模式打磨,通过模拟互联网业务开发实际需求作为学习场景,讲解设计模式。 全书共计22个真实业务场景...

osc_zls6dx9i
3分钟前
0
0
怎么才能让Spring AOP有最大的作用--乐字节java

Spring AOP 日志处理带来的问题 我们有一个Pay(接口) 然后两个实现类DollarPay和RmbPay,都需要重写pay()方法, 这时我们需要对pay方法进行性能监控,日志的添加等等怎么做? 最容易想到的方法...

osc_sb30h1xb
4分钟前
0
0
Python 实现将numpy中的nan和inf,nan替换成对应的均值

nan:not a number inf:infinity;正无穷 numpy中的nan和inf都是float类型 t!=t 返回bool类型的数组(矩阵) np.count_nonzero() 返回的是数组中的非0元素个数;true的个数。 np.isnan() 返回b...

osc_sfl7wfr9
6分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部