Python基础练习(后面的例子)(和Python学习笔记1对应的例子)

#/usr/bin/env python
#import datetime
#import time
#def logger(fn):
#    def wrap(*args,**kwargs):
#        #before
#        print("args={},kwargs={}".format(args,kwargs))
#        start = datetime.datetime.now()
#        ret = fn(*args,**kwargs)
#        #after
#        #print(ret)
#        delta = (datetime.datetime.now()-start).total_seconds()
#        if delta > 2:
#            print("{} took {}s".format(fn.__name__,delta))
#        return ret
#    return wrap


#@logger  # 相当于add = logger(add) 
#def add(x,y):
#    time.sleep(10)
#    return x + y


##foo = logger(add)
##print(foo(4,6))


##add = logger(add)  #return wrap,wrap = 增强的fn
#print(add(x = 4,y = 6))






#import datetime
#import time


#def logger(fn):
#    def wrap(*args,**kwargs):
#        print("args={},kwargs={}".format(args,kwargs))
#        start = datetime.datetime.now()
#        ret = fn(*args,**kwargs)
#        delta = (datetime.datetime.now() - start).total_seconds()
#        if delta > 2:
#            print("{} token {}'s".format(fn.__name__,delta))
#        return ret
#    return wrap


#@logger
#def add(x,y):
#    time.sleep(5)
#    return x+y


#print(add(4,5))








#ls功能代码实现
#from pathlib import Path
#import argparse
#import datetime
#import stat


#def listdir(path=".",all=False,detail=False,human=False):
#    def _convert_mode(mode:int):
#        modelist = ['r', 'w', 'x', 'r', 'w', 'x', 'r', 'w', 'x']
#        modestr = bin(mode)[-9:]  # '110110100'
#        ret = ""
#        for i,c in enumerate(modestr):
#            if c == '1':
#                ret += modelist[i]
#            else:
#                ret += '-'
#        return ret


#    # -d -s p l c b
#    def _convert_type(file:Path):
#        if file.is_symlink():
#            ret = '1'
#        elif file.is_fifo():
#            ret = 'p'
#        elif file.is_socket():
#            ret = 's'
#        else:
#            ret = '-'
#        return ret
    
    
#    def _get_human(size:int):
#        units = ['','K','M','G','T','P'] #" KMGTP"
#        depth = 0
#        while size >= 1024:
#            size = size//1024
#            depth += 1
#        return ("{}{}".format(size,units[depth]))




#    def _showdir(path='.',all=False,detail=False,human=False):
#        p = Path(path)
#        for file in p.iterdir():
#            if not all and str(file.name).startswith('.'): # .开头 不打印 --all
#                continue


#            # -l
#            if detail:
#                st = file.stat()
#                # -rw-rw-r-- l python python 2920 Sep 21 07:30 ips
#                h = str(st.st_size)
#                if human:
#                    h = _get_human(st.st_size)
#                yield (stat.filemode(st.st_mode),st.st_nlink,st.st_uid,st.st_gid,h,
#                      datetime.datetime.fromtimestamp(st.st_atime).strftime('%Y-%m-%d %H:%M:%S'),file.name)
#            else:   #没有 -l
#                yield (file.name,)
#    yield from sorted(_showdir(args.path,args.all,args.l,args.h),key=lambda x: x[len(x)-1])
##ls [path] [-l] [-a] [-h]
#parser = argparse.ArgumentParser(prog='ls',add_help=False,description='list all files') #构造解析器
#parser.add_argument('path',nargs='?',default='.',help='path help') # 位置参数
#parser.add_argument('-l',action='store_true')
#parser.add_argument('-h',action='store_true')
#parser.add_argument('-a','--all',action='store_true')






#if __name__ == '__main__':
#    args = parser.parse_args()
#    parser.print_help()
#    print('args=',args)
    
#    for st in listdir(args.path,args.all,args.l,args.h):
#        print(st)














#class MyClass:
#    """A example class"""
#    x = 'abc' #类属性
#    def __init__(self):#初始化(方法、函数、构造函数)
#        print('init') #如果没定义,则隐式定义,返回值为pass


#    def foo(self): #类属性foo,也是类方法
#        return "foo = {}".format(self.x)


#a = MyClass()#实例化,初始化
#print(a.foo())




#class person:
#    x = 'abc'
#    def __init__(self,name,age=18):
#        self.name = name
#        self.age = age


#    def showage(self,x,y):
#        print('{} is {}'.format(self.name,self.age),x,y)
#        self.y = x
#        person.x = x


#tom = person('tom',32) #实例化
#jerry = person('jerry',21)


#print(id(tom))
#print(id(person('tom',32)))
#print(tom.name,tom.age)
#print(jerry.name,jerry.age)
#print(tom.x,jerry.x)
#print('--------------------')
#tom.showage(100,'a')
#print(tom.y)
#print(person.x)
#jerry.showage(200,'d')
#print(jerry.y)
#print(person.x)
#person.x = 'fdsfsd'
#print(tom.x,jerry.x)
#print(person.__dict__)
#print(tom.__class__,jerry.__class__)
#print(tom.__class__.__name__,jerry.__class__.__name__)
#print(tom.__dict__)
#print(jerry.__dict__)
#print(tom.__dict__['name'])








