python入门
Python3.0+ 基础
常用类常用方法
Hello World
中文编码在文件开头加入
# -*- coding: UTF-8 -*-
或者# coding=utf-8
# 单行注释
“”“ 多行注释 多行注释 ”“”
打印输出
print('Hello World')
打印多个变量
print(username,password)
输入数据
username = input('请输入账号:')
标识符严格区分大小写,不能以数字开头
层级代码以4个空格缩进【强制】
if 1 > 2: print("1大于2") else: print("1小于2")
常量和变量
常量:在程序中固定不变的值 如:
1, 2, 3, 'code', 'hello'
变量:存放数据的容器 如:
username = 'lucy'
- 符合标识符的规范,区分大小写,正例:
user_name
反例:userName
- 变量需要初始化才能使用
- 变量没有数据类型,变量中的对象可以使用
type(var)
函数查看对象数据类型
数据类型
- 数值 整数(int),小数(float),复数
- 数值是不可变对象
- 表示方式,二进制,八进制,十进制,十六进制
- 数值之间的转换,
bin(var), oct(var), int(var), hex(var)
表达式操作
加减乘除:
+ - * /
整除//
取余%
次方
x**y
/pow(x,y)
绝对值abs(var)
字符串转数值
int("123")
- 随机数
import random
1-10之间的随机数
random.randit(1,10)
查看模块有哪些方法
dir(random)
, 查看方法帮助help(random.randit)
- 布尔类型 True,False
- 可以和数值直接参与运算
- 把True,False转换为数字 True --> 1, False --> 0
- 数字转布尔类型,0 --> False, 非0都为 True
- 字符串转布尔类型, 空字符串为False, 非空字符串都为 True,函数
bool(str)
例: False = bool(''),True = bool('1')
字符串
- 基本操作&分片
表示字符串-> 单引号,双引号,三重引号
var = 'code', var = "code", var = """code"""
字符串是有序的,可以通过索引获取单个字符,或子字符串
var = 'hello world' pirnt(var[0]) # h # 前闭后开 print(var[1:4]) # ell print(var[:4]) # hell print(var[1:]) # ello world # 最后一个字符 print(var[-1]) # d # 取索引为 2 4 6 8 10 的字符,步长为2 print(var[::2]) # hlowrd # 反向输出字符串 print(var[::-1]) # dlrow olleh # 取最后三个字符 print(var[-3:]) # rld # 数字转字符串 函数str() print(str(123)) # 123 # 查看对象hash值 函数id() print(id(var)) # 4435781232 # 查看字符串长度 print(len(var)) # 11 # 查看对象类型 print(type(var)) # <class str> # 字符串加法和乘法 print('1' + str(2)) # 12 print('=' * 10) # ==========
- 转义字符
\
\\
斜杠,\'
单引号,\“
双引号,\n
换行符,\t
制表符,\r
回车在字符串前面加上r,raw代表原始字符串,不在具有转义意义
filename = r"C:\bin\table\name"
- 字符串转换
对象-->字符串 str(), 字符-->unicode编码 ord(), unicode编码-->字符chr()
# 字符串连接 print(‘123’ + str(123)) # 123123 # 返回字符对应的unicode编码 print(ord('a')) # 97 # 返回unicode对应的字符 print(chr(97)) # a
- 字符串格式化
方式一:属性占位符
%s 字符串, %d 数字, %f 浮点数
name = 'lucy' age = 19 print("My name is %s"%name) text = "My name is %s" print(text%name) print("My name is %s,I am %s"%(name,age))
方式二:format函数,位置占位符
text = "My name is {},I am {}" 等同于 text = "My name is {0},I am {1}" print(text.format(name,age)) job = "My job is {0},your job is {0}" print(job.format("IT"))
方式三:format函数,名称占位符
text = "My name is {name},I am {age}" print(text.format(age = 19, name = 'lucy')) print(text.format(name = name,age = age))
- 字符串常用方法
查找(-1) find(), 查找(error) index(), 替换 replace(), 分割 split()
合并 join(), 去除首尾空格 strip(), 字符串<-->字节 encode(), decode()
x = 'Study for a day,Study for a day' print(x.find('Study')) # 0 print(x.find('ooxx')) # -1 print(x.index('Study')) # 0 print(x.index('ooxx')) # 报错 print(x.replace('day', 'year')) # Study for a year,Study for a year print(x.split(',')) # ['Study for a day', 'Study for a day'] x = ['1', '2', '3', '4'] print(''.join(x)) # 1234 print(','.join(x)) # 1,2,3,4 x = ' c o d e ' print(x.strip()) # c o d e x = '你好' y = x.encode('utf-8') print(x.encode('utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd' print(y.decode('utf-8')) # 你好
逻辑运算
复合运算符:
x+=y
等于x = x + y
关系运算符:
>, <, >=, <=, ==, !=
逻辑运算符: 逻辑与
and
逻辑或or
逻辑非not
and 返回第一个为False的值,否则返回最后一个值 or 返回第一个为True的值,否则返回最后一个值 not 取反,not x,x为True时返回False,x为Flase时返回True
成员关系:
x in y
x not in y
x = 'code' y = 'hashcode' print(x in y) #True print(x not in y) #False
实体对象
x is y
x is not y
x = 'code' y = x print(x is y) #True print(x == y) #True print(x is not y) #False is 比较的事地址值,== 比较的是两个值是否相等
流程控制
顺序结构: 从上往下依次执行
条件控制语句:
if
,if else
,if elif
,if elif else
if 语句:
if 1 > 0 : print(1大于0)
if else 语句:
amount = int(input('请输入订单金额:')) if amount >= 100: print('顺丰包邮') else: print('菜鸟包邮')
if elif else 语句:
amount = int(input('请输入订单金额:')) if amount >= 100: print('顺丰包邮') elif amount >= 68: print('菜鸟包邮') else: print('邮费自理')
循环结构
while 循环
# 说一百次我爱你 start = 1 while start <= 100: print('I love your {}次'.format(start)) start += 1 # 计算1~100的和 sum = 0 while start <= 100: sum += start start += 1 print(sum)
for 循环
通常用于遍历列表,元组
for item in [1,2,3,4]: print(item)
高级数据类型
列表
- 创建列表
list = [1,2,3,4]
list = [1,'b',3,4,'code','a']
- 列表是有序的集合,可以通过索引,分片进行元素的操作
- 列表是一个可变对象,对于列表中的每个元素,可以进行修改,删除等操作
- 列表中的元素数据类型可以是任意的数据类型,数字,字符串
- 列表可以嵌套,列表中的元素可以是列表
- 列表中存放的是每个元素的对象的引用
列表中数据的表示方式是使用一对中括号[],每个元素之前使用逗号,隔开
- 列表的增删改查
增
list.append(100)
删del list[0]
改
list[0] = 10
查var = list[0]
- 分片增删改
# 拷贝 list2 = list[:] # 插入 list[0:0] = [11, 22] #[11, 22, 1, 2, 3, 4] # 删 del list[0:3] # 改,先删除索引为0的元素,再插入新元素 list[0:1] = [11, 22] #[11, 22, 2, 3, 4]
- 连接符
+
和复制符*
列表中保存的都是对象的引用
list = [1,2] list2 = [3,4] print(list + list2) #[1, 2, 3, 4] list4 = [1, [2]]*2 print(list4) #[1, [2], 1, [2]] list4[0] = 100 print(list4) #[100, [2], 1, [2]] list4[1][0] = 200 print(list4) #[100, [200], 1, [200]] <----!!!---->
- 列表常用方法
追加元素
append
合并列表extend
插入insert
删除值remove
返回元素索引
index
返回元素个数count
是否存在in
排序
sort
反转reverse
list = [1, 2, 3] print(list) #[1, 2, 3] # 追加 list.append(100) print(list) # [1,2,3,100] # 合并 list.extend([1, 2, 3]) print(list) #[1, 2, 3, 100, 1, 2, 3] # 插入 list.insert(0, 'a') print(list) # ['a', 1, 2, 3, 100, 1, 2, 3] # 删除 list.remove('a') # 没有这个元素报错 ValueError print(list) # [1, 2, 3, 100, 1, 2, 3] # 查询 print(list.index(1)) #0 print(list.count(1)) #2 # 是否存在 print(100 in list) #True
- 列表推导式
需求: 把字符串转为列表对象
方式一: text = 'hello' list = list(text) print(list) #['h', 'e', 'l', 'l', 'o'] 方式二: list2 = [] for item in text: list2.append(item) print(list2) #['h', 'e', 'l', 'l', 'o'] 方式三:【列表推导式】 list3 = [item for item in text] print(list3) #['h', 'e', 'l', 'l', 'o']
需求: 男女-'MF' 大小-'SMLX'
求出所有组合 ['MS','MM','ML','MX','FS','FM','FL','FX']
list = [] for sex in 'MF': for size in 'SMLX': list.append(sex+size) print(list) #['MS', 'MM', 'ML', 'MX', 'FS', 'FM', 'FL', 'FX'] #列表推导式 list2 = [sex+size for sex in 'MF' for size in 'SMLX'] print(list2)
排除'FX'型号,求出组合 ['MS','MM','ML','MX','FS','FM','FL']
list = [] for sex in 'MF': for size in 'SMLX': if not (sex == 'F' and size == 'X'): list.append(sex + size) print(list) #['MS', 'MM', 'ML', 'MX', 'FS', 'FM', 'FL', 'FX'] #列表推导式 list2 = [sex+size for sex in 'MF' for size in 'SMLX' if not (sex == 'F' and size == 'X')] print(list2)
元组
- Python的元组与列表类似,不同之处在于元组的元素不能修改。
创建元组
当元组中只包含一个元素时,需要在元素后面添加逗号
tuple1 = (50,)
tuple2 = (1,2,3)
访问元组
tuple2[0]
tuple2[0:2]
修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
tuple3 = tuple1 + tuple2
删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
del tuple
range
- python range() 函数可创建一个整数列表,一般用在 for 循环中。
语法
range(start, stop[, step])
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
ran = range(10) print(ran) #range(0, 10) print(ran[-1]) #9 ran = range(5, 10, 2) print(list(ran)) #[5, 7, 9] for item in ran: print(item)
set集合
- 集合(set)是一个无序的不重复元素序列。
- 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合的创建
#空集合 var = set() print(var) #set() # 方式一 var = {1, 2, 3, 1, 2} print(var) # {1,2,3} # 方式二 list = [1, 2, 3, 4, 5, 1, 2, 3] var = set(list) print(var) # {1,2,3,4,5}
集合常用方法
增
add
update
var = {0} print(var) #{0} var.add(100) print(var) #{0, 100} var.add((1, 2, 3)) print(var) #{0, 100, (1, 2, 3)} var.update([1, 2], [3, 4]) print(var) #{0, 1, 2, 3, 100, 4, (1, 2, 3)}
删
remove
discard
pop
var = {1,2,3} var.remove(0) #当元素不存在时报错 var.discard(0) #当元素不存在时不报错 ele = var.pop() #随机删除一个元素,并返回
清空集合
clear
两个集合间的运算
a = set('abrcd') print(a) #{'r', 'b', 'a', 'd', 'c'} b = set('alzam') print(b) #{'a', 'm', 'l', 'z'} # 集合a中包含而集合b中不包含的元素 print(a - b) #{'c', 'r', 'b', 'd'} # 集合a或b中包含的所有元素 print(a | b) #{'z', 'c', 'b', 'm', 'a', 'l', 'r', 'd'} # 集合a和b中都包含了的元素 print(a & b) #{'a'} # 不同时包含于a和b的元素 print(a ^ b) #{'z', 'c', 'b', 'm', 'l', 'r', 'd'}
集合推导式
a = {x for x in range(10) if x % 2 == 0} print(a) #{0, 2, 4, 6, 8}
字典 dict
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
创建语法:
dict = {'name' : 'lucy', 'age' : 20}
增
dict['sex'] = 'girl'
删
del dict['name']
del dict
dict.clear()
改
dict['age'] = 20
查
print(dict['age']) #20
函数 描述 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default dict.update(dict2) 把字典dict2的键/值对更新到dict里 dict.pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 dict.popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)。 dict.items() 以列表返回可遍历的(键, 值) 元组数组 dict.keys() 返回一个迭代器,可以使用 list() 来转换为列表 dict.values() 返回一个迭代器,可以使用 list() 来转换为列表 dict.copy() 返回一个字典的浅复制 数据字典 dict遍历
dict = dict = {'name' : 'lucy', 'age' : 20} keys = dict.keys() #方式一 for key in keys: print('{}-->{}'.format(key,dict[key])) #方式二 items = dict.items() for key,value in items: print('{}-->{}'.format(key,dict[key])) #这里运用的是元组装包和拆包(每一个键值对都是一个元组) #方式三(默认遍历key值) for key in dict: print('{}-->{}'.format(key,dict[key]))
数据字典推导式
#需求:生成1-10之间所有数的平方,并对应起来{1:1,2:4,3:9...} dict = {key:key for key in range(1,10)} print(dict)
对象的拷贝和引用
函数的定义和调用
格式
定义: def 函数名([参数1,参数2,...,参数n]): 函数体 [return 值] 调用: 函数名([参数1,参数2,...,参数n])
模块制作【打包】
常用命令
打包
python3.7 setup.py sdist
安装
python3.7 setup.py install
制作一个setup.py
文件
from setuptools import setup setup( # 项目名称 name="test", # 版本 version="1.0.0", # 作者 author="xxx", # 邮箱 author_email="xxxx@163.com", # 链接 url='http://www.baidu.com', # 描述 description='test', # 需要打包的模块 py_modules=['demo'] )
JSON解析
json.dumps
将 Python 对象编码成 JSON 字符串
json.loads
将已编码的 JSON 字符串解码为 Python 对象
Python JSON Python JSON Python JSON Python JSON dict object list, tuple array str, unicode string int, long, float number import json # json转object jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}' text = json.loads(jsonData) print(text) #{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} # object转json dict = {'name': 'lucy', 'age': 20, 'sex': 'girl'} jsondata = json.dumps(dict) print(jsondata) #{"name": "lucy", "age": 20, "sex": "girl"} # json格式化输出(中文:nsure_ascii=False) jsonformat = json.dumps(dict,ensure_ascii=False,sort_keys=True, indent=4, separators=(',', ': ')) print(jsonformat) # json格式化 { "age": 20, "name": "lucy", "sex": "girl" }
异常处理
简单的
try....except...else
的语法# 首先把文件的写权限去掉chmod -w testfile try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError: print("Error: 没有找到文件或读取文件失败") else: print("内容写入文件成功") fh.close() # 执行结果如下 # Error: 没有找到文件或读取文件失败
打印异常信息到标准错误,就像没有获取一样
# 需要导入traceback模块 import traceback try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except: traceback.print_exc() # 如无需要,可不写else else: print("内容写入文件成功") fh.close()
只打印异常信息
# 需要导入traceback模块 import traceback try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError,e: print(e) else: print("内容写入文件成功") fh.close()
异常的参数
#!/usr/bin/python # -*- coding: UTF-8 -*- # 定义函数 def temp_convert(var): try: return int(var) except ValueError, Argument: print "参数没有包含数字\n", Argument # 调用函数 temp_convert("xyz"); # 执行结果如下 # 参数没有包含数字 # invalid literal for int() with base 10: 'xyz'
自定义异常
class NetworkError(RuntimeError): def __init__(self, arg): self.args = arg
触发异常
level = 0 if level < 1: raise NetworkError("Bad hostname")
日期和时间
import time #获取本地时间 localtime=time.localtime() #格式化时间 print (time.strftime("%Y-%m-%d %H:%M:%S", localtime)) #2019-08-19 17:01:36 %Y 四位数的年份表示 %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数 %M 分钟数(00=59) %S 秒(00-59)
字符串
strip() 删除字符串字符串末尾的空格. splitlines([keepends]) 默认按照行('\r', '\r\n', \n')分隔,返回列表,keepends 为 False,不包含换行符 upper() 字符串中的小写字母转为大写 lower()字符串中的大写字母转为小写 swapcase() 字符串中字母大转小,小转大 replace(old, new [, max]) 将str1替换成str2,不超过 max 次 capitalize() 将字符串的第一个字符转换为大写 isnumeric() 是否是数字 endswith(suffix) 是否以指定suffix结尾 count(str) 返回str出现的次数