python_new
  • Introduction
  • First Chapter
  • 一、python基础
    • 1.1 常识
      • sys
    • 1.2 基础语法(1)
    • 1.2 基础语法(2)
    • 1.3 常见问题求解
    • 1.4 算法
  • 二、爬虫
    • urllib库(1)
      • urllib库(2)
    • requests模块(1)
      • requests模块(2)
    • 2.1 爬虫基础(3)HTTP原理
    • 2.1 爬虫基础(4)会话和Cookies
    • 2.1 爬虫基础(5)数据存储
      • Mysql存储
      • MongoDB存储
      • Redis存储
    • 2.3 正则表达式
    • 2.4 解析库lxml
      • BeautifulSoup
      • pyquery(1)
      • pyquery(2)
    • 2.5 selenium(1)
    • 2.5 seleium(2)
    • 2.6 Json
    • 2.7 scrapy
      • scrapy(2)
    • 2.9 异步加载
    • 2.6 Splash
  • ORM框架
    • SQLAlchemy
  • Django
    • 1、初阶(一)
    • 初学:投票教程(一)
    • 初学:投票教程(二)
    • 初学:投票教程(三)
    • 初学:投票教程(总结)
    • 模型(一)
    • 模型(二)
    • 视图(一)
    • 视图(二)
    • 模板(一)
    • django实际使用笔记
  • 面试题收集总结
    • 数据结构原理
    • 算法篇
      • 排序
    • 题目篇
  • python数据分析
    • 基础了解(一)
    • 基础了解(二)
    • 基础了解(三)
  • 多线程
  • 深度学习
    • 疑问
  • keras(一)
  • 神经网络
  • 图像识别
  • Docker
    • 一、基础了解
Powered by GitBook
On this page

Was this helpful?

  1. 一、python基础

1.3 常见问题求解

1、斐波拉契数列

def febo(num):
    list_ = []
    i = 1
    j = 0
    while len(list_) < num:
        list_.append(i)
        i, j = i + j, i
    return list_
class Febo:
    def __init__(self):
        self.i = 1
        self.j = 0
        self.times = 0
    def __iter__(self):
        return self

    def __next__(self):
        self.times += 1
        self.i,self.j = self.i+self.j, self.i
        return self.j

2、浅拷贝和深拷贝

  • 浅拷贝仅仅复制了容器中元素的地址

>>> a=['hello',[1,2,3]]
>>> b=a[:]
>>> [id(x) for x in a]
[55792504, 6444104]
>>> [id(x) for x in b]
[55792504, 6444104]
>>> a[0]='world'
>>> a[1].append(4)
>>> print(a)
['world', [1, 2, 3, 4]]
>>> print(b)
['hello', [1, 2, 3, 4]]

这里可以看出,未修改前,a和b中元素的地址都是相同的,不可变的hello 。和可变的list地址都一样,说明浅拷贝知识将容器内的元素的地址复制了一份。这可以通过修改后,b中字符串没改变,但是list元素随着a相应改变得到验证。(新瓶装旧酒)

  • 深拷贝,完全拷贝了一个副本,容器内部元素地址都不一样

>>> from copy import deepcopy
>>> a=['hello',[1,2,3]]
>>> b=deepcopy(a)
>>> [id(x) for x in a]
[55792504, 55645000]
>>> [id(x) for x in b]
[55792504, 58338824]
>>> a[0]='world'
>>> a[1].append(4)
>>> 
>>> print(a)
['world', [1, 2, 3, 4]]
>>> print(b)
['hello', [1, 2, 3]]

这里可以看出,深拷贝后,a和b的地址以及a和b中的元素地址均不同,这是完全拷贝的一个副本,修改a后,发现b没有发生任何改变,因为b是一个完全的副本,元素地址与a均不同,a修改不影响b。(新瓶装新酒)

3、列表当队列、栈

stack = []
for x in range(1,6):
    stack.append(x)   # 入栈
    print('push', x, end=' ')
    print(stack)

print('Now stack is', stack)

while len(stack)>0:
    print('pop', stack.pop(), end=' ') # 出栈
    print(stack)
from collections import deque
queue = deque()       # 创建空队列
for x in range(1,6):
    queue.append(x)   # 入队
    print('push', x, end=' ')
    print(list(queue))

print('Now queue is', list(queue))

while len(queue)>0:
    print('pop', queue.popleft(), end=' ')  # 出队
    print(list(queue))

4、单例模式

每个类只有一个实例存在

  • 使用模块

  • 使用初始化方法(看不懂,不会无限迭代吗?)

class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kw):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)  
        return cls._instance  

class MyClass(Singleton):  
    a = 1

5、全局变量

global 和 globals() 是不同的,global 是关键字用来声明一个局部变量为全局变量。globals() 和 locals() 提供了基于字典的访问全局和局部变量的方式

快速排序

深度遍历、广度遍历

时间复杂度

求解质数

鸭子模式

文件I/O(输入输出)

Previous1.2 基础语法(2)Next1.4 算法

Last updated 5 years ago

Was this helpful?