#class Person:
#    height = 180
#    def __init__(self,name,age):
#        self.name = name
#        self.age = age
#    def showper(self,x,y):
#        print("{} is {}".format(self.name,self.age))
#        self.sex = y
#        Person.height = x


#Tom = Person('tom',22)
#Jerry = Person('jerry',43)


#print(Tom.name,Tom.age)
#print(Jerry.name,Jerry.age)
#print(Person.__dict__)
#print("-------------------")
#Tom.showper(188,"male")
#print(Tom.sex)
#print(Person.height)
#Jerry.showper(165,"female")
#print(Jerry.sex)
#print(Person.height)
#print("------------")
#print(Person.__dict__)
#print(Tom.__dict__)
#print(Jerry.__dict__)
#print("----------------")
#print(Person.__class__)
#print(Tom.__class__)
#print(Jerry.__class__)
#print("-------------")
#print(Person.__class__.__name__)
#print(Tom.__class__.__name__)
#print(Jerry.__class__.__name__)
#print("---------------")
#print(Person.__class__.__doc__)
#print(Tom.__class__.__doc__)
#print(Jerry.__doc__)
























#类以及实例的变量访问
#class Person:
#    age = 3
#    height = 170
#    def __init__(self,name,age=18):
#        self.name = name
#        self.age = age




#Tom = Person('tom') #实例化
#Jerry = Person('jerry',21)


##Person.age = 30
#print(Person.age,Tom.age,Jerry.age)


#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#print(Person.height,Tom.height,Jerry.height)


#Person.height += 20 
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')


#Tom.height = 168
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')


#Jerry.height += 30
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')


#Person.weight = 70
#print(Person.weight,Tom.weight,Jerry.weight)
#print(Person.__dict__['weight'])
#print(Tom.weight)


#类装饰器
#def setnameproperty(name):
#    def wrapper(cls):
#        cls.NAME = name
#        return cls
#    return wrapper






#@setnameproperty('Tom')       # Person = stenameproperty("Tom")(Person)
#class Person:
#    AGE = 5


#print(Person.NAME)
#print(Person.AGE)


#class tracer: 
#    def __init__(self,func): 
#        self.calls = 0 
#        self.func = func 
#    def __call__(self,*args): 
#        self.calls += 1 
#        print('call %s to %s' %(self.calls, self.func.__name__)) 
#        self.func(*args) 
 
#@tracer              # spam = tracer(spam)
#def spam(a, b, c): 
#    print(a + b + c) 


#spam(1,2,3)






#class tracer:  
#    def __init__(self, *args):  
#        self.calls = 0
#        self.args = args    
#    def __call__(self, func):
#        self.func = func
#        def realfunc(*args):
#              self.calls += 1
#              print('call %s to %s' %(self.calls, self.func.__name__))
#              print (self.func(*args))
#              print(*self.args)
#        return realfunc 


#@tracer("fdfds")
#def spam(a, b, c):  
#    return a + b + c   
#spam(1,2,3)








#面向对象类方法以及静态方法
#class Person:
#    HEIGHT = 122
#    def __init__(self,name,HEIGHT):
#        self.name = name
#        self.HEIGHT = HEIGHT


#    def normal_method():
#        print('nornal')


#    def method(self):
#        print("{0.name}'s method".format(self))


#    @classmethod
#    def class_method(cls):
#        print('class = {0.__name__} ({0})'.format(cls))
#        cls.HEIGHT += 10


#    @staticmethod
#    def static_methd():
#        print(Person.HEIGHT)




#print('~~~~~类访问~~~~~~~~~~')
#print("1",Person.normal_method())
#print("--------------")
##print("2",Person.method())
##print("3",Person.class_method())
#print("4",Person.static_methd())
#print("--------------")
#print(Person.__dict__)
#print('~~~实例访问~~~~~~~~~~~')
#print('tom---')
#tom = Person("tom",1333)
##print("1",tom.normal_method())
#print("2",tom.method())
#print("3",tom.class_method())
#print("4",tom.static_methd())
#print('jerry---')
#jerry = Person("jerry",111)
##print("1",jerry.normal_method())
#print("2",jerry.method())
#print("3",jerry.class_method())
#print("4",jerry.static_methd())








#class Dog(object):
#    def __init__(self, name):
#        self.name = name
 
#    @staticmethod   # 属于类的一种方法,但无法访问类或实例的属性
#    def eat(self, food):
#        print("%s is eating %s" % (self.name, food))
#    def talk(self):
#        print("%s is talking." % self.name)
 
#dog = Dog("Tom")
## 当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self
##dog.eat("Apple")
## TypeError: eat() missing 1 required positional argument: 'food'
 
## 正确的姿势
#dog.eat(dog, "Apple")










