美文网首页
08Python的函数

08Python的函数

作者: 白眸怪ya | 来源:发表于2019-02-28 09:25 被阅读0次

    第八章 Python的函数

    
    #函数
    print()
    a = 1.123456
    result = round(a,2)  #结果保留小数点后两位。执行四舍五入
    print(result)
    
    #如何查看一个内置函数的功能?
    # 在IDLE里 使用help(  )   括号里添上要查的函数名称即可
    
    函数的功能:
    1.功能性
    2.隐藏细节
    3.避免重复的编写代码
    
    
    组织代码。自定义函数
    

    8-2 函数的定义及运行特点

    '''
    
    自定义函数
    
    def funcname(parameter_list):    # 函数体
        pass
    1.参数列表可以没有
    2.在函数体里面可以使用return,来返回函数的结果。若函数体里没有return,默认返回None
    return 后面不执行
    
    编写一个函数:
    1.实现两个数字的相加
    2.打印输入的参数
    
    def add(x,y):
        result = x + y
        return result
    
    def print_code(code):
        print(code)
    
    a = add(1,2)
    b = print_code('python')
    print(a,b)
    '''
    ![1524732128529.jpg](https://img.haomeiwen.com/i11154655/d10bf0536a13195b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    代码运行的时候,执行到a的时候,并没有被打印出来,运行到b ,就会去调用函数,所以先出现Python,print(a,b)出现3和none,3是函数调用的结果,none是因为定义的函数里没有return,默认返回None
    
    ![1524732128529.jpg](https://img.haomeiwen.com/i11154655/d9a9feddf7b689d9.
    
    

    8-3 如何让函数返回多个结果

    #如何return两个值?
    #R Skill1 Skill2
    
    def damage(skill1,skill2):
        damage1 = skill1*3
        damage2 = skill2*2 + 10
        return damage1,damage2   #没有必要加上括号,此种形式的结果输出就是元组
    
    skill1_damage,  skill2_damage  = damage(3,6) # 序列解包(函数的调用)
    print(skill1_damage,skill2_damage)
    #print(type(damages))
    
    
    image

    8-4 序列解包与链式赋值

    #什么是序列解包?
    赋值的方式:
    a = 1
    b = 2
    c = 3
    也可以:a,b,c = 1,2,3
    
    d = 1,2,3
    print(type(d))   #打印结果就是序列类型
    
    a,b,c = d   #把一个序列d拆成了这样的3个值,就叫做序列解包 
    
    
    a,b,c = [1,2,3]
    d = 1,2,3            #序列解包的过程
    a,b,c = d
    
    

    python入门与进阶补充

    本章主要补充函数 的相关知识

    def name():#定义一个无参数的函数,只是通过这个函数打印
        print('xiaoyu')#缩进4个空格
    name() #调用函数,打印结果
    
    def add(x,y): #定义一个函数
        return x + y
    result = add(2,3) # 此时的add是一个对象,只有对象才有类型,并且是一个function类
    print(result)
    

    8-5 必须参数与关键字参数

    函数的参数:
    1.必须参数
    
    def add(x,y):
        #x y 形式参数   形参
        result = x + y
        return result
    
    def print_code(code):
        print(code)
    
    a = add(1,2)#实际参数   实参
    b = print_code('python')
    print(a,b)
    
    
    2.关键字参数    意义在于代码的可读性
    def add(x,y):
       
        result = x + y
        return result
    c = add(y=3,x=2)#关键字参数,就是在调用的时候,明确指定想用的参数值到底是给哪个
    
    
    3.默认参数
    def print_student_files(name,gender='男',age='8',college='人民路小学'):#默认参数的设置
        print('我叫' + name)
        print('我今年' + str(age) + '岁')#字符串不能喝int类型相加,所以把age转化成str类型
        print('我是' + gender + '生')
        print('我在' + college + '上学')
    print_student_files('小鱼','男',8,'人民路小学')
    print('--------------------------------')
    print_student_files('小鱼')  #默认参数起到作用了
    
    #对于大多数学生只要输入姓名就行了,其他的都是一样的,所以使用默认参数设置好以后,直接打印即可。
    print('--------------------------------')
    
    
    #如果出现性别和年龄是个别的,就在实参里改动即可,默认参数不要动
    print_student_files('喜小乐','女',16)
    
    #原则如下:
    # 定义函数的开始,把默认值赋值给形参,上面给了3个默认参数,也可以更改的
    # 调用规则,如果有形参没有设置默认值,调用的时候就必须要传实参
    
    print('-------------------------')
    print_student_files('果果',age = 17,college='光明路小学')
    #必须加上age=17,因为参数之间一一对应,如果不写age,默认对应的是性别,所以age不能少
    # 关键字参数可以不遵守顺序
    # 默认参数和必须参数不能混合调用
    

    8-7 可变参数

    def demo(*param):#    * 是用来定义一个可变参数的列表
        print(param)
        print(type(param))
    
    demo(1,2,3,4,5,6,7,8)
    
    # 如果想直接传递一个元组怎么办?demo((1,2,3,4,5,6,7,8))这个方法是错误的,打印结果是二维元组
    
    # 看看正确的打开方式
    def demo(*param):#    * 是用来定义一个可变参数的列表
        print(param)
        print(type(param))
    a = (1,2,3,4,5,6,7,8)
    demo(*a)  #不能直接传a,直接传a就是二维元组,所以在a前面要加上一个*
    # *a 的作用就是a元组里面的每一个元素平铺出来,传递到可变参数的函数里面
    # 可变参数也可以和必须参数混合使用,但是必须参数必须放在可变参数前面,默认参数也是这样
    # 看看下面的例子
    def demo(param1,param2=2,*param):
        print(param1)
        print(param2)
        print(param)
    demo('a',1,2,3)
    
    def demo(param1,*param,param2=2):
        print(param1)
        print(param)
        print(param2)
    
    demo('a',1,2,3,'param')
    
    def demo(param1,*param,param2=2):
        print(param1)
        print(param)
        print(param2)
    
    demo('a',1,2,3,param2='param')
    
    

    看看最后3段代码带来的结果

    image image image

    8-8 关键字可变参数

    def squsum(*param):  #可变参数
        sum = 0
        for i in param:
            sum +=i * i
        print(sum)
    
    squsum(1,2,3,4,5,6)
    
    # 举个例子,如果想要知道全国任意城市的温度,怎么编程?这时候需要用到
    # 用到任意个数关键字参数,看例子
    
    def city_temp(*param):
        pass
    
    city_temp(bj = '32c',xm = '23c', sh = '32c')
    # 上述运行会出错,如图1,原因在于一个 * 不能接受可变的关键字列表!
    # 看下正确的运行结果
    
    def city_temp(**param):  #用两个星号就可以了  **
        print(param)
        print(type(param))
        pass
    city_temp(bj = '32c',xm = '23c', sh = '32c')
    # 如图2所示,打印出来的是字典
    # 想一想,知道了是字典类型以后,要求在city_temp内部,把每个城市的温度打印出来
    # 该如何处理?
    # 要打印可变关键字里面列表的所有元素,我们就要遍历这个字典,问题转换为如何迅速的遍历字典?
    
    def city_temp(**param):
        for c in param:
            print(c)
    city_temp(bj = '32c',xm = '23c', sh = '32c')
    # 如图3,打印结果只有城市,没有温度,不正确
    
    # 下面看看另外一种错误的打开方式!
    
    def city_temp(**param):
        for key,value in param:
            print(key,':',value)
    city_temp(bj = '32c',xm = '23c', sh = '32c')
    #  打印结果如图4,是错误的
    
    # 正确遍历字典的方法如下:
    
    def city_temp(**param):
        for key,value in param.items():# 调用param里的内置方法items即可!
            print(key,':',value)
    city_temp(bj = '32c',xm = '23c', sh = '32c')
    
    #上述结果如图5所示,打印的是正确结果!!
    # 面对一个关键字列表 ,如何把一个字典传进来?如图6
    
    def city_temp(**param):
        for key,value in param.items():# 调用param里的内置方法items即可!
            print(key,':',value)
    a = {'bj' : '32c','xm' : '23c', 'sh' : '32c'}
    city_temp(**a) #这样即可
    
    # 无论是普通参数列表,还是关键字可变参数列表,目的都是简化函数的调用
    # 无论是普通参数列表,还是关键字可变参数列表,他们都有共同的特性:
    #来看看上面值都不传入的情况下:图7
    
    def city_temp(**param):
        print(param)
        for key,value in param.items():# 调用param里的内置方法items即可!
            print(key,':',value)
    a = {'bj' : '32c','xm' : '23c', 'sh' : '32c'}
    city_temp() # 什么值都不传入,打印的是字典,但是for循环进不去
    # 混合参数的情况下,怎么处理?
    def city_temp(param1,**param): #必须参数,可变参数
        print(param1)
        print(param)
        for key,value in param.items():
            print(key,':',value)
    a = {'bj' : '32c','xm' : '23c', 'sh' : '32c'}
    city_temp(1) # 此时传入必须参数的1
    # 如图8  打印结果是 param1 是1 而**param打印结果是空字典
    
    
    image image image image image image image image

    8-9 变量作用域

    c = 50
    
    def add(x,y):
        c = x + y
        print(c)
    # 变量作用域
    add(1,2)
    print(c)
    # 看下图一的打印结果,虽然都是c,但是范围是不同的,故结果不一样
    
    # 看看例2
    
    def demo():
        c = 10
    
    print(c) #打印结果是错误的,c的使用在函数内部,直接在函数外部打印,超出了c的作用域!
    
    # 看看例3
    c = 10
    def demo():
        print(c)
    
    demo() #打印结果是正确的,因为c在函数外部作用的,在函数内部引用可以打印成正确的结果
    
    
    c = 10 #全局变量
    def demo():
        c = 50#局部变量
        print(c)
    
    demo() 
    
    def demo():
        c = 50
    print(c)#此时无法引用局部变量
    
    
    def demo():
        c = 50
        for i in range(0,9):
            c += 1
        print(c)#此时打印结果是正确的,引用的就是局部变量
    
    
    #看看下面的例子
    c = 1 # 外部做一个变量。
    
    def func1():
        c = 2 # 内部做一个变量
        def func2():#在函数内部在定义一个函数
            c = 3
            print(c)
        func2()
    
    func1()
    #作用链域是一个最基本的法则
    

    8-11 global关键字

    全局变量不仅仅可以在模块里使用,在整个应用程序里都是可以引用的

    def demo():
        global c  #使用global可以访问局部变量(把局部变成全局)
        c = 2
    
    demo()
    print(c)
    #在整个应用程序里均可以使用global,不仅仅是在模块中
    
    
    image

    相关文章

      网友评论

          本文标题:08Python的函数

          本文链接:https://www.haomeiwen.com/subject/ykwcuqtx.html