人生苦短,我学python
“Life is short ,I Use Python”,Python 之所以可以那么火,是因为它不但功能强大(web、爬虫、AI、数据挖掘与大数据分析、机械学习等等),而且还非常易学(Python 都已经进入部分小学教材了!),如果人的一生只能学习一门语言,我的选择是 Python ..
碎碎念不多废话,主要目的是记录和再走一遍基础。
Python2 还是 Python3 ..
如果是两年前问题,毫无疑问Py2,因为那时候Py2的库大部分没有支持Py3,现在有一点点流行的库都会Py3都会有,而且,Py2官方快不维护了,Py3才是未来!
安装过程:官网下载最新版本:https://www.python.org ,双击 python-3.x.x.exe ,勾选 Add Python 3.x to PATH,单击开始安装 ,完成~。安装成功之后,如果有添加环境变量,按 Win+R 键,输入 cmd 调出命令提示符,输入 python即可进入python交互模式界面,也可以找到 idle ,双击进入也可进入交互模式界面。。
基础点
- 编码:默认utf-8,使用 # -*- coding: cp-1252 -*- 改变编码;
- 注释:# 或 ''' 或 """;
- 变量:字母或下划线 _开头、区分大小写(同php),变量无限定义类型但必须赋值;
- del:删除变量,如 a = 123# 定义变量, del a # 删除变量
- 运算符:除 整除 // 、幂 ** 外,其它与php相差不多,但不支持 && || 的写法;
- 代码块:相对php等语言使用{ ... } 表示代码块,Python使用缩进来表示代码块、一行语句太长可用反斜杠(\)分行;
- 输入输出:input()等待输入,print(xxx, end=',')可输出全部类型数据,注意这里参数end,是每个内容间的连接字符;
- 模块:模块即文件,使用不同的模块需要 import 或者 from...import 导入;
- 解释器:支持交互式编程和脚本式编程
python3数据类型
Python3 中有六个标准的数据类型:
- Number(数字): int、float、complex(复数)、bool(布尔值之所以在这里,因为py2中没有True或False,只有0或1)
- String(字符串):注意 转义符:/ 连接符:+* 索引和切片:str[n]、str[n:m] 值不可变
- List(列表): List写在方括号之间、如 ["this","is","list"],可以被索引和切片、可被+*拼接、值可变可重复
- Tuple(元组):List写在小括号之间、如 ("this","is","list"),可以被索引和切片、可被+*拼接、值不可变可重复
- Set(集合):使用大括号 { } 创建,不可被索引和切片、可被+*拼接、值可变不可重复、和高中数学一样可以作交集、并集、差集等运算
- Dictionary(字典):{key:val...}的映射关系,特点类似php的数组,key不可变不可重复
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
数字(number)
- 进制表示:二进制:0b1011、八进制:0o13 、十六进制:0xb都表示十进制的 11
- 进制转换:二进制:bin( 0o13 )、八进制:oct(0o13) 、十进制:int(0o13)、十六进制: hex(0o13)
- 布尔值:True 或 False,首字符必须大写
- 常用函数:abs(x):取绝对值、max(1,2,3):取最大值、min(1,2,3):取最小值,pow(2,4) :相当于2**,round(2.678,2):四舍五入保留n位数...
import math 之后,math.ceil(x):向上取整、math.floor(x):向下取整..
import random之后,random.randrange(100,999) :在100-999内随机一个数..
字符串(string)
定义测试字符串:a="hello "; b = "world"
- 切片:访问字符串中的值,如a[0] # "h",a[0:2] # 'he',发现左闭右开原则,不包含第三个字符串。
- 运算:a+b # 'hello world',a*3 # 'hello hello hello ',"wo" in b # True
- 格式化:print ("我叫 %s 今年 %d 岁!" % ('小明', 10)),
- 转义符(\):\(在行尾时),表示续行(纯粹为了好看),其它类似PHP,如\\,\',\n,\f等
- 常用函数:
a.capitalize():第一个字符大写,a.lower():全部小写,a.upper():全部大写...
a.count("o",0,10):在字符串ad的[0:10]间“o”出现的次数,a.find("o",0,10):“o”出现的位置,没有则“-1”,a.index("o",0,10):同find,没有则报异常...
a.isalnum():字符串a是否全部是数字或字母,a..isalpha():是否全部是字母,a.isdigit():是否全部是数字,a.isdigit():是否全部是数字...
a.replace("h","H"):替换子字符串,len(a):字符串长度,max(a):最大的字母,min(a):最小的字母,a.strip():去除两边空白符
由字符串常用内建函数可见,python一切皆对象的特性..(意思是说,字符串本身就是一个对象)
列表(list)
定义一个测试列表:list = [1,"a","2","b"]
- 切片:访问列表中的值,同字符串,如:list[0] # 1、list[-2:] # ['2', 'b']
- 增:b.append("new"):末尾添加元素"new"
- 删:del list[0],删除第0个元素,同b.pop(0),将第0个元素弹出,通过append和pop可以将列表作为栈使用
- 改:list[0] = [1,2] ,将第0个元素改为[1,2]列表(嵌套)
- 运算:[1,2]+[2,3] # [1, 2, 2, 3]
- 常用函数:
len(list):计算列表元素数量,max(list):列表中元素最大值,min(list):列表中元素最小值,list((1,2,3)):将元组转换为列表,这里注意的是,之前定义了个变量list = xxx,所以使用list()会保错,所以,定义变量时不要使用关键字..
list.count(2):计算列表中元素2出现的次数,list.index(2):计算列表中元素2第一次出现的索引位置...
list.insert(2,"new"):在索引2中插入元素"new",list.remove("new"):移除第一个指定的元素..
list.sort():排序,默认升序,list.sort(reverse=True):降序,list.reverse():将原列表倒序
元组(Tuple)
Python 的元组与列表类似,不同之处在于元组的元素不能修改;
定义一个测试元组:t = (1,"a","2","b")
- 切片:访问元组中的值,发现切片都是相同的,eg: t[:10:2] #前十个数中,每2个数取一个
- 运算:(1,2)+(2,3) # (1, 2, 2, 3),len((1, 2, 3)) # 3 ,3 in (1, 2, 3) # True,for x in (1, 2, 3): print (x,)
- 常用函数:tuple([1,2,3]):转元组类型
除了对元组元素修改的函数外(eg:sort、remove、append),其它与列表类似(eg:index、count)
字典(dict)
定义一个测试字典:d = {"a":1,"b":2}
- 增删改查:d["c"] = 3 # 增 、 del d["c"] # 删 、 d["a"] = "not 1" # 改、 d["a"] # 查 (不支持切片)
- 键的特性:如有重复,取最后一个; 并且key的类型不可是dict\set\list\tuple
- 常用函数:
d.clear():清空字典键值、d.get("a"):查询"a"对应的值,无则返回none,"key" in d:"key"在字典d是否存在、list(d.keys()):取出全部key,并转为列表、list(d.values()):取出全部val,并转为列表,d.pop("a"):放回并弹出指定key-val
c = d.copy():相当于另外创建一个和d一样的字典c,这里区分c = d,这种方式只是将c和d同时指向同一内存空间,相当于php中的 $c = &$d,而c = d.copy()才相当于 $c = $d
集合
集合(set)是一个无序的不重复元素序列。(完全等同高中数学的集合知识)
定义一个测试集合:s = {"a",2,"c",2} # 2只会保留一个
- 新增:s.add("new") # 添加一个元素、 s.update({1,2,3}) # 添加多个元素(不支持切片)
- 删除:s.remove("new") # 不存在报错 、s.discard("new") # 不存在不会报错、s.pop() : 随机删除一个元素、s.clear():清空集合元素
- 运算:{1,2,3} & {2,3,4} # 取交集 、{1,2,3} | {2,3,4} # 取并集、{1,2,3} - {2,3,4} # 取差集 、s1.issubset(s2}) # 判断s1是不是s2的子集、s1.symmetric_difference(s2) # 去掉s1和s2都有的元素的集合
总之,高中数学用过的运算都得以实现
条件控制
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
- 每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
- 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
- 在Python中没有switch – case语句。
- py的三目运算: print(x if(x>y) else y) 而不是 print( x > y ? x : y )
循环语句
Python中的循环语句有 for 和 while。( for循环类似php中的 foreach 循环 )
# while 循环
counter = 10;
while counter <= 20:
counter+=1;
print(counter);
else:
pritn("没有了");
# for 循环
a = [1,2,3,4,5,6,7,9,10,11];
for x in a:
if x%2 != 0:
print(x);
else:
print("没有了")
最大的特色是循环后还有 else:语句块,其它诸如 continue 、 break 不变。
函数
相对于其它语言,定义python的函数基本结构:
def 函数名(参数列表):
函数体
特色:
- 定义:以 def 关键词开头,定义方法与众不同啊!
- return: 无 return时
默认结果为None,
return可返回多个值
,多个值会集合到元组内返回。
- 不定长参数:参数前添加 * 符号可传递任意多的参数,参数们会通过一个tuple传递进入函数体内部。
- 关键字参数:默认关键字参数这样定义**kw,然后调用函数时,通过(end="123")的方式传入任意参数。
- 匿名函数:定义的方式也很特别,如:lambda [arg1 [,arg2,.....argn]]:expression。
- 传入函数:类似PHP的可变函数,将函数名称作为参数传入,在传入的参数后加上括号即可调用传入函数。
- 返回函数:在函数内部定义函数,并且将内部函数名称返回,即,在调用获取返回的结果后加上括号才能获取真正的结果,想想有什么用..
装饰器
python 里一切皆对象,由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。
# 这里就用了 返回函数
def decorator(func):
def wrapper(*args,**kw):
print("to do something...")
func(*args,**kw)
return wrapper
# 只需要在需要修改的额函数中添加@装饰器名称
@decorator # 相当于执行decorator(f1(a,b))
def f1(a,b):
print(a+b)
f1("hello ","world!")
装饰器的存在意义:批量修改函数,只要在需要修改的函数上加装饰器
迭代器
简单认为迭代器是可以记住遍历的位置的对象,有两个基本的方法:iter() 和 next()。
- - iter(): 获取可迭代对象身上的迭代器, 会调用可迭代对象身上的iter的方法
- - next():获取迭代器中的下一个值,会调用迭代器对象身上的next的方法
>>>list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
由此可见,python 在输出一个迭代器的元素之后,指针往下移,查找到下一个元素。
创建迭代器:需要在类中实现两个方法 __iter__() 与 __next__() 。
列表生成式
快速创建列表的方式,如下:
>>>[x * x for x in range(1, 11) if x % 2 == 0]
# [4, 16, 36, 64, 100]
>>>[m + n for m in 'ABC' for n in 'XYZ'] # 两层嵌套
# ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
# 对比map()函数
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5]))
[1, 4, 9, 16, 25]
关于map()函数:map()
函数接收两个参数,一个是函数,一个是序列,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。类似map()函数的还有reduce()、filter();
生成器
# 略 : https://www.liaoxuefeng.com/wiki/897692888725344/923029685138624
模块
# 略:https://www.liaoxuefeng.com/wiki/897692888725344/923030456892352
面向对象
#略:https://www.liaoxuefeng.com/wiki/897692888725344/923030496738368
更新待续..