#类继承
#class Parent:        # 定义父类
#   parentAttr = 100
#   def __init__(self):
#      print ("调用父类构造函数")
 
#   def parentMethod(self):
#      print ('调用父类方法')
 
#   def setAttr(self, attr):
#      Parent.parentAttr = attr
 
#   def getAttr(self):
#      print ("父类属性 :", Parent.parentAttr)
 
#class Child(Parent): # 定义子类
#   def __init__(self):
#      print ("调用子类构造方法")
 
#   def childMethod(self):
#      print ('调用子类方法')
 
#c = Child()          # 实例化子类
#c.childMethod()      # 调用子类的方法
#c.parentMethod()     # 调用父类方法
#c.setAttr(200)       # 再次调用父类的方法 - 设置属性值
#c.getAttr() 








#方法重写
#class Parent:
#    def myMethod(self):
#        print("parent's method!")
#    def mMethod(self):
#        print("43432")
#class Child(Parent):
#    def myMethod(self):
#        print("child's method!")


#c = Child()
#c.myMethod()
#c.mMethod()










#访问控制--私有变量
#class Person:
#    __age = 11
#    def __init__(self,name,age=18):
#        self.name = name
#        self.__age = age
    
#    def growup(self,incr = 1):
#        if 0 < incr <150:
#            self.__age += incr
#    def getage(self):
#        return self.__age


#Tom = Person('tom')
#Tom.growup(2)
#print(Tom.getage())
#print(Tom._Person__age)


#print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())


#Tom.age = 2000
#print(Tom.getage())
#print(Tom.age)






#私有成员---私有变量,私有方法
#class Person:
#    def __init__(self,name,age=18):
#        self._name = name
#        self.__age = age
    
#    def __growup(self,incr = 1):
#        if 0 < incr <150:
#            self.__age += incr
#    def __getname(self):
#        return self._name


#    def __getage(self):
#        return self.__age


#Tom = Person('tom')
##Tom.growup(2)
#print(Tom._Person__getage())
##Tom._name = 'jerry'
#print(Tom._name)
#print(Tom._Person__getname())


#print(Person.__dict__)
##print(Tom.__dict__)
##Tom._Person__age = 200
##print(Tom.getage())








#import sys
#import os
#debug = True
#class FooClass(object):
#    "Foo class"
#    pass
#def test():
#    "test function"
#    foo = FooClass()
#    if debug:
#        print ('run test()')
#if __name__ == '__main__':
#    test()


#print(FooClass.__dict__)








#for i in range(-3,4):
#    if i < 0:
#        n = -i
#        print(" "*n + "*" * (7-2*n))
#    elif i == 0:
#        print("*"*7)
#    else:
#        n = i
#        print(" "*n + "*" *(7-2*n))


#print("----------")
#for i in range(-3,4):
#    if i < 0:
#        n = -i
#        print(" "*n + "*" * (4-n))
#    elif i == 0:
#        print("*"*7)
#    else:
#        n = i
#        print(" "* + "*" *(4-n))






#判断文件是否存在,存在打开。并连续写入保存记忆关闭
#import os
#import os.path


#if os.path.exists("C:/Users/lee/Desktop/helloworld"):
#    f1 = open("C:/Users/lee/Desktop/helloworld", "a+")
#while True:
#    line = input("Enter something:")
#    if line == "q" or line == "quit":
#        break
#    f1.write(line+"\n")
#f1.close()


#嵌套函数
#1
#x = 6
#z = "global"
#def f1():
#    x = "from f1"
#    y = 3
#    print(x,z)
#    def f2():
#        x = "from f2"
#        print(x,y)
#    f2()


##2
#def f1():
#    x = 3
#    def f2():
#        y = "hello"
#        print(x,y)
#    return f2


#f1()   #返回的是f2(是一个函数对象)
#a1 = f1()     #a1指向f2(a1是一个函数引用)
#type(a1)    #function
#a1()     #调用f2()












#类和对象
#'''
#定义一个学生类,用来形容学生
#'''


#class Student():
#    #一个空类,pass代表直接跳过
#    #此处pass必须有
#    pass


##定义一个对象
#mingyue = Student()


##再定义一个类,用来描述听Python的学生
#class PythonStudent():
#    #用None给不确定的值赋值
#    name = None
#    age = 18
#    course = "Python"


#    #需要注意
#    #1.def doHomework的缩进层级
#    #2.系统默认出一个self参数
#    def doHomework(self,user,ages):
#        self.user = user
#        self.ages = ages


#        #推荐在函数末尾使用return语句
#        return None


##实例化一个叫yueyue的学生,是一个具体的人
#yueyue = PythonStudent()
#print(yueyue.name)
#print(yueyue.age)
#print(yueyue.__dict__)
#print("*"*10)
##注意成员函数的调用没有传递进入参数
#yueyue.doHomework("liuyifei",18)
#print(yueyue.user)
#print(yueyue.ages)
#print(PythonStudent.name)
#print(PythonStudent.age)
#print(PythonStudent.__dict__)
#print(yueyue.__dict__)








