zoukankan      html  css  js  c++  java
  • 8.9(可变长参数,函数对象,函数嵌套,名称空间与作用域)

    复习

    文件的高级应用

    打开的高级模式

    1. r+: 可读可写,指针文件末
    2. w+: 可读可写,清空文件(极力不推荐)
    3. a+: 可读可写

    文件的高级方法

    1. seek: 单位字节
    2. tell: 单位字节
    3. read(n): 单位字符
    4. truancate: 单位字节
    # with open('test.py', 'rb') as fr:
        # fr.seek(1, 0)  # 0是从文件头开始,走1个字节
        # fr.seek(1, 1)  # 1是从当前位置开始,走1个字节
        # fr.seek(1, 2)  # 2是从文件末开始,走1个字节
        # fr.seek(0, 2)  # 2是从文件末开始,走1个字节  # 定位到文件末尾
        # print(f'fr.tell():{fr.tell()}')  # 告诉你当前指针的位置
        # print(fr.read())  # 中 --> xe4xb8xad
    
    
    # with open('test.py', 'a+b') as fa:
    #     fa.truncate(1)
    
    
    with open('test.py', 'rt',encoding='utf8') as fr:
        print(fr.read(3))  # 3个字符
    

    修改文件的两种方式

    # 文件没有修改这一说,只有覆盖
    
    
    # with open('test.py','r+',encoding='utf8') as fr:
    #     fr.seek(3)
    #     fr.write('中')
    #     fr.flush()   # 如果不加flush短暂的停留在内存中,然后再输入硬盘.如果加了会更快速刷入硬盘
    
    
    
    with open('test.py', 'r', encoding='utf8') as fr, 
            open('test_swap.py', 'w', encoding='utf8') as fw:
        data = fr.read()
        data = data.replace('sb', 'dsb')
        fw.write(data)
    
    import os
    
    os.remove('test.py')
    os.rename('test_swap.py', 'test.py')
    

    函数的定义

    函数定义阶段只检测语法,不执行代码

    def 函数名(<参数1,参数2...>):
        <代码块>
        
        return <返回值>
    

    函数的调用

    def 函数名(<参数1,参数2...>):
        <代码块>
        
        return <返回值>
    
    函数名()  # 调用阶段才会执行函数体代码
    

    定义函数的三种方式

    有参函数

    有参数的函数

    无参函数

    没有参数的函数

    空函数

    函数体代码是pass

    函数的返回值

    return返回返回值, 终止函数, 返回可以是多个(元组的形式返回)

    默认返回值是None

    def func():
        return 1
    
    res = func()  # 1
    

    函数的参数

    def func(name, age):
        print(name, age)
        return 1
    
    res = func('nick',18)  # 1
    

    形参

    具有描述意义

    实参

    真实存在的一个值

    位置形参

    从左到右一个一个的写下去

    位置实参

    从左到右一个一个的传给形参

    默认形参

    位置形参会有一个默认值, 默认形参必须得写在位置形参后面

    关键字实参

    按照形参名传值,关键字实参必须得写在位置实参后面

    可变长参数

    • *
      • *args: 接收多余的位置实参
      • *(): 打散元组内的元素当做位置实参传给形参
    • **
      • **kwargs: 接收多余的关键字实参
      • **{}:打散字典的元素作为关键字实参传给形参

    函数对象

    函数名和变量名是等同的

    1. 引用
    2. 函数的参数
    3. 函数的返回值
    4. 容器类元素

    函数的嵌套

    def f1():
        def f2():
            pass
    

    函数的调用

    def f1():
        pass
    
    f1()
    
    
    def f2():
        f1()
    
    # 函数必须得先定义后调用
    

    名称空间与作用域

    内置名称空间

    Python解释器的内置方法,如 len/int/float, python解释器启动的时候就有了

    全局名称空间

    python文件执行的时候生成

    局部名称空间

    函数调用的时候生成

    执行顺序 内置-->全局-->局部

    查找顺序 当前位置开始 局部-->全局-->内置

    全局作用域

    内置+全局

    局部作用域

    局部

    1. 全局作用域内的变量(x=1)和局部作用域内的变量(x=1),两个x没有任何关系,只针对不可变类型
    2. 局部作用域1内变量(x=1)和局部作用域2内变量(x=1),两个x也没有任何关系,只针对不可变类型
  • 相关阅读:
    Socket
    字符串,byte,字典转换整理
    1-嵌入式面试题库
    10-FreeRTOS 队列
    9-FreeRTOS API获取任务使用CPU时间
    7-代码区 | 常量区 | 静态区(全局区) | 堆区 | 栈区
    8-FreeRTOS任务API
    7-FreeRTOS时间片进行任务调度
    6-C指针
    用Union体测试处理器大小端
  • 原文地址:https://www.cnblogs.com/jiann/p/11340091.html
Copyright © 2011-2022 走看看