python知识梳理
因公司的weex项目使用python编写了shell脚本,为了后期维护因此开始了python的学习,将其基础语法记录于此用于后期回顾。
python环境安装
windows
请移步到python官网查看文档
mac
mac电脑系统自带了python,你可以使用下面的命令查看当前的python版本。
1 | python --version |
运行python程序
交互式编程
交互式编程不需要提前编写python脚本文件,直接在命令行工具中输入运行代码按回车键即可执行。
进入交互式编程
1
python
退出交互式编程
1
按住ctr+z
脚本式编程
编写好python文件test.py,文件内容如下
1
print ("Hello, Python!")
执行脚本文件
1
python test.py
可执行文件方式
3.1 在test.py文件头部添加如下代码,用来指明解释器指令。
1
2# 注意"#"是注释符号,但是"#!"不是注释(是shebang标识符)
#!/usr/bin/python3.2 在命令行中输入如下命令即可执行test.py
1
./test.py
python语法
基础语法
python没有传统编程语言的{}用来指明代码块,也没有访问修饰符用来控制变量的访问权限。python有其特定的基础语法,下面来一一介绍。
单下划线标识符_
1
_foo # _ 代表不能直接访问的类属性(类似protected),不能用 from xxx import * 而导入
双下划线标识符
1
2__foo # 以双下划线开头代表类的私有属性(类似private)
__foo__ # 以双下划线开头和结尾的代表python里特殊的标识,比如 __init__()代表构造函数缩进(因为没有”{}”靠对称缩进管控代码)
1
2
3
4if True:
print ("True") // 一般是4个空格
else:
print ("False") // 如果缩进和上一个没有对称执行会报错多行语句
python语句中一般以新行作为语句的结束符,但是我们可以使用斜杠( \)将一行的语句分为多行显示。
1
2
3
4
5
6
7# 使用\连接多行语句
total = item_one + \
item_two + \
item_three
# 在[]、()、""语句中不需要多行连接符
days = ['Monday', 'Tuesday', 'Wednesday','Thursday',
'Friday']引号’’ 、””、 “”””””
1
2
3world0 = '这是一个属性' # 单引号
world1 = "这也是一个属性" # 双引号
world2 = """这还是一个属性""" # 三引号空行
函数之间、类之间使用空行分隔。
同行多条语句
1
print("hello");print("world")
中文支持
python使用ASCII为默认编码格式,输出中文会报错,可以在文件头部添加下面的代码来解决。
1
2
3# coding=utf-8
# 或者
# -*- coding: UTF-8 -*-注释
1
2
3
4
5
6
7
8
9
10
11# 这是一个单行注释
'''
这是一个多行注释
这是一个多行注释
'''
"""
这也是一个多行注释
这也是一个多行注释
"""
标准数据类型
Number数字
1.1 int
1
2
3# 不需定义访问修饰符和类型
test0 = 1
test1 = -11.2 long(长整型,可代码八进制和十六进制)
1
2test0 = 10241024L
test1 = -0x1928FTT1.3 float
1
2test0 = 1.2
test1 = -0.91.4 complex(复数)
1
2test0 = 3e+26J
test1 = 3.14jString字符串
1
2test = "abcdefg"
print test[1:5] # bcdefList列表
1
2
3
4
5test = [1,2,"a","b","c","3"]
print test # [1,2,"a","b","c","3"]
print test[1:] # [2,"a","b","c","3"]
print test *2 # [1,2,"a","b","c","3",1,2,"a","b","c","3"]
print test + test # [1,2,"a","b","c","3",1,2,"a","b","c","3"]Tuple元组
元组可以说是不能二次赋值的数组
1
2
3
4
5
6test = (1,2,"a","b","c","3")
test[1] = 3 # 非法,元组不允许修改
print test # (1,2,"a","b","c","3")
print test[1:] # (2,"a","b","c","3")
print test *2 # (1,2,"a","b","c","3",1,2,"a","b","c","3")
print test + test # (1,2,"a","b","c","3",1,2,"a","b","c","3")Dictionary字典
同数组一样灵活,区别是字典通过键值对获取,列表通过下标获取。
1
2
3
4
5test = {"key0":"value0","key1":"value1","key1":"value1"}
print test["key0"] # value0
print test # {"key0":"value0","key1":"value1","key1":"value1"}
print test.keys # ["key0","key1","key2"]
print test.values # ["value0","value1","value"]
常用语句
条件语句
1.1 if
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 单判断
test = 1
if test == 0:
print "等于0"
elif test == 1:
print "等于1"
else:
print "等于其他"
# 多判断
test = 1
if test >0 and test<3:
print("0<test<3")
elif not test == 4:
print("test not 4")1.2 python不支持switch
循环语句
2.1 while
1
2
3
4test = 0
while test<10
print "test 等于:",test
test++2.2 for
1
2
3
4
5
6test = ["a","b","c"]
for w in test
print "当前数组内容为:",w
for index in range(len(test))
print "当前数组内容为:",test[index]pass 语句
1
2
3# 定义一个空方法,里面需要使用pass语句,否则会报错
def sample(test):
pass
面向对象编程
python 是一门面向对象语言,支持类的继承、方法重载。
类中的每个方法第一个参数必须是self。
子类重载的方法父类的该方法将不会再调用,如要调用子类可以通过super手动调用。
通过from xxx import Xxx来引入一个类。
如果建立了包目录,需要在包下建立__init__.py文件(可空)用来指明此目录为包目录
father.py 文件
1
2
3
4
5
6
7
8
9
10
11# coding=utf-8
# Father 类
class Father(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def show(self):
print "name: %s,age:%s, sex:%d" % (self.name,self.age,self.sex)son.py 文件
1
2
3
4
5
6
7
8
9
10
11
12# coding=utf-8
from father import Father
# Son 类
class User(Father):
def __init__(self,name,age,sex,score):
Father.__init__(self,name,age,sex)
self.score = score
def show(self):
super(self)
print "score:",self.scoretest.py文件
1
2
3
4
5
6#!/usr/bin/python
# coding=utf-8
from son import Son
son = Son("whh",29,1,90)
son.show()
常用api
日期时间
耗时实现
1
2
3
4
5import time
startTime = time.time() # 1606467920.91 当前时间合成的秒数
# did some thing
print "cost time:%s" %(time.time()-startTime)
OS模块常用api
路径拼接
1
2
3
4
5import os
path0 = "/src/page"
path1 = "test.py"
print os.path.join(path0,path1) # /src/page/test.py获取文件所在的目录
1
2
3
4import os
file_path = "../src/page/test.py"
print os.path.dirname(file_path) # ../src/page/存在文件
1
os.path.exists
SET
set集合不允许有重复的值
添加
1
2setTest = set()
setTest.add(obj)删除
1
2
3setTest = set()
setTest.add(obj)
setTest.remove(obj)获取
1
2
3
4setTest = set()
setTest.add(obj)
for obj in setTest
print ("obj:",obj)取2个set的差集
主要需要定义新的变量来接收返回值
1
2
3
4
5x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}
# 返回一个集合,元素包含在集合 x ,但不在集合 y
z = x.difference(y)
print(z) # {'cherry', 'banana'}2个set取合集
主要需要定义新的变量来接收返回值
1
2
3
4x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}
z = x.union(y)
print(z) # {"apple","banana","cherry","google","microsoft"}
字典常用api
匹配元素是否在dic
1
2
3
4
5
6dic = {"key0":"value0","key1":"value1","key2":"value2"}
if "key0" in dic:
print "contain"
else:
print "not contain"
# >>> contain更新dic
1
2
3dic = {'one': 1, 'two': 2, 'three': 3}
dic.update({'one':4.5, 'four': 9.3}) # update只影响dic
print(a) # {'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}
问题记录
import 第三方模块识别不了
原因
1
2
3
4
5"""
import oss2 为例
你的系统中有python2和python3两个版本
可能你的项目ide使用的是python3,但是通过pip安装的oss库,而pip只为python2服务
"""解决
1
2
3
4"""
1. 可以将你的ide python版本更换为python2
2. 或者通过pip3 安装oss
"""