#class Wife():
#    name = "刘亦菲"
#    age = 18
#    def __init__(self,name,age):
#        self.name = name
#        self.age = age


#    def family(self,husband):
#        self.husband = husband
#        #Student.name = name


#yifei = Wife("yifei",18)
#print(yifei.name)
#print(yifei.age)
#yifei.family("lifei")
#print(yifei.husband)
#print(Wife.name)
#print("*"*10)
#print(yifei.__class__.name)
#print(yifei.__class__.age)






#class A():
#    name = "liuyifei"
#    age = 18


#    def __init__(self):
#        self.name = "aaa"
#        self.age = 100
#    def sing(self):
#        print("我的名字是{0},今年{1}岁了!".format(self.name,self.age))




#class B():
#    name = "lifei"
#    age = 18


#a = A()
#print(a.name)
#print(a.age)
#a.sing()
#A.sing(A)
#print("*"*10)
#A.sing(B)








#私有变量,公有变量
#class Person():
#    #name是公有变量
#    name = "feifei"
#    #__age是私有变量
#    __age = 18


#P = Person()
#print(P.name)
#print(P._Person__age)
#P._Person__age = 20
#print(P._Person__age)




#封装




#继承
#class A():
#    name = "liuyifei"           #公有变量
#    __age = 18                  #私有变量
#    _petname = "xixi"           #受保护的,但不能公用
#    def __init__(self):
#        #self.name = "aaa"
#        #self.age = 100
#        pass
#    def __work(self):           #私有方法
#        self.work = "actor"


#    def sing(self):
#        print("我的名字是{0},今年{1}岁了!".format(self.name,self.__age))




#class B(A):
#    def sing(self):
#        #A.sing(self)                #方法扩展
#        #super().sing()
#        print("hello")               #如果没有上面两个中的一个,则为方法重写
#    pass


#b = B()
#print(b.name)
#print(b._A__age)
#b.sing()
#print(B.name)
#print(b._petname)
#b._A__work()
#print(b.work)










#class Fish():
#    def __init__(self,name):
#        self.name = name
#    def swim(self):
#        print("i am swiming...")
#class Bird():
#    def __init__(self,name):
#        self.name = name
#    def fly(self):
#        print("i am flying...")
#class Person():
#    def __init__(self,name):
#        self.name = name
#    def work(self):
#        print("i am working...")


##单继承
#class Student(Person):
#    def __init__(self,name):
#        self.name = name
#    def study(self):
#        print("i am studying...")




##多继承
#class SuperMan(Person,Bird,Fish):
#    def __init__(self,name):
#        self.name = name
#class SwimMan(Person,Fish):
#    def __init__(self,name):
#        self.name = name


#st = Student("feifei")
#st.study()
#st.work()
#print("*"*20)
#s = SuperMan("yifei")
#s.fly()
#s.swim()
#s.work()




#构造函数自动调用
#class A():
#    '''
#    构造函数自动调用
#    '''
#    def __init__(self,name):
#        self.name = "yiffei" 
#        self.age = 18
#        print("IN init func")
#class B(A):
#    #def __init__(self,name):
#        #print("B")
#        #print(name)
#        pass


#class C(B):
#    def __init__(self,name):
#        B.__init__(self,name)
#        print("wo shi c")
#c = C("woshicccc")
#b = B("wwww")




#Mixin案例
#class Person():
#    name = "liuyifei"
#    age = 18
#    def eat(self):
#        print("eating....")
#    def drink(self):
#        print("drinking.....")
#    def sleep(self):
#        print("sleeping...")


#class Teacher(Person):
#    def work(self):
#        print("working.....")
#class Student(Person):
#    def study(self):
#        print("studying....")
#class Tutor(Teacher,Student):
#    pass


#t = Tutor()
#print(Tutor.__mro__)
#print(t.__dict__)
#print(Tutor.__dict__)


#print("*"*20)


#class TeacherMixin():
#    def work(self):
#        print("work")
#class StudentMixin():
#    def study(self):
#        print("study")
#class TutorMixin(Person,TeacherMixin,StudentMixin):
#    pass












#定义一个Person类,具有name,age属性
#对于任意输入的姓名,我们希望都用大写方式保存
#年龄,我们希望内部同一用整数保存
#x = property(fget,fset,fdel,doc)
#class Person():
#    '''
#    这是一个关于人的类
#    '''
#    #函数的名称可以任意
#    def fget(self):
#        return self._name
#    def fget1(self):
#        return self._age
#    def fset(self,name):
#        #所有输入的姓名以大写形式保存
#        self._name = name.upper()               
#    def fset1(self,age):
#        #所有输入的年龄以整数保存
#        self._age = int(age)
#    def fdel(self):
#        self._name = "NoName"
#        self._age = 100


#    name = property(fget, fset, fdel, "对name进行如下操作")
#    age = property(fget1, fset1, fdel, "对age进行如下操作")
#p1 = Person()


#p1.name = "feifei"
#p1.age = 18.7
#print(p1.__dict__)
#print(p1._name)
#print(p1._age)
#print(Person.__doc__)
#print(Person.__name__)
#print(Person.__bases__)






