• 函数


    一、函数基本定义

    定义:

      函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只要调用其函数名即可。

    特性:

      1.减少重复代码

      2.使程序变的可扩展

      3.使程序变得易维护

    二、函数的定义

      def    函数名(参数1,参数2):

        '''函数注释'''

        print(‘函数体’)

        return 返回值

      定义:def 关键字开头,空格之后接函数名和括号,紧接着跟一冒号

          def 是固定的定义语法。

    def sayhi():
        print("hello world!")
    sayhi()
    
    def calc(x,y):
        res = x**y
        return res
    print(calc(4,5))
    函数定义

      函数名:函数名是包含字母,数字,下划线的任意组合,但不能以数字开头。取名尽量有意义。

      函数调用返回值=函数名(参数1,参数2)#函数名后面加括号。

      定义一个求计算字符串长度的函数。假如我们的len()函数现在不能用了,那么我们就需要定义一个函数,求字符串的长度。如果我们一次一次的去写相同的代码,会显得很low,这时候我们的函数就能用上了。

    def length():
        s = '你好'
        length = 0
        for i in s:
            length += 1
        return length
    print(length())
    View Code

    三、函数的参数

    形参变量

      (函数定义时候定义的参数)只有在被调用时才分配内存单元,在调用结束时,即刻释放所有分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

    实参

      (函数调用时传进来的参数)可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使用参数获得确定值。

    默认参数

      默认参数一定要跟在位置参数后面。

    def stu_info(name,age,course,gender='male'):
        print("----注册学生信息------")
        print("姓名:",name)
        print("年龄:",age)
        print("性别:",gender)
        print("课程:",course)
    stu_info('alex',18,'python')
    stu_info('alex',18,'python',gender='femal')
    默认参数

    关键参数

      关键参数必须跟在位置参数后面

     

    def stu_register(name, age, course='PY' ,country='CN'):
        print("----注册学生信息------")
        print("姓名:", name)
        print("age:", age)
        print("国籍:", country)
        print("课程:", course)
    #调用可以这样
    stu_register("王山炮",course='PY', age=22,country='JP' )
    #也可以这样
    stu_register('王山炮',22)
    #但绝不可以这样
    stu_register("王山炮",course='PY',22,country='JP' )
    #当然这样也不行,这样相当于给age赋值2次,会报错!
    stu_register("王山炮",22,age=25,country='JP' )
    关键参数

    非固定参数(动态参数)

      按位置传值多余的参数全都由args统一接收,保存成一个元组的形式。

      按关键字传值接受多个关键字参数,由kwargs接收,保存成一个字典的形式。

    '''拿报警发邮件的举例'''
    def send_alert(msg,*users): #(['alex','peiqi','egon'],)把列表打包成一个元素 --->*['alex','peiqi','egon']---->('alex','peiqi','egon')
        for u in users:
            print("报警发给",u)
    #如果参数中出现形参(*users),传递的参数就可以不再是固定个数,传过来的错有参数打包成元组
    #传参方式一:
    send_alert('服务器down了','alex','peiqi','egon')
    #传参方式二:
    send_alert('服务器down了',*['alex','peiqi','egon'])
    
    '''求多个数字的和'''
    def calc(a,b,*args):
        sum = a+b
        for i in args:
            sum += i
        return sum
    print(calc(1,2,3,4,5))
    *args应用
    '''**kwargs接收的未定义的关键字参数'''
    def func(name,*args,**kwargs):
        print(name,args,kwargs)
    func('alex',22,'tesla',add='山东',num=1234) #*args接收了22,tesla,**kwargs接收了add和num
    d = {'degree':'primary school'}
    func('alex',**d)  #**kwargs接收了所有的字典
    
    def f(a,b,*args,defult=6,**kwargs):
        '''位置参数,*args, 默认参数,**kwargs'''
        # print(a,b,args,defult,kwargs)
        return a,b,args,defult,kwargs
    print(f(1,2,34,56,7,8,9,0,name='alex',age='333'))
    #传参数的时候:必须先按照位置传参数,再按照关键字传参数
    **kwargs应用

    四、函数返回值

    1,return的作用:结束一个函数的执行。函数在执行过程中只要遇到return语句,就会停止执行并返回结果。也可以理解成return语句代表函数的结束。

    2,如果未在函数中指定return,那么这个函数的返回值为None

    3,函数只能返回一个值。如果有多个值(用‘,’隔开),返回为一个元组

    def func():
        a = 111
        b = [1, 2, 3]
        c = {'a': 15, 'b': 6}
        # return a#返回一个值
        return a,b,c#返回多个值,变量之间按逗号隔开,以元组的形式返回
    print(func())
    函数返回一个或多个值

    定义一个列表,返回列表最后一个元素

    #方法一
    def func():
        list=['hello','egon',11,22]
        return list[-1]
    print(func())
    
    #方法二
    def func_1():
        list=['hello','egon',11,22]
        return list
    a,b,c,d = func_1()
    print(d)
    View Code

    五、小结

      1,定义:def 关键字开头,不能改变。

      2,参数:括号来接收参数,如传入多个参数,用逗号隔开

            参数可以定义多个,也可以不定义

                           参数有很多种,如涉及到多种参数时可以使用*args和**kwargs 所有的参数都跟在位置参数后面。

      3,注释:函数第一行语句应该添加注释

      4,函数体:函数内容以冒号起始,并且严格按照缩进。

      5,返回值:return [表达式] 结束函数。不带return、只写一个return、只写return None时都返回None

    def 函数名(参数1,参数2,*args,默认参数,**kwargs):
            """注释:函数功能和参数说明"""
            函数体
            ……
            return 返回值

    
    
  • 相关阅读:
    面象对象设计原则之四:接口隔离原则(The Interface Segregation Principle,ISP)
    面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)
    面象对象设计原则之二:开放封闭原则(Open-Closed Principle, OCP)
    面象对象设计原则之一:单一职责原则(Single Responsibility Principle, SRP)
    asp.net core 2.0中的配置(1)---Configuration
    UML类图与类的关系详解
    Javascript中的闭包和C#中的闭包
    Delphi考虑sql注入 QuotedStr
    delphi 窗体的创建和释放
    Delphi ADOQuery连接数据库的查询、插入、删除、修改
  • 原文地址:https://www.cnblogs.com/chris3201/p/8983751.html
Copyright © 2020-2023  润新知