• 1、初识函数


    初识函数

    本章内容:

        1、为什么要用函数
        2、创建和调用函数
        3、函数的参数
          收集参数
        4、函数的返回值
        5、函数文档

        6、本章小结

        7、作业

                  8、扩展阅读


    ++++++++++++++++++++++++++

    1、为什么要用函数

    现在python届发生了一个大事件,len方法突然不能直接用了。。。

    然后现在有一个需求,让你计算'hello world'的长度,你怎么计算?

    这个需求对于现在的你其实不难,我们一起来写一下。

    s1 = "hello world"
    length = 0
    for i in s1:
        length = length+1
    
    print(length)

    好了,功能实现了,非常完美。然后现在又有了一个需求,要计算另外一个字符串的长度,"hello eva".

    于是,这个时候你的代码就变成了这样:

    s1 = "hello world"
    length = 0
    for i in s1:
        length = length+1
    
    print(length)
    
    s2 = "hello eva"
    length = 0
    for i in s2:
        length = length+1
    
    print(length)

    这样确实可以实现len方法的效果,但是总感觉不是那么完美?为什么呢?

    首先,之前只要我们执行len方法就可以直接拿到一个字符串的长度了,现在为了实现相同的功能我们把相同的代码写了好多遍 —— 代码冗余

    其次,之前我们只写两句话读起来也很简单,一看就知道这两句代码是在计算长度,但是刚刚的代码却不那么容易读懂 —— 可读性差

    print(len(s1))
    print(len(s2))

    我们就想啊,要是我们能像使用len一样使用我们这一大段“计算长度”的代码就好了。这种感觉有点像给这段代码起了一个名字,等我们用到的时候直接喊名字就能执行这段代码似的。要是能这样,是不是很完美啊?

    2、创建和调用函数

    初识函数定义与调用

    复制代码
    #使用def来创建,函数是以小写字母开头,类是大写字母开头,
    def myFirstFunction():
        print("这是我的第一个函数!")
        print('我很激动')
        print('在这里感谢TBB,CCAV')
    
    """
    注意:在函数后面一定要加上一对小括号,括号是比不可少的,可以放参数
    """
    
    #调用函数
    myFirstFunction()
    
    
    """
    函数的调用和运行机制:当函数myFirstFunction()发生调用操作,Python会自动找到 def myFirstFunction()的定义过程。
    依次执行函数包含的所有代码块部分
    """
    
    #循环调用三次函数
    for i in range(3):
        myFirstFunction()
    复制代码

    3、函数的参数

    函数的参数

     参数

    复制代码
    #括号里放的就是函数的参数
    #参数使得函数可以个性化的实现
    def mySecondFunction(name):
        print(name +'帅锅')
    
    mySecondFunction('小甲鱼')
    mySecondFunction('小鱿鱼')
    mySecondFunction('小丑鱼')
    
    #可以传多个参数,用逗号隔开
    #python可以支持非常多的参数,一般最多10几个够
    def add(num1,num2):
        print(num1 + num2)
    
    add(1,2)
    复制代码

    形参和实参

    复制代码
    #形式参数 parameter
    #实际参数argument
    #形参指的是函数创建和定义过程中小括号里的参数
    #实参是指的函数被调用的过程中传递进来的参数
    def myFunction(name):   #形参 name
        print(name)
    
    myFunction('小甲鱼')   #实参 '小甲鱼'
    复制代码

    关键字参数和位置参数

    复制代码
    #普通的参数叫位置参数
    #关键字参数就是在传入实参时指定形参的变量名
    def saySomething(name,words):
        print(name + '->' + words)
    
    
    saySomething('小甲鱼','让编程改变世界!')
    saySomething('让编程改变世界!','小甲鱼')   #顺序和上面的不一样
    saySomething(name='小甲鱼',words='让编程改变世界!')  #使用了关键字参数
    
    
    '''
    小甲鱼->让编程改变世界!
    让编程改变世界!->小甲鱼
    小甲鱼->让编程改变世界!
    '''
    复制代码

    默认参数

    复制代码
    #默认参数是在定义的时候赋予了默认值的参数
    def saySomethiing(name='小甲鱼',words='让编程改变世界!'):
        print(name + '->' + words)
    
    #使用默认参数,在调用函数时可以不带参数
    saySomethiing()
    
    
    """
    默认参数与关键字参数的区别:
    1、关键字参数在调用时,通过参数名指定要赋值的参数,这样就不怕搞不清楚参数的顺序而导致函数调用出错;
    2、默认参数是在参数定义的过程中,为形参赋初值,当函数调用的时候,不传递实参,则默认使用形参的初始值代替
    """
    复制代码

    收集参数

    复制代码
    #收集参数
    def test(*params):
        print('有%d个参数'%len(params))
        print('第二个参数是:',params[1])
    
    test('F','i','s','h','C')
    '''
    有5个参数
    第二个参数是: i
    '''
    
    test('小甲鱼',123,3.14)
    '''
    有3个参数
    第二个参数是: 123
    '''
    复制代码
    复制代码
    #参数中带收集参数,其他的参数可以设置为默认参数
    def test(*params,extra='8'):
        print('收集参数是:',params)
        print('位置参数是:',extra)
    
    test(1,2,3,4,5,6,7,8,9)
    '''
    收集参数是: (1, 2, 3, 4, 5, 6, 7, 8, 9)
    位置参数是: 8
    '''
    复制代码

    打包与解包

    复制代码
    #打包与解包
    def test(*params):   #打包
        print('有%d个参数'% len(params))
        print('第二个参数是:',params[1])
    
    
    a = [1,2,3,4,5,6,7,8,9]
    #test(a)    # 直接将列表名a作为实参将会出错
    #IndexError: tuple index out of range
    
    test(*a)  #实参前面加上星号(*)表示解包
    '''
    有9个参数
    第二个参数是: 2
    
    '''
    
    #python还有一种收集方式,就是用(**),将参数们打包成字典
    复制代码

    4、函数的返回值

    函数的返回值

    #函数中使用关键字return,后面跟着指定的返回值
    def add(num1,num2):
        return  num1 + num2
    
    add(1,2)

     再谈返回值

    复制代码
    #返回多个值
    def test():
        return [1,'小甲鱼',3.14]
    
    print(test())   # [1, '小甲鱼', 3.14]
    
    #可以利用元组的形式返回多个值
    def test():
        return 1,'小甲鱼',3.14
    
    print(test()) 
    复制代码

    5、函数文档

    复制代码
    def exchangRate(dollar):
        """
        美元  ->人民币
        :param dollar:
        :return:
        """
        return dollar * 6.5
    
    a = exchangRate(10)
    print(a)  #65
    
    print(exchangRate.__doc__)   #使用__doc__来获取函数文档
    '''
        美元  ->人民币
        :param dollar:
        :return:
    '''
    
    help(exchangRate)   #查看函数的帮助文档
    '''
    Help on function exchangRate in module __main__:
    
    exchangRate(dollar)
        美元  ->人民币
        :param dollar:
        :return:
    '''
    复制代码

    6、本章小结

    面向过程编程的问题:代码冗余、可读性差、可扩展性差(不易修改)

    定义函数的规则:

    复制代码
    复制代码
    1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
    2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
        参数可以定义多个,也可以不定义。
        参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
        如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序 3.注释:函数的第一行语句应该添加注释。 4.函数体:函数内容以冒号起始,并且缩进。 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None def 函数名(参数1,参数2,*args,默认参数,**kwargs): """注释:函数功能和参数说明""" 函数体 …… return 返回值
    复制代码
    复制代码

    调用函数的规则:

    复制代码
    复制代码
    1.函数名()
        函数名后面+圆括号就是函数的调用。
    2.参数:
        圆括号用来接收参数。
        若传入多个参数:
            应按先位置传值,再按关键字传值
            具体的传入顺序应按照函数定义的参数情况而定
    3.返回值
        如果函数有返回值,还应该定义“变量”接收返回值
        如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致
    
    无返回值的情况:
    函数名()
    
    有返回值的情况:
    变量 = 函数名()
    
    多个变量接收多返回值:
    变量1,变量2,... = 函数名()
    复制代码
    复制代码

    参数总结:

    8、扩展阅读

    python之路——初识函数

    参考:https://www.cnblogs.com/Eva-J/articles/7125925.html#_labelTop

  • 相关阅读:
    BZOJ4238:电压
    BZOJ4566:[HAOI2016]找相同字符
    BZOJ4530:[BJOI2014]大融合
    BZOJ1912:[APIO2010]patrol巡逻
    BZOJ3998:[TJOI2015]弦论
    CNBlogs 样式修改
    POJ-3321 Apple Tree 【DFS序+树状数组】
    BZOJ-2152 聪聪可可 【点分治】
    POJ-1741 Tree 【点分治】
    Treap实现名次树
  • 原文地址:https://www.cnblogs.com/yinfutao/p/11517801.html
Copyright © 2020-2023  润新知