#__getattr__案例
#class A():
#    name = "feifei"
#    age = 11
#    def __getattr__(self,name):
#        #print("NO attr")
#        #print(name)
#        return "NO attr",name


#a = A()
#print(a.name)
#print(a.addr)






#__setattr__案例
#class A():
#    def __init__(self):
#        pass
#    def __setattr__(self, name, value):
#        print("设置属性:{0}".format(name))
#        #下面语句会导致问题,死循环
#        #self.name = value
#        #此种情况,为了避免死循环,规定统一调用父类魔法函数
#        super().__setattr__(name, value)
#a = A()
#print(a.__dict__)
#a.age = 18




#__gt__案例
#class Student():
#    def __init__(self, name):
#        self._name = name
#    def __gt__(self, obj):
#        #print("哈哈,{0}会比{1}大吗?".format(self, obj.))
#        print("哈哈,{0}会比{1}大吗?".format(self._name, obj._name))
#        return self._name > obj._name
#stu1 = Student("one")
#stu2 = Student("two")
#print(stu1 > stu2)






#class Person():
#    def eat(self):
#        print(self)
#        print("Eating")


#    @classmethod
#    def play(cls):
#        print(cls)
#        print("Playing...")
#    @staticmethod
#    def say():
#        print("Saying...")


#feifei = Person()
#feifei.eat()
#Person.play()
#feifei.play()
#Person.say()
#feifei.say()






#class A():
#    def __init__(self):
#        self.name = "feifei"
#        self.age = 18
#a = A()
#a.name = "feifeiiei"
#print(a.name)
#del a.name
##print(a.name)








#class A():
#    def __init__(self):
#        self.name = "feifei"
#        self.age =18
#    def fget(self):
#        print("我被读取了")
#        return self.name
#    def fset(self, name):
#        print("我被写入了,但是还可以做好多事情")
#        self.name = "飞飞" + name
#    def fdel(self):
#        pass
#    name2 = property(fget, fset, fdel, "这是一个property的例子")


#a = A()
#print(a.name)
#print(a.name2)








#class A():
#    def __init__(self):
#        self.name = "feifei"
#        self.age =18
#    def fget(self):
#        print("我被读取了")
#        return self.name
#    def fset(self, name):
#        print("我被写入了,但是还可以做好多事情")
#        self.name = "飞飞" + name
#    def fdel(self):
#        pass
#    name2 = property(fget, fset, fdel, "这是一个property的例子")


#a = A()
#print(a.name)
#print(a.name2)










##抽象类的实现
#import abc
##声明一个类并且指定当前类的元类
#class Human(metaclass = abc.ABCMeta):
#    #定义一个抽象的方法
#    @abc.abstractmethod
#    def smoking(self):
#        pass
#    #定义类抽象方法
#    @abc.abstractclassmethod
#    def drink():
#        pass
#    #定义静态抽象方法
#    @abc.abstractstaticmethod
#    def play():
#        pass
#    def sleep(self):
#        print("Sleeping....")










##自己组装一个类
#class A():
#    pass
#def say(self):
#    print("Saying....")
#say(9)
#A.say = say
#a = A()
#a.say()










##例子-2
##自己组装一个类
#from types import MethodType
#class A():
#    pass
#def say(self):
#    print("Saying....")


#a = A()
#a.say = MethodType(say,A)
#a.say()








##利用type制造一个类


##先定义类应该具有的成员函数
#def say(self):
#    print("Saying....")
#def talk(self):
#    print("Talking...")
##用type来创建一个类
#A = type("AName", (object, ), {"class_say":say, "class_talk":talk})
##然后可以像正常访问一样使用类
#a = A()
#a.class_say()
#a.class_talk()








##元类演示
##元类写法是固定的,它必须继承自type
##元类一般命名以MetaClass结尾
#class TulingMetaClass(type):
#    #注意以下写法
#    def __new__(cls, name, bases, attrs):
#        #自己的业务处理
#        print("哈哈,我是元类")
#        attrs['id'] = '000000'
#        attrs['addr'] = "北京海淀区公主坟西翠路12号"
#        return type.__new__(cls, name, bases, attrs)
##元类定义完就可以使用,使用注意写法
#class Teacher(object, metaclass=TulingMetaClass):
#    pass
#t = Teacher()
#print(t.id)
#print(t.addr)
#print(t.__dict__)






#写一个模块
#包含一个学生类
#一个sayHello函数
#一个打印语句
#class Student():
#    def __init__(self, name="NoName", age=19):
#        self.name = name
#        self.age = age 
#    def intd(self):
#        print("My name is {0},{1} years old".format(self.name,self.age))
#def sayHello():
#    print("Hi,welcome!")
##此判断语句建议一直作为程序的入口
#if __name__ == '__main__':
#    print("我是模块Student")








