python 练习--知识点复习

来源:互联网 发布:java 延时10秒 编辑:程序博客网 时间:2024/05/21 10:48
# 41行——重要知识点# a = 1# def fun(a):#     a = 2# print(a)      #1# a = []# def fun(a):#     a.append(1)# fun(a)# print(a)  # [1]#python 中的类本身也是一个对象# class ObjectCreator(object):#     pass# print(type(1))# print(type("1"))# print(type(ObjectCreator))# print(type(ObjectCreator()))# ObjectCreator = type('ObjectCreator', (), {})# print(type(ObjectCreator))# print(type(ObjectCreator()))# example_1与2等价# class Foo(object):#     bar = True# example 2 # Foo = type('Foo', (), {'bar' : True})# def echo_bar(self):#     print(self.bar)# SubFoo = type('SubFoo', (Foo, ), {'echo_bar': echo_bar})# SubFoo().echo_bar()# class Person(object):#     name = "aaa"# p1 = Person()# p2 = Person()# p1.name = "bbb"# print(p1.name)# print(p2.name)# print(Person.name)# Person.name = "111"# print(p1.name)# print(p2.name)# print(Person.name)# class Person(object):#     name = []# p1 = Person()# p2 = Person()# p1.name.append(1)# print(p1.name)# print(p2.name)# print(Person.name)# Python自省# 自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.# 简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance().# class MyClass(object):#     def __init__(self):#         self._name = "private"#         self.__name = "__MyClass__private"# mc = MyClass()# print(mc._name)# print(mc._MyClass__name)# print(mc.__name)# #迭代器# mylist = [x*x for x in range(3)]# print(mylist)# #特殊的迭代器(生成器)# mylist = (x*x for x in range(3))# print(mylist)# for i in mylist:#     print(i)# 新式类和旧式类# 1)首先,写法不一样:# class A:#     pass# class B(object):#     pass# 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。# 3)新式类更符合OOP编程思想,统一了python中的类型机制。# 单例模式# 1、使用模块# 写成两个文件,在一个文件引入模块,python模块默认是单例的# 2、__new__# class Singleton(object):#     _singleton = None#     def __new__(cls, *k, **kw):#         if cls._singleton is None:#             cls._singleton = super(Singleton, cls).__new__(cls, *k, *kw)#         return Singleton._singleton# s1 = Singleton()# s2 = Singleton()# print(s1 is s2)# 3、使用装饰器# def singleton(cls, *k, **kw):#     instances = {}#     def getinstance():#         if cls not in instances:#             instances[cls] = cls(*k , **kw)#         return instances[cls]#     return getinstance# @singleton# class MyClass(object):#     pass# print(MyClass() is MyClass())# 4、使用metaclass# class Singleton(type):#     _singleton = None#     def __call__(cls, *k, **kw):#         if cls._singleton is None:#             _singleton = super(Singleton, cls).__call__(*k, **kw)#         return cls._singleton# class MyClass(metaclass = Singleton):#     pass# print(MyClass() is MyClass())# unix进程间通信方式(IPC)# 管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。# 命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。#     命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。# 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;#     linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,#     BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。# 消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,#     被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺# 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,#     如信号量结合使用,来达到进程间的同步及互斥。# 内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间#     来实现它。# 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。# 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,#     但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。# 1 台阶问题/斐波纳挈# 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。# fibonacci = lambda n: n if n <= 2 else fibonacci(n - 2) + fibonacci(n - 1)# print(fibonacci(10))# def fibonacci(n):#     x, y = 0, 1#     for i in range(n):#         x, y = y, x + y#     return y# print(fibonacci(10))# def memo(func):#     d = {}#     def wrap(*args):#         if args not in d:#             d[args] = func(*args)#         return d[args]#     return wrap# @memo# def fibonacci(n):#     if n < 2:#         return 1#     return fibonacci(n - 1) + fibonacci(n - 2)# print(fibonacci(10)) # 2 变态台阶问题# 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。# func = lambda n: 2**(n-1)# print(func(10))# 3 二分查找# def binarySearch(L, num):#     left, right = 0, len(L) - 1#     while left <= right:#         mid = (right - left)//2 + left#         if L[mid] < num:#             left = mid + 1#         elif L[mid] > num:#             right = mid - 1#         else:#             return mid#     return False# L = [11, 13, 19, 23, 48, 54, 111, 222]# print(binarySearch(L, 222))

原创粉丝点击