面向对象程序设计 面向对象不仅是一种语言特性,更是一种程序设计思想。在C++中已经研究了很多面向对象的思想了,所以这篇文章的学习中更注重的是”Python中的面向对象”。 面向对象的三大核心内容是封装、继承与多态。封装就是使用类,继承与多态也要使用类来实现。 类与封装Python中定义一个类的方式是: 123class ClassName: 属性 方法 使用类可以实例化很多个对象或实例:instance_name=ClassName() 两种对象与两种属性两种对象Python中一切皆对象——类其实也是对象。创建类其实就是创建了一个类对象,它由type类实例化而来: 使用类实例化的对象或实例也是对象,它是对应的类类型的对象,这点很好理解。 类对象只有一个,而使用类实例化的实例对象可以有很多个。 两种属性Python中与类相关的有类对象与实例对象,对应的,类中的属性有类属性与实例属性。 类属性就是在类的公共部分定义的属性,类对象和实例对象都能访问到类属性;实例属性在方法(实例方法)中定义,前面使用self加以限定,表明这是一个实例属性: 12345class Student: amo ...
使用函数与模块的目的都是为了提高程序的结构性与可复用性。函数已经很熟悉了,模块是比函数粒度更大的一个程序组织单元,一个模块包含若干个函数。 函数函数结构Python中函数的结构为: 123def func(形参列表): 函数体 return 表达式 如果想要返回多个值,只需要 return 值1,值2,值2,…,最终以元组的形式返回: 如果只写return,那么返回的结果就是空(None)。 如果函数体为空,就要使用pass来占位。适合于先组织程序结构,再编写代码。 函数传参形参与实参回顾一下形参和实参的区别: 形参是函数定义是形参列表中的参数。 实参是函数调用时,主调函数为被调函数提供的原始数据。 函数传参可以看成普通的变量赋值。用于Python采用的是基于值的内存管理方式,对每一个出现的值都会分配空间(包括相同的值),所以传参的方式分为三种: 对于基本类型变量的传参,形参和实参都指向同一地址。形参发生改变后会指向另一个地址,不会影响实参本来的值。相当于C++中的值传递。 对于可变类型的复杂类型(列表、字典、集合)的传参,形参和实参都指向同一地址。由于形参改变其中元 ...
列表与元组 Python中的字符串、列表、元组均属于序列类型。对于序列类型,它们有很多共同的操作,且很多都在字符串那篇学习了。本篇先简单回顾序列共同的操作,然后重点学习列表独有的操作,以及列表与元组的对比。 Python的序列类型是指元素按照位置编号顺序存储的一类数据类型,包括字符串、列表与元组。列表和元组可以存储不同的数据类型,其中列表的元素可以修改;而元组和字符串一样,其中的元素是不能修改的。 序列通用操作字符串、列表、元组共有的操作。这些操作不会改变序列本身的元素,而是返回一个序列。 索引与分片索引包括正索引和负索引;分片可以使用正索引和负索引且可以指定步长。在字符串那里详细学习了。 序列的计算可以对序列进行+或*的操作。需要注意两个序列必须是同一类型,元组和列表也不能! 序列相加:将两个序列拼接起来。 序列乘法:序列重复n次。如果n<1则返回一个空序列。 序列比较:从左到右开始比,直到比出大小。 成员测试:in或not in测试前者是否是后面序列的元素。 序列处理函数 len(seq):获取序列的长度 max(seq):获取序列中最大的元素 min(seq):获取序 ...
字典与集合 字符串、列表、元组都是序列类型,其中的元素在位置上具有先后关系,所以可以使用位置来访问元素;而字典与集合是无序类型,不能使用位置来访问元素。 字典与元组的应用场景和主要进行的操作不同。字典是Python中唯一的映射类型,主要关注元素的检索、插入与删除;Python中的集合模拟的是数学上的集合,主要关注集合的并交差等运算。 字典dict认识字典 字典是无序的键值对的集合体,使用键来检索相应的值。 字典的原理是对键进行哈希运算,根据计算的结果决定值的存储地址。所以字典的查询效率是很高的。 由于字典的原理是哈希表,所以要求键必须是可哈希的,即键必须是不可变类型。可以使用hash()函数计算哈希值来判断一个数据是否能作为字典的键: 字典的值可以是列表、元组、字典等复杂类型。 字典是可变类型,可以对其中的元素进行增删改等操作,比较灵活。 字典的操作字典的创建 使用 字典名={键1:值1,键2:值2,……}的方式初始化一个字典。 使用 字典名={}的方式创建一个空字典,后续再向字典中插入键值对。 使用 dict()函数创建字典,这种方 ...
字符串与正则表达式 Python强大的一点就在于其文字处理。对于字符串,首先要知道的是字符串的编码,以及处理编码的一些函数;然后要知道字符串可以进行的操作与方法;对于正则表达式,首先要知道PCRE流派正则表达式的规则,然后是Python中使用正则表达式的方法。 字符串第一篇中讲到字符串是Python中的一种基本类型,是一个字符序列,包括行内字符串和行间字符串。Python 3.x中字符串默认的编码方式是UTF-8编码。 字符编码UnicodeUnicode是一种字符集。它于1994年正式公布,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,所以又称为统一码/万国码/单一码。不论什么字符,它都使用4字节来表达每个符号。 Python提供了ord和chr两个内置函数,用于Unicode字符与机器内部Unicode编码值之间的转换。 说明 Unicode字符:我们在界面上看到的一个实际的字符。 Unicode编码值:Unicode字符集将一个字符与一个唯一的编码相对应,这个编码就是对应Unicode字符的编码值。 ord函数将一个字符转化为相应的Unicode编码值。 c ...
Python的程序结构 本篇主要介绍Python程序的顺序结构与选择结构、循环结构的用法。顺序结构这里主要补充一些基础的知识,如格式化输出等,选择结构主要讲if语句,循环结构主要讲for语句和while语句。 顺序结构和C程序的入口是main函数不同,Python是一种脚本语言。它从上到下执行各条语句,可以把在命令行中分开执行的语句整合到一个Python脚本中。 语句行 Python命令行中的语句必须从解释器提示符的第一列开始,前面不能有空格,不然会报错。 Python脚本中的每行代码也必须顶格(tab的除外),每个语句行以回车符结束。 可以在同一行中写多条语句,语句之间使用分号分隔。 如果一条语句写在一行太长,可以使用反斜杠(续行符)换行。 如果在括号内需要换行,则不需要使用续行符,如 12def func():return 120 就是一个正确的函数定义。 注释Python中的注释包括单行注释和多行注释。 单行注释以#开头,后面的内容全是注释。 多行注释其实就是多行的字符串。它常常作为函数或类的说明,可以通过调用 函数名.__doc__ 来查看这个多行字符 ...
Python语言基础 本篇主要学习Python的基本数据类型(整型、浮点型、复数型、字符串类型)和常用模块和内置函数(math、cmath、random)。 基本数据类型Python内置的数据类型包括数值型、字符串型、布尔型等基本(简单)数据类型以及列表、元组、字典、集合等复杂数据类型。现在关注基本数据类型,复杂数据类型后面一一学习。 整型 Python 2.x中的整型包括int和long两种,长整型无需考虑溢出的问题。到了3.x,统一采用了长整型。 Python 3.x中整型数据的大小可以是任意大,无需考虑溢出。它的原理是将整型的数值用int数组来存储,当要溢出的时候就增加数组的空间。正是因为不用考虑数值的溢出,使用Python对大数据进行计算是很方便的。 整型可以表示为十进制、二进制、八进制和十六进制: 十进制:默认使用 二进制:前面加上0b或0B 八进制:前面加上0o或0O 十六进制:前面加上0x或0X 浮点型浮点型表示的是一个实数,它有小数形式和指数形式两种表示方式: 小数形式 包括整数和小数部分,用小数点分隔。如果小数点后面没有数,那么默认小数部分为0,如34. ...
前言我一直用着iPhone和iPad。但在我眼中,iOS是一个很不自由的系统,主要原因有几点: 应用必须从app store下载。 想要下载的软件在国区的商店没有,需要使用其他区的账号。 iOS会给应用分配一个空间,应用只能访问这块空间中的内容。如果尝试访问外面就会出现permission denied。 可操作性不够。如果不越狱那么能diy的方面很少。 会iOS编程的除外。 这个偶然看到的软件直接刷新了我对iPad的认知:Code。有了它,即使不会iOS编程也可以干很多事。 探索进入这个软件后,首先看到的就是熟悉的界面: 在设置里面可以看到,软件内置了Python、Node、Clang等解释器和编译器。 不妨在软件自带的终端验证一下,相应的环境果然是存在的。 那么,接下来尝试以平时的方式运行一下Python代码。嗯,与平时无异。 当我觉得把这个软件当作做算法题的编辑器,顺便运行一下代码就行的时候,接下来这个命令的结果直接让我虎躯一震。 这个软件内的Python竟然也可以使用第三方模块!那么可玩性突然就高起来了。 flask首先试试flask,看看可不可 ...
之前在js动态解析引入高清B站视频中研究了B站的api,但是都是别人封装好的,使用方便但限制比较大。这次正好学了Python爬虫,又简单学习了多线程的使用,所以就去研究了bilibili的官方api,然后尝试封装了bilibili视频下载的类(造轮子)。 requirements需要引入如下模块:(按需使用pip下载) 123456import re # python自带的正则表达式库import requests # http请求库,可能需要下载import json # api返回的是json,需要转换为dictfrom contextlib import closing # 创建上下文管理器 from multiprocessing.pool import Pool # 自带的多进程库from tqdm import tqdm # 进度条库,需要下载 类的设计 类属性包括一些类中始终不变的变量,如请求头、cookie等。 一个类的实例对应一个视频或一个合集。 实例属性和视频相关,如视频的bvid、标题、直链等。 实例化对象时传入bilibili视频的url。 包含单个 ...
效果预览首先来看看引入后的效果吧! var videoObject = { container: '.video', plug:'flv.js', video: 'BV1SE411V78E', }; var player = new ckplayer(videoObject); 和一般地使用iframe引入360p的视频不同,通过这种方法引入的b站视频是1080p的,而且获取外链的方式也很简单,以下,教程开始。 使用方法刚写这篇文章的时候还没发现,使用API获得的视频外链是有时间限制的,大约一天过后就会过期。所以直接使用获得的链接是要不得的。最终的方案是修改播放器源码,使用js向API发送同步请求的方式来获得视频的动态链接。具体思路请参照最终方案。 最终方案这里以我使用的播放器ckplayer为例,给出修改播放器js代码的过程。(ckplayer的使用见下文)。 如上图,步骤概括为: 在ckpalyer文件夹下面,找到js/ckplayer.js。 找到loadlanguage函数。 ...
avatar
Sato
我们的前方究竟会通往何处?
Follow Me In Github
公告

莱莎的炼金工房

十年炼金无人问,一朝肉腿天下知。

住在村裡的萊莎有如鄰家女孩,是一位“再普通不過”的少女。
某日,萊莎一行下定決心,前往禁止進入的「浮島對岸」,展開首次探險活動。
于是,僅限今夏的冒險,从此开始。