#异常处理
#try:
#    num = int(input("Plz input your number:"))
#    rst = 100/num
#    print("计算结果是{0}".format(rst))
#except ZeroDivisionError as e:
#    print("输入错了")
#    print(e)
#    exit()
#except NameError as e:
#    print("名字起错了")
#    print(e)
#    exit()
#except AttributeError as e:
#    print("好像属性问题")
#    print(e)
#    exit()
#except ValueError as e:
#    print("值错误")
#    print(e)
#    exit()
##下面这句话是最后一个错误exception
#except Exception as e:
#    print("我也不知道")
#    print(e)
#else:
#    print("good!")
#finally:
#    print("牛逼")






##用户手动触发异常
##当某些情况,用户希望自己引发一个异常的时候,可以使用
##raise关键字来引发异常
#try:
#    print("hello!")
#    print("guys")
#    #手动引发一个Name异常
#    #注意语法:raise ErrorClassName
#    raise NameError('HiThere')
#except NameError:
#    print('An exception flew by!')
#    #raise
#except ValueError as e:
#    print("ValueError")
#except Exception as e:
#    print("有异常")
#else:
#    print("All right")
#finally:
#    print("I am coming")






##案例2
##自己定义异常
##需要注意:自定义异常必须是系统资产的子类
#class FlyNameError(NameError):
#    pass
#try:
#    print("hello!")
#    print("guys")
#    #手动引发一个Name异常
#    #注意语法:raise ErrorClassName
#    raise FlyNameError('HiThere')
#except NameError:
#    print('NameError')
#    #raise
#except FlyNameError as e:
#    print("FlyNameError")
#except ValueError as e:
#    print("ValueError")
#except Exception as e:
#    print("有异常")
#else:
#    print("All right")
#finally:
#    print("I am coming")






#####常用模块
##calendar
#import calendar
##calendar:获取一年的日历字符创
##参数
##w = 每个日期之间的间隔字符数
##l = 每周所占用的行数
##c = 每个月之间的间隔字符数
#cal = calendar.calendar(2018)
#print(type(cal))
##print(cal)
#cal = calendar.calendar(2018,w=1,l=0,c=10)
#print(cal)
##isleap:获取某一年是否闰年
#calendar.isleap(2000)
##leapdays:获取指定年份之间的闰年的个数
#calendar.leapdays(1998,2018)
##mouth():获取某个月的日历字符串
##格式:calendar.month(年,月)
##返回值:月日历的字符串
#m3 = calendar.month(2018,3)
#print(m3)
##monthrange():获取一个月的周几开始和天数
##格式:calendar.monthrange(年,月)
##返回值:元组(周几开始,总天数)
##注意:周默认0-6表示周一到周日
#t = calendar.monthrange(2018,5)
#print(t)
##monthcalendar():返回一个月每天的矩阵列表
##格式:calendar.monthcalendar(年,月)
##返回值:二级列表
##注意:矩阵中没有天数用0表示
#m = calendar.monthcalendar(2018,5)
#print(m)
##prcal:print calendar直接打印日
#calendar.prcal(208)
##prmonth():直接打印整个月的日历
##格式:calendar》prmonth(年,月)
##返回值:无
#calendar.prmonth(2018,5)
##time模块
##时间戳
##UTC时间
##夏令时
##时间元组:包含时间内容的普通元组






#import time
##时间模块的属性
##timeone:当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区是-28800
##altzone:获取当前时区与UTC时间相差的秒数,在有夏令时的情况下,东八区是-32400
##daylight:测当前是否是夏令时的时间状态
##print(time.timezone)
##print(time.altzone)
##print(time.daylight)
##得到时间戳
##print(time.time())
##localtime,得到当前时间的时间结构
##可以通过点操作得到相应的属性元素的内容
##t = time.localtime()
##print(t)
##asctime():返回元祖的正常字符化之后的时间格式
##格式:time.asctime(时间元组)
##返回值:字符串 Sat May 19 17:53:31 2018
##tt = time.asctime(t)
##print(tt)
##print(type(tt))
##ctime:获取字符串化的当前时间
##t1 = time.ctime()
##print(t1)
##mktime():使用时间元组获取对应的时间戳
##格式:time.mktime(时间元组)
##返回值:浮点数时间戳
##t2 = time.localtime()
##t3 = time.mktime(t2)
##print(t3)
##clock:获取cpu时间,3.0-3.3版本直接使用,3.6调用有问题
##sleep:是程序进入休眠状态,n秒之后继续
##for i in range(10):
##    print(i)
##    time.sleep(1)
#'''def p():
#    time.sleep(2.5)
#t0 = time.clock()
##p()
#time.sleep(3)
#t1 = time.clock()
#print(t1 - t0)'''


##strftime:将时间元组转化为自定义的字符串格式
##把时间表示成 2018 5.19 18:11
#t = time.localtime()
#ft = time.strftime("%Y%m%d %H:%M", t)
#print(ft)






##datetime模块
##-datetime提供日期和时间的运算和表示
#import datetime
##datetime常见属性
##datetime.date: 一个理想化的日期,提供year,month,day属性
#'''t = datetime.date(2018,5,19)
#print(t)
#print(t.year)
#print(t.month)
#print(t.day)'''


