zoukankan      html  css  js  c++  java
  • python之函数

    一、认识函数

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

    使用函数的好处:

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

    函数的定义:

    #函数调用时才会被执行,调用时用函数名()
    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 c
    def add2(a,b):
        c=a+b
        print(c)
    
    print(add(2,3))#打印调用函数的返回值,add中有返回值
    print(add2(1,2))#打印调用函数的返回值,add2中没有return时,默认返回None
    运行结果:
    5
    3
    None

    在函数中,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)#指定默认参数的值为3307
    db_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(),多个返回值放进元组里。 

    2.5 命名关键字参数(限制传入参数的类型)

       命名关键字参数需要一个特殊分隔符*,*后面的参数是命名关键字参数,即必须要传入的参数。

    三、变量作用域

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

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

    #第一种情况,函数内部有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))#注意函数作为参数时,不需要带括号
  • 相关阅读:
    大数据学习——三大组件总结
    js获取当前时间的前一天/后一天
    Windows下主机名和IP映射设置
    大数据学习——HDFS的shell
    微服务化架构特征
    Spring cloud consul 相关前提知识
    Kubeadm 安装
    remove docker ce fully on centos7
    Jquery Gritter set position
    Toggle Checkboxes on/off
  • 原文地址:https://www.cnblogs.com/balllyh/p/9624088.html
Copyright © 2011-2022 走看看