Python学习回顾

关于Python3

选择Python初衷是迎接人工智能和大数据时代,避免成为新世纪的文盲。我觉得懂一点编程未来会活得更主动,同时听说Python提供了非常完善的基础代码库更易学更容易站在巨人的肩膀上前进,所以在众多语言中选择了Python。其实第一次接触程序语言是在大学——C语言,但当时完全没有感觉,现在一点印象都没有了。所以这次学习要从兴趣出发,从项目出发,同时确认好学习方向。那么目前初步方向将从语法到爬虫到大数据分析到人工智能这样的路径进行深入。相信我可以走的更远。

Python的语法笔记

  • 编码默认源码文件以UTF-8编码,所有字符串都是unicode字符串。unicode的作用是能够使计算机实现跨语言、跨平台的文本转换及处理。
  • 命名建议只用小写字母、数字和下划线,不能以数字开头。避免与系统保留字(关键字)重复。如下:
    1
    2
    import keword
    keword.kwlist

[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

  • 注释 单行以#开头,多行以三个引号在注释语开始行和结束行。和Markdown中代码块引用一样。
  • 行缩进 python不用大括号,直接用缩进来表示代码块。编码要注意缩进对程序如循环的影响。
  • 数字类型 int(整数) bool(布尔) fload(浮点) complex(复数)如:1+2j 要从复数 z 中提取实部和虚部,使用 z.real 和 z.imag
  • 字符串

    反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
    字符串两种索引方式,从左往右以0开始,从右往左以-1开始。
    使用变量[头下标:尾下标]进行截取。
    字符串可以用+连接,用*重复
    转义字符\ . 在行尾时为续行符 \n 换行 \r 回车 \f 换页
    字符串格式化常用 %s 格式化字符串 %d格式化整数 如 print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
    字符串内建函数 capitalize() 转换首字母大写 encode(encoding=’UTF-8’,errors=’strict’)

1
2
str="love"
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符

结果为 lov

  • 输出

    print默认输出是换行的,如果要实现不换行要变量末尾加上 end=””
    需要在同一行显示运行多行语句,语句之间使用分号分隔。
    输出方式:表达式语句和 print() 函数。
    f.close() 处理文件后关闭

  • 输入

    将整个模块(somemodule)导入,格式为: import somemodule
    从某个模块中导入某个函数,格式为: from somemodule import somefunction
    从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc
    将某个模块中的全部函数导入,格式为: from somemodule import *
    读写文件 open(filename,mode) r只读,r+读写 w+ 读写,编辑没有则创建新文件

  • 变量 python变量不需要声明。每个变量在使用前必须要赋值才会被创建。

  • 数据类型 有六种

    其中3种为不可变数据 Number String Tuple(元组)
    和3种可变数据 List Dictionary Set (集合) 使用type()函数可以查询变量的对象类型
    可以使用大括号或set()函数创建集合,但创建一个空集合必须用set()不能用{}。{}表示一个空字典。

1
2
3
4
5
6
Number:a=520   
String:str="love"
Tuple:("abc",1,4)
List:list=["abc",1,4]
Dictionary:dict={"name":"carlos","password":1}
Set:student={"A","B"}
  • 数据转换
函数 描述
hex(x) int to 十六进制str
oct(x) int to 八进制str
ord(x) 字符转为整数值
chr(x) 整数转为字符
  • 算数运算符

    正常加减乘除 % 取余数 //取整数 **取幂

  • 比较运算符

    == != > < >= <=

  • 赋值运算符

    等号在后面 如 //= +=

  • 位运算符

    & 按位与 | 或 ^ 异或 ~ 取反 << 左移 >> 右移

  • 逻辑运算符

    and or not 与或非

  • 成员运算符

    in ,not in

  • 身份运算符

    is , is not

is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

  • 数学函数
  • 三角函数
  • 随机数函数

  • if语句

    if - elif - else

  • 循环语句

    while 循环 要注意避免死循环
    for 循环可以遍历任何序列的项目,如一个列表或者一个字符串
    结合break 语句用于跳出当前循环体
    range()函数 遍历数字序列,会生成数字序列
    pass 语句,用做占位语句 保持结构的完整

几个有意思是要理解的循环:

1
2
3
4
5
6
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 10:
print(b)
a, b = b, a+b

运行结果: 理解赋值

1
2
3
4
5
6
1
1
2
3
5
8

1
2
3
4
5
6
7
for i in range(0, 10, 3) :    #使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长')
print(i)
结果:
0
3
6
9
1
2
3
4
5
6
7
8
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, '等于', x, '*', n//x)
break
else:
# 循环中没有找到元素
print(n, ' 是质数')

输出结果: 理解X值的传递

1
2
3
4
5
6
7
8
2  是质数
3 是质数
4 等于 2 * 2
5 是质数
6 等于 2 * 3
7 是质数
8 等于 2 * 4
9 等于 3 * 3

  • 迭代器与生成器

    迭代器用法 iter() # 创建迭代器对象 和 next() # 输出迭代器的下一个元素
    可以用于字符串列表或元组对象 组合for while 语句 访问集合元素
    生成器用法 调用yield函数
    以下实例使用 yield 实现斐波那契数列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys

def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()

输出结果: #理解迭代器和生成器
0 1 1 2 3 5 8 13 21 34 55

  • 函数

    函数能提高应用的模块性,和代码的重复利用率
    定义函数 def 函数名(参数列表):
    调用函数的参数类型 必需参数/关键字参数/默认参数/不定长参数
    不定长参数 一个星号参数会以元组形式导入 两个星号会以字典形式导入 def fuctionname([formal_args,]*var_args_tuple):
    lambda创建匿名函数 lambda[arg1 [,arg2,····argn]]:expression

  • 变量作用域

    变量作用域决定了哪个程序可以访问哪个特定的变量名称
    4种 Local 局部作用域 Enclosing 闭包函数外的函数中 Global 全局作用域 Build-in 内建作用域
    global和nonlocal关键字 用于作用域修改,进行关键字声明。如果要修改嵌套作用域用nonlocal

  • 数据结构
    常用针对数据进行修改方法:

    append(加元素到结尾)extend(扩充列表)insert(指定插入位置)remove(移除第一个元素)pop(指定位置元素移除)a.pop()返回最后一个元素)clear(移除列表所有) index(返回第一个值索引) ,count(出现次数)sort(排序) reverse(倒序) copy(浅复制)

  • 模块

    每个模块都有一个_name_属性当值是_main_时表明该模块自身在运行,否则是被引入
    dir() 找到模块内定义的所有名称
    应该注意到这有一个特别的模块 sys ,它内置在每一个 Python 解析器中 通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量
    pickle模块
    urllib.request 访问互联网
    发送电子邮件的 smtplib:
    日期和时间 datetime
    数据压缩 zlib,gzip,bz2,zipfile

  • 面向对象

    class ClassName:
    继承和多继承
    类的专有用法 _init_ 构造函数 , _del_ 析构函数


  • 正则表达式
    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。对字符串的过滤逻辑。

    re.match 与 re.search区别 前者只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
    re.sub 替换字符串的匹配项
    compile

  • CGI

    common gateway interface ,通用网关接口

  • MySQL

    PyMySQL 连接数据库

-网络编程

Socket 套接字
Socket serve
Python Internet模块

-XML解析
extensible Markup Language 可扩展标记语言

-JSON数据解析

json.dumps():对数据进行编码。
json.loads():对数掘进行解码。

持续更新新体会和内容