博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之函数
阅读量:4701 次
发布时间:2019-06-09

本文共 3013 字,大约阅读时间需要 10 分钟。

一、认识函数

概念:函数也叫方法,实现特定功能的代码段。要用的时候,只需要调用下函数名即可。

使用函数的好处:

  • 简化代码,减少重复性代码的编写,提高代码的复用性
  • 提高代码可维护性,函数功能需要修改时,只需要修改函数内部的代码,所有用到函数的地方也能及时更新

函数的定义:

#函数调用时才会被执行,调用时用函数名()def 函数名(参数列表):    函数体
def my(name,sex):#my是函数名,name和sex是位置参数,也叫形参    #位置参数,必填    print("姓名:%s"%name)    print("性别:%s"%sex)    #默认值参数     #函数体my("liuyihan","女")#liiyihan,女这是调用时实际传入的参数,即实参

 1.1 return的作用

def add(a,b):    c=a+b    return cdef add2(a,b):    c=a+b    print(c)print(add(2,3))#打印调用函数的返回值,add中有返回值print(add2(1,2))#打印调用函数的返回值,add2中没有return时,默认返回None运行结果:53None

在函数中,return中两个作用:

  • 结束函数,只要在函数里遇到return,函数立即结束运行
  • 返回函数处理的结果

注意:无return时,默认返回值为None

二、函数的参数类型

定义函数时的参数为形参,调用函数时实际传入的值为实参。

形参只有在函数调用时才分配内存空间,调用结束后,立即释放内存空间,所以形参只在函数体内存在。

实参可以是常量,变量,表达式,函数,函数调用时,必须传入的是具体值,把具体的数值传给形参。

2.1 位置参数(必填参数)

ef my(name,sex):#my是函数名,name和sex是位置参数,也叫形参    print("姓名:%s"%name)    print("性别:%s"%sex)my("liuyihan","女")#liiyihan,女这是调用时实际传入的参数,即实参运行结果:姓名:liuyihan性别:女

顾名思义,根据位置来传参,有几个参数,调用时相应地传几个参数,多或少了都会报错。上述程序中,name和sex是位置参数,调用时必填。

2.2 默认参数(非必填)

def db_connect(ip,port=3306):#port=3306就是kebian默认参数    print(ip,port)db_connect('118.24.3.40',3307)#指定默认参数的值为3307db_connect('118.24.3.40')#没有指定默认参数的值

就是定义函数时给某个参数给个默认值,调用时,若给默认参数传了值,就用你传入的值;不传就用默认值,不会报错。

2.3 可变参数(非必填)

 可变参数用于参数比较多且不确定的情况下,定义函数时,直接写参数组*args,可以不填。

def users(name,userid,*args):        print("姓名:%s,学号:%s"%(name,userid))        print("其他个人信息:%s",args)users("liuyihan",'2011212968','深圳','18','160')#args是参数组#可变参数都是放在一个元组里的#不限制参数的个数
上述代码,运行结果:姓名:liuyihan,学号:2011212968其他个人信息:%s ('深圳', '18', '160')

2.4 关键字参数(非必填)

不限制参数的个数,通常用**args表示

def users(**kwargs):    #1、不是必传的    #2、不限制参数个数    #3、传入的参数放到key-value字典里    print(kwargs)users()users(name='liuyihan',sex='nv')users(addr='北京',country='中国',c='abc',f='kkk')运行结果:{}{
'sex': 'nv', 'name': 'liuyihan'}{
'addr': '北京', 'c': 'abc', 'country': '中国', 'f': 'kkk'}

注意:如果四种参数一起使用,顺序是位置参数>默认参数>可变参数>关键字参数

   函数有多个返回值时,定义多个变量a,b,c=my()或者定义一个变量a=my(),多个返回值放进元组里。 

三、变量作用域

全局变量:在变量所有范围都能使用;局部变量:在一定区域内才能使用。

所有函数都能使用全局变量,只能在函数内部使用局部变量

#第一种情况,函数内部有name变量,取值时取函数内部name值name = 'wangcan'#全局变量def get_name():    name='hailong'    print(name)get_name()运行结果:hailong#第二种情况,函数内部无name变量,取值时先在函数内部找,找不到,在函数外部找,找到打印出来name = 'wangcan'#全局变量def get_name():    print(name)get_name()运行结果:wangcan
#第一种情况name = 'wangcan'#全局变量def get_name():    name='hailong'    print("函数内部的变量:",name)get_name()print("函数外部的变量:",name)运行结果:函数内部的变量: hailong函数外部的变量: wangcan#第二种情况,函数内部的值可见于函数外name = 'wangcan'#全局变量def get_name():    global name#声明全局变量,在函数内部的变量值可用于全局变量    name='hailong'    print("函数内部的变量:",name)get_name()print("函数外部的变量:",name)运行结果:函数内部的变量: hailong函数外部的变量: hailong

 四、递归函数

函数内部可调用函数,如果一个函数在内部调用自己,那就是递归函数。递归函数可起到循环的作用  

def test():    num=int(input("请输入一个数字"))    if num%2==0:        return True#如果是偶数,就返回True,结束函数,遇到return就立即结束函数    print("如果不是偶数,请重新输入!:")    return test()print(test())

五、高阶函数

一个参数是函数的函数称为:高阶函数

def srint(n):#将n转换成int类型    return int(n)def add(x,y,z):#三个参数,z是函数    return(z(x)+z(y))#z函数的返回值相加print(add(9.2,4.5,srint))#注意函数作为参数时,不需要带括号

 

转载于:https://www.cnblogs.com/balllyh/p/9624088.html

你可能感兴趣的文章
简易版cnlog
查看>>
erlang程序运行的几种方式
查看>>
堆heap和栈Stack(百科)
查看>>
html5页面实现点击复制功能
查看>>
mac os设置root密码
查看>>
MSSQL—行转列
查看>>
Int类型空判断
查看>>
关于闭包的作用,以及优缺点
查看>>
【CF809E】Surprise me! 树形DP 虚树 数学
查看>>
FFT什么的
查看>>
nodejs版本管理
查看>>
poj 3347
查看>>
回车与换行的区别
查看>>
ztree使用
查看>>
JavaScript中数组Array方法详解
查看>>
有些人,爱不到,忘不了
查看>>
站立会议10
查看>>
7-24 树种统计
查看>>
HTTP协议
查看>>
Java的IO流
查看>>