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())  # 中 --> \xe4\xb8\xad


# 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也没有任何关系,只针对不可变类型
posted @ 2019-08-12 14:49  ZJJJJJJJ  阅读(154)  评论(0编辑  收藏  举报