精华内容
下载资源
问答
  • 包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。 对spider来说,爬取的循环类似下文: 以...

    Spider 类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。

    对spider来说,爬取的循环类似下文:

    1. 以初始的URL初始化Request,并设置回调函数。 当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。

    spider中初始的request是通过调用 start_requests()来获取的。 start_requests() 读取 start_urls 中的URL,并以parse 为回调函数生成 Request。

    1. 在回调函数内分析返回的(网页)内容,返回 Item 对象或者 Request 或者一个包括二者的可迭代容器。 返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。
    2. 在回调函数内,您可以使用 选择器(Selectors) (您也可以使用BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成item。
    3. 最后,由spider返回的item将被存到数据库(由某些 Item Pipeline处理)或使用 Feed exports存入到文件中。

    虽然该循环对任何类型的spider都(多少)适用,但Scrapy仍然为了不同的需求提供了多种默认spider。 之后将讨论这些spider。

    Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

    https://space.bilibili.com/523606542

    Python学习交流群:1039649593

    Spider

    scrapy.spider.Spider 是最简单的spider。每个其他的spider必须继承自该类(包括Scrapy自带的其他spider以及您自己编写的spider)。 其仅仅请求给定的 start_urls / start_requests ,并根据返回的结果(resulting responses)调用 spider 的 parse 方法。

    name

    定义 spider 名字的字符串(string)。spider 的名字定义了 Scrapy 如何定位(并初始化) spider ,所以其必须是唯一的。不过您可以生成多个相同的 spider 实例(instance),这没有任何限制。 name 是 spider 最重要的属性,而且是必须的。

    如果该 spider 爬取单个网站(single domain),一个常见的做法是以该网站(domain)(加或不加后缀 )来命名 spider 。 例如,如果 spider 爬取 mywebsite.com ,该spider通常会被命名为 mywebsite 。

    allowed_domains

    可选。包含了spider允许爬取的域名(domain)列表(list)。 当 OwsiteMiddleware 启用时, 域名不在列表中的URL不会被跟进。

    start_urls

    URL 列表。当没有制定特定的 URL 时,spider 将从该列表中开始进行爬取。 因此,第一个被获取到的页面的 URL 将是该列表之一。 后续的 URL 将会从获取到的数据中提取。

    start_requests()

    该方法必须返回一个可迭代对象(iterable)。该对象包含了spider用于爬取的第一个 Request。

    当 spider 启动爬取并且未制定 URL 时,该方法被调用。 当指定了URL时,make_requests_from_url() 将被调用来创建Request 对象。 该方法仅仅会被 Scrapy 调用一次,因此您可以将其实现为生成器。

    该方法的默认实现是使用 start_urls 的url生成 Request。

    如果您想要修改最初爬取某个网站的Request对象,您可以重写(override)该方法。 例如,如果您需要在启动时以POST 登录某个网站,你可以这么写:

    def start_requests(self): 
      return [scrapy.FormRequest("http://www.example.com/login",
                                 formdata={'user': 'john', 'pass': 'secret'}, 
                                 callback=self.logged_in)] 
    
    def logged_in(self, response): 
    ## here you would extract links to follow and return Requests for 
    ## each of them, with another callback 
      pass

    parse

    当response没有指定回调函数时,该方法是Scrapy处理下载的response的默认方法。

    parse 负责处理response并返回处理的数据以及(/或)跟进的URL。 Spider 对其他的Request的回调函数也有相同的要求。

    该方法及其他的Request回调函数必须返回一个包含 Request 及(或) Item 的可迭代的对象。

    参数: response– 用于分析的response

    closed(reason)

    当spider关闭时,该函数被调用。

    启动方式

    start_urls

    start_urls 是一个列表

    start_requests

    使用 start_requests() 重写 start_urls ,要使用 Request() 方法自己发送请求:

    def start_requests(self): 
      """重写 start_urls 规则""" 
      yield scrapy.Request(url='http://quotes.toscrape.com/page/1/', callback=self.parse)

    scrapy.Request

    scrapy.Request 是一个请求对象,创建时必须制定回调函数。

    数据保存

    可以使用 -o 将数据保存为常见的格式(根据后缀名保存)

    支持的格式有下面几种:

    • json
    • jsonlines
    • jl
    • csv
    • xml
    • marshal
    • pickle

    案例:Spider 样例

    让我们来看一个例子:

    ## -*- coding: utf-8 -*- 
    import scrapy 
    
    class Quotes2Spider(scrapy.Spider): 
      name = 'quotes2' 
      allowed_domains = ['toscrape.com'] 
      start_urls = ['http://quotes.toscrape.com/page/2/'] 
      def parse(self, response): 
        quotes = response.css('.quote')
        for quote in quotes: 
          text = quote.css('.text::text').extract_first() 
          auth = quote.css('.author::text').extract_first() 
          tages = quote.css('.tags a::text').extract() 
          yield dict(text=text,auth=auth,tages=tages)

    url拼接

    import urllib.parse 
    urllib.parse.urljoin('http://quotes.toscrape.com/', '/page/2/') 
    Out[6]: 'http://quotes.toscrape.com/page/2/' 
    urllib.parse.urljoin('http://quotes.toscrape.com/page/2/', '/page/3/') 
    Out[7]: 'http://quotes.toscrape.com/page/3/'
    展开全文
  • for i in range(5000):#生成随机个小方块 map[randint(0,nh-1)][randint(0,nw-1)]=1 def change(): global map tmap=copy.deepcopy(map) for y in range(0,nh): for x in range(0,nw): n = 0#周围...
  • Python 的基本数据类型 字符串的编码问题 基本数据类型转换 Python 中的变量 List 和 Tuple List(列表) tuple(元组) Dict 和 Set 字典(Dictionary) set 条件语句和循环语句 条件语句 循环语句 条件...
  • 来自[七月在线培训]第一课 Python编程速成一、主要涉及以下几个模块(初级介绍): 1、判断 2、循环 3、容器,列表推倒和生成器 4、面向对象 5、异常处理 6、文件读写 7、json处理 ​ 二、常见库的安装和学习...

    来自[七月在线培训]

    第一课 Python编程速成

    一、主要涉及以下几个模块(初级介绍):
    1、判断
    2、循环
    3、容器,列表推倒和生成器
    4、面向对象
    5、异常处理
    6、文件读写
    7、json处理

    二、常见库的安装和学习
    8、Nupmy的介绍及案例
    9、pandas的介绍和案列
    10、Matplotlib绘图速成
    11、SciPy简介

    三、推荐获取数据的途径及教程


    一、几个常用模块介绍


    1.1、list
    len():长度
    list[]:索引读写,可反向查询
    append():一次性添加
    extend():逐个元素添加
    list.pop():删除最后一个元素
    del(list[]):根据索引删除元素
    in:元素是否存在
    if not list:判断列表是否为空
    ’ ‘.join(list):向列表末位添加元素
    for i in list(for i in range(len(list))):遍历


    1.2、字典
    dict={key:value}
    获取长度:len(dict)
    根据key读写value值:dict[key]
    添加元素:dict[new_key]=new_value
    判断key是否存在:if key in dict // if not (key in dict)
    判断字典是否为空:if not dict
    遍历1:for i in dict.keys() :print(dict(i))
    遍历2:for key, value in dict.items():print(k,v)


    1.3 Json

    import json
    d={'Python':100, 'C++':70, 'Basic':60, 'Others':{'C':65, 'Java':50}}
    jtxt = json.dumps(d)  # dumps是将json转化成str格式,loads是将str转化成dict格式;dump和load是将对文件的操作进行了结合
    
    # 对非dict对象如何使用json序列化
    class Student:
       def __init__(self, name, age, score):
          self.name = name
          self.age = age
          self.score = score
    
       def __str__(self):
          return '%s: %d, %d' % (self.name, self.age, self.score)
    
    s = Student('Tom', 15, 85)
    print(s)  # >> Tom: 15, 85
    print(s.__init__)  # >> <bound method Student.__init__ of <__main__.Student object at 0x000001EDD961BEF0>>
    
    # 方法1
    jtxt = json.dumps(s, default = lambda obj: obj.__dict__)
    print(jtxt)
    
    
    
    ​
    
    

    本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:

    • Markdown和扩展Markdown简洁的语法
    • 代码块高亮
    • 图片链接和图片上传
    • LaTex数学公式
    • UML序列图和流程图
    • 离线写博客
    • 导入导出Markdown文件
    • 丰富的快捷键

    快捷键

    • 加粗 Ctrl + B
    • 斜体 Ctrl + I
    • 引用 Ctrl + Q
    • 插入链接 Ctrl + L
    • 插入代码 Ctrl + K
    • 插入图片 Ctrl + G
    • 提升标题 Ctrl + H
    • 有序列表 Ctrl + O
    • 无序列表 Ctrl + U
    • 横线 Ctrl + R
    • 撤销 Ctrl + Z
    • 重做 Ctrl + Y

    Markdown及扩展

    Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

    使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

    本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

    表格

    Markdown Extra 表格语法:

    项目 价格
    Computer $1600
    Phone $12
    Pipe $1

    可以使用冒号来定义对齐方式:

    项目 价格 数量
    Computer 1600 元 5
    Phone 12 元 12
    Pipe 1 元 234

    定义列表

    Markdown Extra 定义列表语法:
    项目1
    项目2
    定义 A
    定义 B
    项目3
    定义 C

    定义 D

    定义D内容

    代码块

    代码块语法遵循标准markdown代码,例如:

    @requires_authorization
    def somefunc(param1='', param2=0):
        '''A docstring'''
        if param1 > param2: # interesting
            print 'Greater'
        return (param2 - param1 + 1) or None
    class SomeClass:
        pass
    >>> message = '''interpreter
    ... prompt'''

    脚注

    生成一个脚注1.

    目录

    [TOC]来生成目录:

    数学公式

    使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

    • 行内公式,数学公式为:Γ(n)=(n1)!nN
    • 块级公式:

    x=b±b24ac2a

    更多LaTex语法请参考 这儿.

    UML 图:

    可以渲染序列图:

    Created with Raphaël 2.1.0张三张三李四李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。

    或者流程图:

    Created with Raphaël 2.1.0开始我的操作确认?结束yesno
    • 关于 序列图 语法,参考 这儿,
    • 关于 流程图 语法,参考 这儿.

    离线写博客

    即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

    用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

    博客发表后,本地缓存将被删除。 

    用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

    注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

    浏览器兼容

    1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
    2. IE9以下不支持
    3. IE9,10,11存在以下问题
      1. 不支持离线功能
      2. IE9不支持文件导入导出
      3. IE10不支持拖拽文件导入


    1. 这里是 脚注内容.
    展开全文
  • python概念理解

    2020-09-21 22:44:31
    python中有元组、列表、数据框、数组这四种可以存放多个数据元素的集合 一 元组 元组是一种静态的数据结构,无法修改,若要修改只能重新生成新的元组。元组元素的获取是通过索引值去获得的,也是可以层次嵌套的。 二...

    概念

    python中有元组、列表、数据框、数组这四种可以存放多个数据元素的集合

    一 元组

    元组是一种静态的数据结构,无法修改,若要修改只能重新生成新的元组。元组元素的获取是通过索引值去获得的,也是可以层次嵌套的。

    二 列表

    列表的特性有索引,切片,重复,链接,成员操作符,迭代[for循环遍历],列表里嵌套列表

    三 数据框

    数据框是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同。数据框的每列都有唯一的名字,在已创建的数据框上,用户可以添加计算列,这样,R引擎根据同一行的数据列,计算出表达式的值,并把该值作为计算列的值。数据框是数据分析中最重要的数据对象,必须熟练掌握数据框的操作。

    四 数组
    1、Python的数组分三种类型:
    (1) list 普通的链表,初始化后可以通过特定方法动态增加元素。
    定义方式:arr = [元素]

    (2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改变的。
    定义方式:arr = (元素)

    (2) Dictionary 词典类型, 即是Hash数组。
    定义方式:arr = {元素k:v}

    展开全文
  • awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨...
  • 循环的java源码压缩 pytm:用于威胁建模的 Pythonic 框架 介绍 传统的威胁建模往往迟到,有时甚至根本没有。 此外,创建手动数据流和报告可能非常耗时。 pytm 的目标是将威胁建模向左转移,使威胁建模更加自动化和以...
  • python基本概念

    2018-11-13 20:19:43
    Python基本概念python基本概念环境变量设置python的一些特点数据类型和变量字符串和编码基础listtuple循环DictSet参数函数默认参数的坑:命名关键字参数参数组合函数递归生成器Iterable函数式编程高阶函数:...

    python基本概念

    环境变量设置

    1. 启动终端Terminal;
    2. 进入当前用户的home目录,输入cd~;
    3. 先尝试打开open .bash_profile如没有,则新建,touch .bash_profile;
    4. 打开open .bash_profile编辑;

    alias python2=’/usr/local/bin/python2.7’
    alias python3=’/anaconda3/lib/python3.7’
    alias python=python3

    1. 保存关闭后,source ~/.bash_profile

    python的一些特点

    支持面向对象、开源

    面向对象是:
    把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。
    对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定

    面向过程就是:
    自顶向下顺序执行,逐步求精;其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。程序流程在写程序时就已决定

    Python是解释型语言、运行速度慢,用户感知不到
    高级语言,代码不能加密
    第三方库比较丰富
    适合开发的场景:网络应用,包括网站、后台服务等等、许多日常需要的小工具,包括系统管理员需要的脚本任务等等

    数据类型和变量

    数据类型:整数、浮点数、字符串、布尔值、空值None
    变量
    常量(PI=3.14159265359)

    字符串和编码

    *编码问题:

    最先有美国的ASCII,中国的GB2312、日本的Shift_JIS、韩国的Euc-kr…
    后来统一成Unicode,所有语言都支持,但是内存大
    大多数英文编码的使用UTF-8、节约空间

    格式化:
    在这里插入图片描述

    ord()函数获取字符的整数表示
    chr()函数把编码转换为对应的字符

    基础

    list

    Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素

    tuple

    另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改

    循环

    for x in …循环就是把每个元素代入变量x,然后执行缩进块的语句。
    如果要计算1-100的整数之和,从1写到100有点困难,幸好Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数

    // An highlighted block
    list(range(5));//[0, 1, 2, 3, 4]
    

    Dict

    请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
    和list比较,
    dict有以下几个特点:
    =1、查找和插入的速度极快,不会随着key的增加而变慢=
    =2、需要占用大量的内存,内存浪费多=
    而list相反:
    =1、查找和插入的时间随着元素的增加而增加=
    =2、占用空间小,浪费内存很少=
    所以,dict是用空间来换取时间的一种方法

    Set

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。

    参数

    函数默认参数的坑:

    Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了
    =定义默认参数要牢记一点:默认参数必须指向不变对象!=

    为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象

    命名关键字参数

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    参数组合

    在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    =对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的=

    函数递归

    1、递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

    2、使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出

    3、使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。

    4、针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。

    5、Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题

    生成器

    如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器

    原理:它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

    Iterable

    一类是集合数据类型,如list、tuple、dict、set、str等;
    一类是generator,包括生成器和带yield的generator function
    这些可以直接作用于for循环的对象统称为可迭代对象

    可以使用isinstance()判断一个对象是否是Iterable对象:
    Iterator:可以被next()函数调用并不断返回下一个值的对象称为迭代器
    Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

    函数式编程

    高阶函数:

    1、变量可以指向函数、函数名也是变量、传入函数
    2、把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式

    Filter

    1、filter()的作用是从一个序列中筛出符合条件的元素
    2、由于filter()使用了惰性计算,所以只有在取filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素
    3、注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list
    4、注意到Iterator是惰性计算的序列,所以我们可以用Python表示“全体自然数”,“全体素数”这样的序列,而代码非常简洁
    5、回数是指从左向右读和从右向左读都是一样的数,例如12321,909

    Sorted

    1、排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小
    2、如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来
    3、sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数

    lambda:

    1、关键字lambda表示匿名函数,冒号前面的x表示函数参数。
    2、匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
    3、用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突
    4、此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数

    Decorator

    1、装饰器:假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”
    2、在面向对象(OOP)的设计模式中,decorator被称为装饰模式
    3、OOP的装饰模式需要通过继承和组合来实现,而Python除了能支持OOP的decorator外,直接从语法层次支持decorator
    4、Python的decorator可以用函数实现,也可以用类实现
    5、decorator可以增强函数的功能,定义起来虽然有点复杂,但使用起来非常灵活和方便

    functools.partial:

    1、简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
    2、当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。

    面向对象编程

    类:

    1、类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;
    2、方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据
    3、通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节
    4、和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同

    类属性:

    1、实例属性属于各个实例所有,互不干扰
    2、类属性属于类所有,所有实例共享一个属性
    3、不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误

    @property

    1、有没有既能检查参数,又可以用类似属性这样简单的方式来访问类的变量呢?
    Python内置的@property装饰器就是负责把一个方法变成属性调用的
    @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性

    Mixin

    1、目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系
    2、只允许单一继承的语言(如Java)不能使用MixIn的设计

    ORM框架

    ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。

    OS

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    序列化:

    在这里插入图片描述

    我们把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上,反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling
    在这里插入图片描述

    1、Python语言特定的序列化模块是pickle,但如果要把序列化搞得更通用、更符合Web标准,就可以使用json模块。
    2、 json模块的dumps()和loads()函数是定义得非常好的接口的典范。当我们使用时,只需要传入一个必须的参数。
    3、但是,当默认的序列化或反序列机制不满足我们的要求时,我们又可以传入更多的参数来定制序列化或反序列化的规则,既做到了接口简单易用,又做到了充分的扩展性和灵活性。

    线程

    ThreadLocal:

    1、ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
    2、一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题

    线程与进程

    多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存

    分布式进程

    1、在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上
    2、Python的分布式进程接口简单,封装良好,适合需要把繁重任务分布到多台机器的环境下

    正则表达式

    用\d可以匹配一个数字

    \w可以匹配一个字母或数字

    .可以匹配任意字符

    要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符

    \d{3}\s+\d{3,8}:可以匹配以任意个空格隔开的带区号的电话号码,
    \d{3}表示匹配3个数字,例如’010’
    .\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配’ ‘,’ ‘等
    \d{3,8}表示3-8个数字,例如’1234567’
    如果匹配’010-12345’这样的号码:\d{3}-\d{3,8}

    进阶

    [0-9a-zA-Z_]可以匹配一个数字、字母或者下划线

    [0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如’a100’,‘0_Z’,'Py3000’等等

    [a-zA-Z_][0-9a-zA-Z_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

    [a-zA-Z_][0-9a-zA-Z_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)

    A|B可以匹配A或B,所以(P|p)ython可以匹配’Python’或者’python’

    ^ 表示行的开头,^\d表示必须以数字开头

    KaTeX parse error: Expected 'EOF', got '\d' at position 8: 表示行的结束,\̲d̲表示必须以数字结束

    py也可以匹配’python’,但是加上^py$就变成了整行匹配,就只能匹配’py’了

    展开全文
  • Python Cookbook

    2013-07-31 22:33:26
    11.4 给Tkinter列表增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在Tkinter中实现一个秒表 415 11.9 用线程实现GUI和异步...
  • 第23章: Python数据结构与控制流语句 任务280: 程序基本组成及输入和输出 任务281: 基本数据类型间转换的常用方法 任务282: Python的数据结构-列表 任务283: 集合 任务284: 元组 任务285: 字典 任务286: ...
  • 入门第一个程序基本数据类型基本运算符起名法则数据类型间相互转换组合数据类型list元组 tuple可变对象 不可变对象字典dict集合 setif语句循环语句break continue pass二、python编程基础1.字符串进阶字符串索引、...
  • 005闲聊之Python数据类型 006Pyhon之常用操作符 007了不起的分支和循环 008了不起的分支和循环2 009了不起的分支和循环3 010列表:一个打了激素的数组 011列表:一个打了激素的数组2 012列表:一个打了激素的数组3...
  • ├─(3) 03 python s3 day41 JS的基本数据类型.avi ├─(4) 04 python s3 day41 JS的运算符.avi ├─(5) 05 python s3 day41 JS的控制语句与循环.avi ├─(6) 06 python s3 day41 JS的循环与异常.avi ├─(7) 07 ...
  • 005闲聊之Python数据类型(课件+源代码) 007了不起的分支和循环(课件) 008了不起的分支和循环2(课件+源代码) 009了不起的分支和循环3(课件+源代码) 017函数:Python的乐高积木(课件+源代码) 019函数:我...
  • 005闲聊之Python数据类型(课件+源代码) 007了不起的分支和循环(课件) 008了不起的分支和循环2(课件+源代码) 009了不起的分支和循环3(课件+源代码) 017函数:Python的乐高积木(课件+源代码) 019函数:我...
  • 尹成Python27天入门到项目实战

    千人学习 2020-12-05 17:04:22
    字符串集合与语音识别实战回顾lset初始化风格set增加与去重set删除元素遍历...循环生成器yield作用生成器简介测试游戏简介游戏初级修改键盘模拟语音控制游戏实现鼠标模拟代码规范函数简化重用列表与元组小结作业day11&...
  • Python编程入门经典

    热门讨论 2013-10-27 14:17:39
    9.4 为循环生成迭代器 133 9.5 使用字典的特殊字符串 替换 135 9.6 重要模块 137 9.6.1 getopt——从命令行中得到 选项 137 9.6.2 使用一个以上的进程 139 9.6.3 线程——在相同的进程中 完成多个工作 141 9.7 本章...
  • 一、说明 python中最早看到yield应该是使用scrapy框架写爬虫的时候,之前也有去看...不同点:如果要返回的数据是通过for等循环生成的迭代器类型数据(如列表、元组),return只能在循环外部一次性地返回,yeild则可
  • 老男孩python 四期

    2015-06-25 16:36:28
    2、项目实战四、通过Python脚本连接MYSQL数据库实现数据自动入库、更新 3、项目实战五、开发C/S架构备份服务器,实现远程备份 ※使用PYTHON SOCKET模块实现文件的远程压缩传输 二、Python中高级课程列表 ...
  • 全书分为两个部分:第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、 Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和...
  • 数据类型和变量 29 字符串和编码 37 使用 list 和 tuple 46 条件判断 53 循环 58 使用 dict 和 set 63 函数 70 调用函数 72 定义函数 75 函数的参数 80 递归函数 93 高级特性 97 切片 98 迭代 102 ...
  • Python数据挖掘工程师(机器学习、深度学习、算法专家) Python爬虫工程师 Python测试工程师(自动化测试、测试开发) 说明:目前,数据分析是一个非常热门的方向,因为不管是互联网行业还是传统行业都已经积累了...
  • 数据类型和变量 字符串和编码 使用list和tuple 条件判断 循环 使用dict和set 函数 调用函数 定义函数 函数的参数 递归函数 高级特性 切片 迭代 列表生成生成器 迭代器 函数式编程 高阶函数 map/reduce filter ...
  • 跟老齐学Python-最新版

    2017-12-25 09:54:50
    0.1 关于Python的故事 2 0.1.1 Python的昨天、今天和明天 3 0.1.2 Python的特点 4 0.1.3 Python哲学 5 0.2 从小工到专家 5 0.2.1 零基础 6 0.2.2 阅读代码 6 0.2.3 调试程序 7 0.3 安装Python 7 0.3.1 Ubuntu系统 8 ...
  • 深入理解Python中文版高清PDF

    热门讨论 2012-09-04 19:37:04
     8.13 生成器表达式   8.14 相关模块   8.15 练习   第9章 文件和输入输出   9.1 文件对象   9.2 文件内建函数(open()和file())   9.2.1 工厂函数file()   9.2.2 通用换行符...
  • Python核心编程第二版

    热门讨论 2009-07-30 17:07:20
    很不错的python书 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   1.3.5 可...
  • Python核心编程第二版(中文)

    热门讨论 2015-04-23 16:40:13
    14.3.6 使用Python在运行时生成和执行Python代码 14.4 执行其他(Python)程序 14.4.1 导入 14.4.2 execfile() 14.4.3 将模块作为脚本执行 14.5 执行其他(非Python)程序 14.5.1 os.system() 14.5.2 os...
  • 用于生成峰值和数据转换的库 使用matplotlib和赛璐ul的基于峰值的数据的可视化工具 可选的替代梯度函数 数据集实用程序功能 snnTorch设计为可直观地与PyTorch一起使用,就像每个尖刺神经元只是一系列序列中的另一...
  • 005闲聊之Python数据类型 P7. 006Pyhon之常用操作符 P8. 007了不起的分支和循环1 P9. 008了不起的分支和循环2 P10. 009了不起的分支和循环3 P11. 010列表:一个打了激素的数组1 P12. 011列表:一个打了激素...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

python数据框循环生成

python 订阅