##datetime.time:提供一个理想化的时间,提供hour,minute,second,microsecond等内容
#'''t1 = datetime.time(18,39,30,20)
#print(t1)
#print(t1.hour)
#print(t1.minute)
#print(t1.second)
#print(t1.microsecond)'''


##datetime.datetime:提供日期跟时间的结合
#from datetime import datetime
##常用类方法
##today
##now
##utcnow
##fromtimestamp
#'''dt = datetime(2018,5,19)
#print(dt.today())
#print(dt.now())
#print(dt.utcnow())'''


##datetime.timedelta:提供一个时间差,时间长度
#from datetime import datetime,timedelta
##t3 = datetime.now()
##print(t3)
##print(t3.strftime("%Y-%m-%d %H:%M:%S"))
##t4 = timedelta(hours = 1)
##当前时间加上时间间隔后,把得到的一个小时后的时间格式化输出
##print((t3+t4).strftime("%Y-%m-%d %H:%M:%S"))
##timeit:时间测量工具
##测量程序运行时间间隔实验
#'''def p():
#    time.sleep(3)
#t1 = time.time()
#p()
#print(time.time() - t1)'''


##生成列表两种方法的比较
##如果单纯生成一个列表的时间,可能很难实现
#import timeit
#'''
#c = '''
#sum = []
#for i in range(1000):
#    sum.append(i)
#'''
##利用timeit调用代码,执行10000次,查看运行时间
#t1 = timeit.timeit(stmt="[i for i in range(1000)]",number=10000)
##测量代码c执行10000次运行的结果
#t2 = timeit.timeit(stmt=c,number=10000)
#print(t1)
#print(t2)
#'''


##timeit 可以执行一个函数,来测量一个函数的执行时间
#'''
#f doIt():
#    num = 3
#    for i in range(num):
#        print("Repeat for {0}".format(i))
##执行函数,重复10次
#t = timeit.timeit(stmt=doIt,number=10)
#print(t)
#'''
#s = '''
#def doIt():
#    num = 3
#    for i in range(num):
#        print("Repeat for {0}".format(i))
#'''
##执行doIt(num)
##setup负责把环境变量准备好
##实际相当于给timeit创造了一个小环境
##在创造的小环境中,代码执行的顺序大致是:
##def doIt(num):
##    ....
##num = 3
##doIt(num)
#t = timeit.timeit("doIt()",setup=s+"num=3",number=10)
#print(t)






#os-操作系统相关
#主要是文件操作
#和操作系统相关的操作,主要包含三个模块
    #-os,操作系统目录相关
    #-os.path,系统路径相关操作
    #-shutil,高级文件操作,目录树的操作,文件赋值,删除,移动
#-路径:
    #-决定路径:总是从根目录上开始
    #-相对路径:基本上以当前环境为开始的一个相对的地方
#os模块
    #getcwd():获取当前的工作目录
    #格式:os.getcwd()
    #返回值:当前工作目录的字符串
        #当前工作目录就是程序在进行文件相关操作,默认查找文件的目录
'''
import os
mydir = os.getcwd()
print(mydir)
'''
    #chdir():改变当前的工作目录
    #change directory
    #格式:os.chdir(路径)
    #返回值:无
'''
os.chdir('C:/Users/lee')
mydir = os.getcwd()
print(mydir)
'''


    #listdir():获取一个目录中所有子目录和文件的名称列表
    #格式:os.listdir(路径)
    #返回值:所有子目录和文件名称的列表
'''
ld = os.listdir()
print(ld)
'''


    #makedirs():递归创建文件夹
    #格式:os.makedirs(递归路径)
    #返回值:无
    #递归路径:多个文件夹层层包含的路径就是递归路径,例如:a/b/c...
'''    
rst = os.makedirs("liuyifei")
print(rst)
'''
'''
rstr = os.removedirs("liuyifei")
print(rstr)
'''


    #system():运行系统shell命令
    #格式:os.system(系统命令)
    #返回值:打开一个shell或者终端界面
    #一般推荐使用subprocess模块代替
'''
rst = os.system("dir")
print(rst)
'''


    #getenv():获取指定的系统环境变量值
    #格式:os.getenv('环境变量名')
    #返回值:指定环境变量名对应的值
'''   
rst = os.getenv('PATH')
print(rst)
'''


#值部分
#-os.curdir:current dir:当前目录
#-os.pardir:parent dir:父目录
#-os.sep:当前系统的路径分隔符
    #-windows:"\"
    #-linux:"/"
#-os.linesep:当前系统的换行符号
    #-windows:"\r\n"
    #-unix,linux,macos:"\n"
#-os.name:当前系统的名称
    #-windows:nt
    #-linux,mac,unix:posix
#print(os.curdir)
#print(os.pardir)
#print(os.sep)
#print(os.linesep)
#print(os.name)








#os.path 模块,跟路径相关的模块
#import os.path as op
#abspath():将路径转化为绝对路径
#格式:os.path.abspath('路径')
#返回值:路径的绝对路劲形式


