Python基础知识

图片来之网络

有时候技术总是不够用,明明已经学了很多技能了,但是碰到问题还是不够用。手工处理耗时太长的问题已经困扰着希望解放双手的我们,批处理是唯一的出路,那么python的使用将彻底的解决一切的重复劳动。

1 缩进

当语句以冒号:结尾时,缩进的语句视为代码块

age = 20
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('you are child’)

else if 可以缩写成 elif

2 转义

使用r’'来表示内部的字符串不转义

>>> print(r'\\\t\\')
\\\t\\

3 '''

使用''' (三个“'”单引号来允许多行内容)

4 布尔值

两种值: True 和 False
可以用逻辑运算符 and or not 来参与运算

5 空值

None 特殊的空值

6 变量常量

动态语言,不需要声明类型,a = 2
常量用大写和下划线表示,但是不能保证这个值不会变化

7 除法

/ 除法的结果是浮点数
// 地板除的结果是整数

8 字符串str

  • ord() 函数获取字符的整数表示
  • chr() 函数把编码转换为对应的字符
  • bytes类型带b前缀的单引号或双引号表示: 如 b’ABC’ ABC每个字符都只占用一个字节. (可以使用encode/decode进行编码)
  • len() 计算字符个数
  • 格式化 使用%运算符来格式化字符串。 或者用format()方法, 替换字符串内的{0},{1}…如 print('Hello, {0}, 成绩提升了{1:.1f}%'.format('小明', 17.125)) 打印 Hello, 小明, 成绩提升了17.1%
  • str(), int(), float() 进行类型转换
  • startswith()和endswith() 判断是否传入的字符串开始或结束
  • join() 将字符串列表拼接成一个字符串 ','.join([])
  • split() 将一个字符串分割成一个字符串列表 'asf'.split(‘ ')
  • rjust(), ljust(), center() 通过插入空格或其他字符来进行对齐
  • strip(), strip(),strip() 删除空白字符,或传入的字符并且字符单个匹配

注意:

  1. 不能进行字符串和整型数的“+”操作, 因为不支持自动类型转换。
  2. 字符串乘以整型数,“*”为字符串复制,进行复制字符串。

9 list

  • 有序集合,可以添加和删除元素。 classmates = ['Michael', 'Bob', 'Tracy']
  • classmates[-1], 获取最后一个元素, -2,倒数第二个。
  • append 追加元素到末尾
  • insert 把元素插入到指定位置
  • pop 删除list末尾的元素, pop(i) 删除指定索引位置的元素

10 tuple

元组,有序列表,初始化后不能修改。

classmates = ('Michael', 'Bob', 'Tracy’)  
t = (1,)  //  一个元素的时候需要加一个逗号
  • 使用tuple(数组),可以将数组转化为元组
  • 使用list(元组),可以将元组转化为数组

11 循环

  • for…in循环
  • range() 提供生成整数序列 range(101) 生成0-100的整数序列
  • while 循环
  • break 语句退出循环
  • continue 跳过当前的这次循环,开始下一次循环

12 字典

  • dict 与iOS的Dictionary和Android的map一样
  • d = {'Micheal': 95, 'Bob': 75, 'Tracy': 85}
  • dict[‘key’] 当key不存在的时候会报错。需要先进行in判断
  • get() 获取value, 如果key不存在返回None, d.get('Thomas', -1) 如果不存在,返回指定值
  • pop() 删除key和对应的value
  • setdefault() 当key不存在时,设置默认值,然后返回value。如果key存在,则直接返回value。

13 in

判断是否在集合中 ‘Thomas’ in d

14 set

  • 一组不能重复的key 初始化 s = set([1,2,3,4])
  • add(key) 添加元素
  • remove(key) 删除元素

15 def函数

  • def my_abs(x): 函数体
  • pass 语句,定义什么都不做的空函数
  • isinstance() 检查类型, isinstance(x, (int, float)) 检查x是否是int或float类型.包括继承关系
  • return 可以返回多个值,使用的是truple
  • 默认参数 def power(x, n=2): 那么第二个参数可以不传。 默认参数要牢记一点: 默认参数必须指向不变对象!
  • 可变参数 参数前面加一个*号
  • 关键字参数 参数前面加两个*号, 传入的是一个字典
  • 命名关键字参数 特殊分隔符,后被视为命名关键字参数。如果已经定义了可变参数,那么不需要再写一个
  • 参数顺序,必选参数->默认参数->可变参数->命名关键字参数->关键字参数

16 切片Slice

L[0:3] 取集合的前三个元素,相当于L[0], L[1], L[2]
L[::5] 从0开始,每5个取一个
可以去字符串,结合进行切片操作

17 迭代Iteration

enumerate 可以将list变成索引-元素

18 列表生成式

[m + n for m in 'ABC' for n in 'XYZ’]
将表达式写前面后面紧跟for,可以二层,三层及以上

19 生成器generator

  • 一边循环一边计算。将列表生成式的[]换成(), 就是生成器。
  • 列表生成式是返回一个列表,而生成器是返回一个generator,通过next()函数获取下一个值。
  • 如果函数中定义了yield 关键字,那么这个函数就变成了generator

20 迭代器Iterable

  • 可以直接作用于for循环的对象list, tuple, dict, set, str等统称为迭代器Iterable。
  • 可以被next()函数调用并不断返回下一个值的对象成为迭代器Iterator。
  • 使用iter()函数,可以将Iterable变成Iterator。

21 捕获异常

try:
except  XXX:

22 高阶函数

一个函数可以接受另一个函数作为参数,这个函数就是高阶函数。

  • map() 接受2个参数,一个函数和一个Iterable。使用函数对Iterable中每一个元素进行运算。
  • reduce() 接受2个参数,一个函数和一个Iterable, 这个函数必须接受两个参数。 把结果和下一个元素使用函数进行累计计算。
  • filter() 用于过滤序列,接受一个函数和一个Iterable。
  • sorted() 接受一个列表和一个函数。
  • 闭包(返回函数)不要引用任何循环变量或者后续会发生变化的变量。
  • 函数变量,name 属性获取函数的名字。
  • 偏函数,使用functools.partial()把函数的某些参数给固定住,返回一个新的函数。

23 装饰器decorator

在代码运行期间动态增加功能的方式,称为装饰器。
@log 置于函数定义处,不仅会运行函数,还会在运行前执行log的内容。

24 模块、包

每个py文件就是一个模块,每个文件夹就是一个包,包中必须要有一个init.py的文件。
模块不能和Python自带的模块名冲突,否者将无法导入系统自带的模块。

  • 导入模块 import,然后可以直接用模块内的变量和函数
  • 变量名使用“_”开头,说明是private的不能直接引用,不然是public。

25 类

  • class Student(object): class后紧跟类型,()中是继承的类。
  • 可以自由绑定属性
  • 使用init函数实例类并绑定属性
  • 类中的函数,第一参数一定是self。调用的时候self不需要传递,其他参数正常传入。
  • 属性名前面添加下划线”__”,那么这个属性就是私有变量,只有内部可以访问
  • 如果属性名是下划线”__”开头和结尾的,那么这个属性是特殊属性,可以直接访问
  • type() 获取对象的类属性
  • dir() 获取对象的所有属性和方法,使用hasattr(obj, ‘x’)判断是否有属性x,setattr(obj, ‘y’, 19)设置一个属性y并赋值19,getattr(obj, ‘y’) 获取属性y的值
  • 类属性,在类中直接定义属性,使用类名访问
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

26 限制实例属性

对类和实例可以动态的添加属性和方法,使用slots可以限制

class Student(object):
    __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

27 @property

负责把一个方法变成属性调用。
@property把getter方法变成属性, 并会创建另一个装饰器@xxx.setter把setter方法变成属性赋值。
如果没有定义@xxx.setter那么说明这个属性是只读属性

28 多继承MixIn

一个类可以继承多个类。

29 定制类

  • str 返回类的描述,可以重载str来实现输出类的描述
  • iter 使类支持for…in循环操作,同时需要实现next方法用来支持迭代
  • getitem 使类可以像list一样获取第几个元素

30 枚举类

Enum类 value属性自动赋值给成员int常量,默认从1开始计数

31 文件读

  • open()函数,打开一个文件对象
  • read()函数, 读取内容到内存
  • close()函数,关闭文件
  • with 语句,可以自动调用close函数
  • write() 写文件
    with open('/path/to/file', 'r') as f:
    print(f.read())

32 StringIO

内存中读写str
getvalue() 获取写入后的str

33 BytesIO

内存中读写bytes

34 操作文件和目录

  • os模块直接调用操作系统提供的接口函数
  • name 操作系统类型
  • uname() 详细的系统信息
  • environ 环境变量
  • path 操作文件和目录模块 abspath(), join(), mkdir(), reader(), split(), splitext(),
  • rename 重命名
  • remove 删掉文件

35 序列化

pickling
pickle 模块

  • 对象序列化 pickle.dumps(d)
  • 对象反序列化 pickle.load(f)
    json模块 可以直接进行对dict进行json的转换

36 多进程

fork() 调用创建一个子进程
getpid() 获取进程的ID
getppid() 获取父进程的ID

37 del

删除一个定义的变量
删除列表中一个元素

38 exec

内置语句 执行一个表达式

39 raise

触发一个异常

40 *星号

*   该位置接受任意多个非关键字(non-keyword)参数,在函数中将其转化为元组(1,2,3,4)
**  该位置接受任意多个关键字(keyword)参数,在函数**位置上转化为词典 [key:value, key:value ]

41 super

class C(B):
       def meth(self, arg):
           super(C, self).meth(arg)

42 **指数

指数操作, 2 ** 3 得到8

43 print不换行

print('Hello', end=' ')
print("World")

打印 Hello World

44 global

将局部变量作用域使用global声明变量,那么这个变量为全局变量

45 copy

copy.copy() 函数用来复制列表或字典这样的可变值。
copy.deepcopy() 函数用来复制列表中包含列表的情况。

46 isX字符串方法

  • slower() 字符都是小写
  • ismpper() 字符都是大写
  • isalpha() 只包含字母,且非空
  • isalnum() 只包含字母和数字,且非空
  • isdecimal() 只包含数字字符,且非空(不包含小数点)
  • isspace() 只包含空格,制表符和换行,且非空
  • istitle() 仅包含大写字母开头,后面是小写字母的单词

47 正则表达式

import re
phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)’)  #创建正则表达式
  • search返回一个March对象
  • findall()返回一组字符串
  • sub() 用新的字符串替换掉匹配的模式
    匹配符
  • 字符? 表示它前面的分组在这个模式中是可选的(0次或1次)
  • 字符* 表示它之前的分组在这个模式中匹配0次或多次
  • 字符+ 表示它之前的分组在这个模式中匹配1次或多次
  • 符号{} 表示它之前的分组重复指定次数,用两个数字“,”分隔表示一个范围
    通配符: ‘.’ 匹配除了换行之外的所有字符,仅仅匹配一个字符
  • 使用.* 来匹配除了换行符的所有字符
  • ? 后面添加一个?,表示非贪心匹配,也就是匹配最短符合的字符串
  • re.DOTALL 表示匹配所有字符
  • re.IGNORECASE 或 re.I 表示不区分大小写
  • re.VERBOSE 忽略正则表达式中的空格和注释
    字符分类
  • \d 0到9的任何数字
  • \D 除了0到9的数字之外的任何字符
  • \w 任何字母、数字和下划线字符 (相当于单词word)
  • \W 除了字母、数字和下划线字符之外的任何字符
  • \s 空格、制表符或换行符 (相当于空白space)
  • \S 除了空格、制表符或换行符之外的任何字符
  • [123] 自定义字符分类,匹配中括号内的字符。字符’.’,’*’,’?’,’(‘和’)’需要转义
  • ^ 中括号中插入^表示非字符类。也表明必须此分组开始
  • $ 必须此分组结尾

// TODO 以后再补充吧 感觉Python强大的地方是提供了好多好用的库,可以快速的实现自己的功能

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 1.感恩早上先生处理信用卡的事情。2.反正昨天晚上吴老师提醒我,有一个条没有写好,告知我今天有可能发工资。3.感恩...
    freemanlin1314阅读 197评论 0 0
  • 2018年11月11日 姓名 :曹静杰 企业名称 : 辽宁辽阳丛迪服装有限公司 组别 388期 反省1组 【日精进...
    eddd166e28ad阅读 147评论 0 0
  • “回望曾经的旅程,三言两语说不清”很喜欢《美若黎明》这首歌的旋律与歌词,原唱歌手是“冷萌段子手”“秋裤男神”的李健...
    长大的孤单阅读 1,197评论 1 1