• Python之函数


    day9

    一、文件操作补充

    1、文件中指正移动单位:只有t模式下read(n),n代表字符个数,除此以外都是以字节为单位(一个字节为8个二进制位,utf-8中一个中文字符为3个字节)。

    # with open('a.txt',mode='rt',encoding='utf-8') as f:
    #     res=f.read(4)
    #     print(res)
    # with open('a.txt',mode='rb') as f:
    #     res=f.read(3)
    #     print(res.decode('utf-8'))
    # with open('a.txt',mode='at',encoding='utf-8') as f:
    #     f.truncate(3)

    2、文件操作中控制文件内指正移动的内置方法:

    # f.seek(字节个数,模式):指针移动是以字节为单位的
    # 三种模式:只有0模式既可以在t下用也可以在b下用,而1(当前位置)、2(末尾)两种模式只能在b模式下使用
    # 0(默认的):参照文件开头
    # with open('a.txt',mode='rt',encoding='utf-8') as f:
    #     f.seek(3,0)        
    #     print(f.tell())    #获取指针的目前的所在位置
    #     print(f.read())

    二、函数

    1、函数的基本了解:
    1. 什么是函数
        在程序具备某一功能的工具=》函数
        事先准备好工具=》函数的定义
        遇到应用场景、拿来就用=》函数的调用
    ​
        分为两大类:
            1. 内置函数
            2. 自定义函数
    ​
    2. 为何要用函数
        1. 代码冗余
        2. 程序的组织结构不清晰,可读性差
        3. 扩展性差
    ​
    3. 如何用函数
        函数的使用必须遵循一个原则:
            1. 先定义
                定义语法:
                    def 函数名(参1,参2,参3,...):
                        """
                        文档注释
                        """
                        代码1
                        代码2
                        代码3
                        ...
                        return2. 后调用
                函数名()
    '''
    2、函数使用的注意事项:

      a、先定义,后调用;

      b、定义阶段只检测函数体的语法,不执行函数体的代码;调用阶段执行函数体代码。

    #一. 定义阶段: 只检测语法,不执行代码
    # def func():
    #     print('from func 1')
    #     print('from func 2')
    #     print('from func 3')
    #     print('from func 4')
    #二. 调用阶段: 开始执行函数体代码
    # func()
    # func()
    # func()
    # 示范一:
    # def foo():
    #     print('from foo')
    #     bar()
    #
    # foo()
    # 示范二:
    # def bar():
    #     print('from bar')
    #
    # def foo():
    #     print('from foo')
    #     bar()
    #
    # foo()
    #示范三:
    # 定义
    # def foo():
    #     print('from foo')
    #     bar()
    #
    # def bar():
    #     print('from bar')
    # 调用
    # foo()
    ​
    ​
    # 三:定义函数的三种形式
    # 1. 无参函数
    # def func():
    #     print('from func')
    #
    # func()
    # 2. 有参函数
    # def max2(x,y):
    #     # x=1
    #     # y=2
    #     if x > y:
    #         print(x)
    #     else:
    #         print(y)
    #
    # max2(1,2)
    # max2(3,4)
    3、函数的返回值:
    '''
    1. 什么是函数的返回值
        返回值是函数体代码的运行成果
    ​
    2. 为何要有返回值
        需要拿到函数的处理结果做进一步的处理,则函数必须有返回值
    ​
    3. 如何用
        return 返回值的特点:
            1. 返回的值没有类型限制,也没有个数限制
                I: return或者函数没return:返回值None
                II: return 值:返回的就是该值本身
                III: return 值1,值2,值3:返回元组(值1,值2,值3)
    ​
            2. return是函数结束运行的标志,函数内可以有多个return,但只要执行一次return,函数就立即结束,并且将return后的值当作本次调用的结果返回
    ​
    '''
    4、函数参数的使用:

      4.1、函数参数的分类:

        a、形参:在定义函数时括号内指定的参数(变量名),称之为形参;

        b、实参:在调用函数时括号内传入的值(变量值),称之为实参。

        c、二者的关系:在调用函数时,实参值(变量值)会传给形参(变量名),这种绑定关系在调用函数时生效,调用结束后解除绑定

      4.2、形参详解:

        a、位置形参:在定义阶段,按照从左到右的顺序依次定义的形参

        特点:在函数调用的阶段,必须被一一传值,否则会报错

        b、默认参数:在定义阶段,就已经为某个形参赋值,该形参称之为默认形参在定义阶段,就已经为某个形参赋值,该形参称之为默认形参

        特点:在定义阶段就已经有值,意味着调用阶段可以不用为其传值

        注:默认形参必须放在位置形参后面。

        c、形参中*与**的用法:

        1、形参中带* :*会将溢出的位置实参存成元组的形式然后赋值其后变量名 

    # def func(x,y,*args):
    #     print(x,y,args)  #args打印出来的结果为一个元组   *args打印出来的为拆包后的元组
    #
    # func(1,2,3,4,5,6)

        2、形参中带** :**会溢出的关键字实参存成字典的格式然后赋值其后变量名。

    # def func(x,y,**kwargs):
    #     print(x,y,kwargs)
    #
    # func(1,y=2,z=3,m=1,n=2) 

      4.3、实参详解:

        a、位置实参: 在调用阶段,按照从左到右的顺序依次传入的值;

        特点:这种传值方式会与形参一一对应

        b、关键字实参: 在调用阶段,按照key=value的格式传值

        特点:可以完全打乱位置,但仍然能为指定的形参传值

    # 注意:可以混用关键字实参与位置实参,但是
    # 1. 同一个形参只能被赋值一次
    # 2. 位置实参必须跟在关键字实参的前面
    # func(1,z=3,y=2)
    # func(1,z=3,y=2,x=333)
    # func(x=1,2,z=3) # 报语法错误

        c、实参中*与**的用法

        1、实参中带*:先将实参打散成位置实参,然后再与形参做对应

    # def func(x,y,z):
    #     print(x,y,z)
    # func(1,[2,3])
    # func(*[1,2,3]) #func(1,2,3)
    # func(*'hello') #func('h','e','l','l','o')
    # func(*'hel') #func('h','e','l') 

        2、实参中带**:先将实参打散成关键字实参,然后再与形参做对应

    # def func(x,y,z):
    #     print(x,y,z)
    
    # func(**{'x':1,'z':3,'y':2}) #func(z=3,y=2,x=1)
  • 相关阅读:
    企业命令linux下处理实时日志生成另一个实时日志
    排序算法Java(android)安卓中的list对象排序
    项目设置一个类似HTML map标签功能的Android组件
    最大算法【Manacher模板】HDU 3068——求最长回文子串
    类实现java面向对象上:接口
    线程方法Android:异步调用详解
    输入数字实现分页功能(三层)
    对象主题设计模式读书笔记观察者模式
    网站算法石榴算法严厉打击下 网站盈利方向何在
    闭包执行JavaScript中的闭包
  • 原文地址:https://www.cnblogs.com/peng-zhao/p/10027010.html
Copyright © 2020-2023  润新知