#linux中:
#. 点,代表当前路径
#.. 双点,代表父目录
'''
absp = op.abspath(".")
print(absp)
abspf = op.abspath("..")
print(abspf)
'''


#basename():获取路径中的文件名部分
#格式:os.path.basename(路径)
#返回值:文件名字符串
'''
bn = op.basename("C:/Users/lee")
print(bn)
'''


#join():将多个路径拼合成一个路径
#格式:os.path.join(路径1,路径2,...)
#返回值:组合之后的新路径字符串
#bd = "/home/tlxy"
#fn = "dana.haha"
#p = op.join(bd,fn)
#print(p)
#>>>/home/tlxy/dana.haha


#spilt():将路径切割为文件夹部分和当前文件部分
#格式:os.path.spilt(路径)
#返回值:路径和文件名组成的元组
#t = op.split("/home/tlxy/dana.haha")
#print(t)
#>>>('home/tlxy','dana.haha')
#d,p = split("/home/tlxy/dana.haha")
#print(d,p)
#>>>/home/tlxy  dana.haha


#isdir():检测是否是目录
#格式:os.path.isdir(路径)
#返回值:布尔值
#rst = op.isdir("C:/Users/lee")
#print(rst)
#>>>True
#rst = op.isdir("Users/lee")
#print(rst)
#>>>False


#exists():检测文件或者目录是否存在
#格式:os.path.exists(路径)
#返回值:布尔值
#e = op.exists("C:/Users/lee")
#print(e)
#>>>True
#e = op.exists("Users/lee")
#print(e)
#>>>False






#shutil模块
#import shutil


#copy():复制文件
#格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#拷贝的同时,可以给文件重命名


#rst = shutil.copy("/home/tlxy/dana.haha","/home/tlxy/haha.haha")
#print(rst)
#>>>/home/tlxy/haha.haha


#copy2():复制文件,保留元数据(文件信息)
#格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#注意:copy()和copy2()的唯一区别在于copy2复制文件时尽量保留元数据


#copyfile():将一个文件中的内容复制到另外一个文件当中
#格式:shutil.copyfile('源路径','目标路径')
#返回值:无
#rst = shuil,copyfile("dana.haha","haha.haha")
#print(rst)
#>>>haha.haha----->源文件中的内容被写入目标路径文件中


#move():移动文件/文件夹
#格式:shutil.move(源路径,目标路径)
#返回值:目标路径
#rst = shutil.move("/home/tlxy/dana.haha","home/tlxy/dana")
#print(rst)
#>>>/home/tlxy/dana/dana.haha






#归档和压缩
#-归档:把多个文件或者文件夹合并到一个文件当中
#-压缩:用算法把多个文件或者文件夹无损或者有损合并到一个文件当中


#make_archive():归档操作
#格式:shutil.make_archive('归档之后的目录和文件名','后缀','需要归档的文件夹')
#返回值:归档之后的地址
#rst = shutil.make_archive("/home/tlxy/tuling","zip","/home/tlxy/dana")
#print(rst)
#>>>/home/tlxy/tuling.zip


#unpack_archive():解包操作
#格式:shutil.unpack_archive('归档文件地址','解包之后的地址')
#返回值:解包之后的地址






#zip-压缩包
#import zipfile
#-模块名称叫做 zipfile
#zipfile.ZipFile(file[,mode[,comression[,allowZip64]]])
#创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,’w’表示新建一个zip文档或覆盖一个已经存在的zip文档,’a’表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
#zf = zipfile.ZipFile("/home/tlxy/tuling.zip")


#ZipFile.getinfo(name):
#获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。
#rst = zf.getinfo("dana.haha")
#print(rst)


#ZipFile.namelist()
#获取zip文档内所有文件的名称列表。
#nl = zf.namelist()
#print(nl)
#>>>['haha.haha','2-oop.ipynb','dana.haha']


#ZipFile.extractall([path[,members[,pwd]]])
#解压zip文档中所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。


#rst = zf.extractall("/home/tlxy/dana")
#print(rst)






#random
#-随机数
#-所有的随机模块都是伪随机
#random():获取0-1之间的随机小数
#格式:random.random()
#返回值:随机0-1之间的小数(不包括0和1)
#import random
#import math
#print(int(random.random()*100))


#随机生成0-100之间的整数
'''
ls = []
for i in range(200):
    import math
    ls.append(math.floor(random.random()*100))
print(ls)
'''
#choice():随机返回序列中的某个值
#格式:random.choice()
#返回值:序列中的某个值
#l = [str(i)+"haha" for i in range(10)]
#print(l)
#rst = random.choice(l)
#print(rst)


#shuffle():随机打乱列表
#格式:random.shuffle(列表)
#返回值:打乱顺序之后的列表
'''
l = [i for i in range(10)]
print(l)
random.shuffle(l)
print(l)
'''


#randint(a,b):返回一个a-b之间的随机整数包含a和b
#print(random.randint(0,100))









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值