首页 > 编程语言 > 详细

python基础

时间:2019-08-13 13:39:48      阅读:102      评论:0      收藏:0      [点我收藏+]

一、修改文件的两种方法

第一种方式修改文件:

修改文件:

1.将数据由硬盘读到内存(读文件)

2.在内存中完成修改(字符串的替换)

3.再覆盖原来的内容(写文件)

优点:硬盘上只有一个文件
缺点:当文件过大的情况下,可能会造成内存溢出

replace 替换

with open(r'test02', 'r', encoding='utf-8') as f:    
    res = f.read()    
    print(res)with open(r'test02', 'w', encoding='utf-8')as f:    
        data = res.replace('jeff', 'gyy')   # 替换    
        print(data)    
        f.write(data)

第二种方式修改文件:

import os

1.创建一个新文件
2.读取老文件内容到内存进行修改 将修改好的内容写到新文件当中
3.将老文件删除 将新文件的名字改成老文件
优点:内存中始终只有一行内容,不占内存
缺点:在某一时刻硬盘上会同时存在两个文件

with open(r'test02', 'r', encoding='utf-8') as read_f,        open(r'test02.swap', 'a', encoding='utf-8') as write_f:
    for line in read_f:
        new_line = line.replace('gyy', 'cjm')
        write_f.write(new_line)
os.remove(r'test02')  # 删除老文件
os.rename(r'test02.swap', 'test02')   # 新文件改名为老文件名字

二、函数的递归

1.特点

1.函数在调用阶段直接或间接的又调用自己

2.递归函数不需要考虑循环的次数,只需把握结束的条件

# 查看递归深度:默认1000

import sys
print(sys.getrecursionlimit())  # 不是很精确

1.递归死循环:

def index():
    print("这是第一个函数")
    login()

def login():
    print("这是第二个函数")
    index()

index()

技术分享图片

2.函数的递归分为两个阶段:

  1.回溯:重复的过程,一层层降低难度

  2.递推:一层层往回推导的过程

要求:
第一个人18岁,第二个人比第一个人大两岁,第三个人比第二个人大两岁,第四个人比第三个人大两岁。。。
age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=18

技术分享图片

def age(n):
    if n == 1:
        return 18
    return age(n-1) + 2
res = age(5)   # 第五个人的年龄
print(res)

3.递归使用的例子:依次打印列表中的数据

复杂度降低:列表越来越短

递归函数:

l = [1 ,[2 ,[3 ,[4 ,]]]]
def main(l):
    for i in l:
        if type(i )is int:  # 判断是否为整型
            print(i)
        else:
            main(i)
main(l)

三、@property装饰器

装饰器:为了调用方式一致,方便使用者
@property首先创建一个age对象,所以@setter、@deleter要加函数名
:这里的age是装饰方法的名称

@property(获取私有) :把一个方法伪装成普通属性,通常函数名和属性名保持一致(方便使用者调用)
@函数名.setter(修改私有):函数名和属性名保持一致
@函数名.deleter(控制删除):

class A:
    def __init__(self, name, age):
        self.name =  name
        self.__age = age

    @property   # 获取属性时,触发下面
    # 获取伪装成普通属性,通常函数名伪装成属性名
    def age(self):
        return self.__age

    @age.setter  # 修改属性时,触发下面
    def age(self, new_age):
        self.__age = new_age
        print('修改成功')

    @age.deleter  # 删除属性时,触发下面
    def age(self):
        print('删除时触发的内容')

1.查看私有属性

a = A('jeff', 50)

print(a.name)
print(a.age)

结果:jeff   50

2.修改私有属性

a = A('jeff', 50)   # 定义初始

a.age = 100  #修改
print(a.age)

结果:修改成功   100

3.删出私有属性触发

a = A('jeff', 50)

del a.age

结果:删除时触发的内容

四、isinstance判断类型,issubclass判断是否是谁的子类

"""
1.isinstance(a,int) 判断类型
    参数a:要判断的对象
    参数int:判断的类型

2.issubclass(a,B):判断a是不是B的子类
        参数a:子类
        参数B:父类
"""
1.isinstance案例:
def add_num(a, b):
    # if type(a) == int and type(b) == int:   # 等于下面一句
    if isinstance(a,int) and isinstance(b,int):
        return a+b
    else:
        print("不能相加")

print(add_num('你', 12))
#结果:不能相加

2.isinstance案例:

class Animal:

    def eat(self):
        print("动物吃东西。。。")

class Pig(Animal):
    def eat(self):
        print('猪什么都吃 ,不挑食')

class Tree:
    def light(self):
        print('植物光合作业...')
# issubcalss
def manage(obj):
    # issubclass 判断传入的obj是不是Animal的子类
    if issubclass(type(obj), Animal):
        obj.eat()
    else:
        print('不是动物')
shu = Tree()
manage(shu)
#结果:不是动物



pig = Pig()
manage(pig)


#结果:猪什么都吃 ,不挑食

python基础

原文:https://www.cnblogs.com/guyouyin123/p/11345004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!