• 001---函数基础


    函数

    函数基本定义

    • 函数是什么:函数就是功能的封装,将一组语句通过一个函数名封装起来。要学执行这个函数,调用其函数名即可。
    • 特性:
      • 减少重复代码
      • 可扩展性强
      • 代码易维护
    • 语法定义:
    
    def func():
        print('函数的定义')
        
    func()  # 调用函数
    
    

    函数的参数

    • 形参:形式定义的参数,只有在函数调用的时候才分配内存单元,只在函数内部有效。函数调用结束则形参失效。
    • 实参:实际传入的参数,可以是常量、变量、表达式、函数等、无论是何种类型的值,在进行函数调用的时候必须要有确定的值,实参是要传给形参。
    def calc(x,y):
        """
        计算两个数的和的函数
        :param x:形参 x
        :param y:形参 y
        """
        res = x + y
        return res
    
    print(calc(10, 10))  # 调用函数获取计算结果 
    
    • 位置参数:根据形参,传入的参数一一对应,按照顺序传入,叫做位置参数。

    • 默认参数
      看以下代码

    def students(name, age, sex, classes='Python1期'):
        print('学生姓名:{0};年龄:{1};性别:{2};班级:{3}'.format(name, age, sex, classes))
    
    
    students('江子牙', 21, '男', )
    students('江xx', 19, '女', )
    students('江yy', 15, '不男不女', )
    students('子 牙', 25, '男', )
    

    我们写了重复代码(参数)。有个默认参数可以解决此问题。

    def students(name, age, sex, classes='Python1期'):
        print('学生姓名:{0};年龄:{1};性别:{2};班级:{3}'.format(name, age, sex, classes))
    
    
    students('江子牙', 21, '男', )
    students('江xx', 19, '女', )
    students('江yy', 15, '不男不女', )
    students('子 牙', 25, '男', 'Python2期')
    
    

    没有传值则是默认的值,传入的就会是自己传入的

    • 关键字参数
      正常情况下,传参数要一一对应,形参也一一对应值。但是如果不想按顺序,就可以是关键字参数。但是,关键字必须放在位置参数后面。
    '''
    本来传参数要一一对应,按照顺序。如果不想按顺序,就可以指定参数名的参数名
    关键字参数必须放在位置参数后面
    '''
    def stu_info(name,age,course='高三一班'):
        print('-----学生信息-----')
        print('姓名:',name)
        print('年龄:',age)
        print('课程:',course)
    
    
    stu_info(age=199,course='大学啦',name='小天文')
    stu_info(age=20,name='文帅')
    
    
    • 非固定参数:当传入的参数个数不确定的情况下,就可以使用非固定参数,也叫做不定长参数,
    # *args 实际上是传一个元祖,打包所有不固定参数.
    def send(msg, *args):
        print('所有非固定参数', args)
        for i in args:
            print('我是非固定参数', i)
    
    
    send('别浪了……', 'a')
    send('别浪了……', 'a', 'b')
    send('别浪了……', 'a', 'b', 'c')
    send('别浪了……', ['a', 'b', 'c'])
    # 当你想以列表形式,元素作为一个个参数传入时,应该加*
    send('别浪了……', *['a', 'b', 'c'])
    
    
    # 接收的参数是关键字参数,实际上是传一个字典。
    def info(name, age, **kwargs):
        print(kwargs)
    
    
    info('111', 222, sex='男', money=9.9)
    info('111', 222, **{'sex': '变态', 'money': 100})
    

    返回值

    • return:函数外部的代码想要获取函数内部执行的结果,就用return把结果返回。
    • return:代表函数的执行结束,并返回结果,如果函数没有指定return。返回值默认为None
    def calc(x, y):
        """
        计算两个数的和的函数
        :param x:形参 x
        :param y:形参 y
        """
        res = x + y
        return res
    
    
    print('函数执行的结果:',calc(10, 10))
    

    全局和局部变量

    • 在函数内部定义的变量成为局部变量,在程序一开始定义的变量称为全局变量。
    • 全局变量的作用域是整个程序,局部变量的作用域是定义该变量的函数。
    • 当全局变量和局部变量重名时,在函数内,局部变量优先,在其余地方,全局变量优先。
    name = 'Black girl'     # 全局变量
    
    def change_name():
        name = '黑色姑娘'    # 局部变量,定义在函数里面的变量,函数一旦执行完毕,则释放局部变量,如果里面没有定义,则使用外面的,
        print(name)         # 黑色姑娘--->如果加global,就可以使用全局变量
    
    change_name()
    print(name)             # Black girl 修改局部变量并不影响全局变量的值,作用域不一样。
    
    age = 18
    
    
    def func1():
        age = 73
        print('alex')
    
        def func2():
            print('egon')
            print(age)
    
        return func2
    
    
    res = func1()
    res()
    print(age)
    

    嵌套函数

    • 在函数内部再定义一个函数
    age = 19
    
    def f1():
        def f2():
            print(age)
        age = 73
        f2()  # 调用内部函数
    f1()
    print(age)
    
    # 函数内部可以再次定义函数,执行需要被调用。age是一层一层往上找。
    

    匿名函数

    • 没有函数名、也没有代码块。
    • 一行代码,没有名字 lambda
    • 主要用于和一些函数搭配使用:内置的map()、filter()、reduce()、...
    • 节省代码量
    res = map(lambda x,y:x+y,[1,2,3])
    

    高阶函数(满足其一就是高阶函数)

    • 函数可以接收一个函数作为参数传入
    • 函数的返回值是一个函数
  • 相关阅读:
    介绍下自己的Delphi学习环境
    我所理解的Delphi中的数组类型
    字符串的基本操作
    以太网网络变压器的作用
    S3C2416 2D加速
    DM9000AEP调试的时候注意事项
    设置activity背景图片
    如何從現有的share library開發!?
    struct mntent linux挂载信息读取
    Qt中Qstring,char,int,QByteArray之间到转换
  • 原文地址:https://www.cnblogs.com/xjmlove/p/10331272.html
Copyright © 2020-2023  润新知