关于
该学习笔记为本人学习Bilibili上尚硅谷的教程的记录.
注释
单行注释
代码语言:javascript复制# 注释内容
快捷键 : ctrl /
多行注释
代码语言:javascript复制 '''
注释内容
'''
变量
常用变量
int
代码语言:javascript复制a = 12
- float
b = 1.2
- boolean
gender_1 = True
gender_2 = False
- string
#单引号、双引号(单个中不能混用,就近匹配)
s0 = 'Hello python'
s1 = '"zzz"' # Yes
s2 = ''sss'' # No
s3 = ""zzz"" # No
- list 列表
name_list = ['Amy', 'Bob']
- tuple 元组
age_tuple = (18, 19, 20, 21)
- dict 字典
# xxx = {key:value, ...}
person = {'name':'小明', 'age' : 18}
查看类型及命名规则、规范
查看变量
数据有类型,变量没有类型
xxx = '???'
print(type(xxx))
命名规则、规范
字母 下划线 数字,且不能数字开头
严格区分大小写
不能使用关键字
- 驼峰命名
- 小驼峰
- userLoginFlag
- 大驼峰
- FirstName
- 小驼峰
- 下划线
- user_login_flag
类型转化
代码语言:javascript复制float --> int 只取整数部分
True ---> 1
False --> 0
字符串有非法字符转不了,如:
a = '1.64'
b = int(a) # NO
c = float(a) # Yes
z = str(y)
结果转为Bool是False:
- 0
- 0.0
- ''
- []
- ()
- {}
格式
代码语言:javascript复制x = int(a)
运算符
算数运算符
代码语言:javascript复制 , -, *, /
// 整除
% 取余
** 幂
** > */%// > -
字符串的 为拼接
字符串的乘法, 将字符串重复几次
号两端格式一样
赋值运算符
代码语言:javascript复制b = c = 20
d, e, f = 3, 4, 5 # 逗号分隔
复合赋值运算符
代码语言:javascript复制a = 3
# *=, -=, /=, //=, %=, **=
比较运算符
代码语言:javascript复制# 返回bool
# ==, != (<> -- python2), <, <=, >, >=
逻辑运算符
代码语言:javascript复制and, or, not
# 性能优化
# and(短路与)
36 > 10 and print('111')#输出111
36 < 10 and print('111')#不输出
# 前面是false,后面就不执行了
# or(短路或)
# 同理,or前面是true,后面就不执行了
输入输出
输出
代码语言:javascript复制#普通输出
print('xxx')
print('xxx' str(xx))
#格式化输出
# %s, %d
name = '小明', age = 18
print('aaaa%s, bbbb%d' % (name,age))
输入
代码语言:javascript复制# 读入的是字符串
account = input('请输入账号‘)
流程控制
if - else - elif
代码语言:javascript复制a = 2
if a > 18:
print('Yes')
elif a > 5:
print('No')
else:
print('error')
for
代码语言:javascript复制# 字符串
s = 'China'
for i in s:
print(i)
# range(5)
for i in range(5):
print(i)
# 0, 1, 2, 3, 4
# rawnge(1, 6)
# 1,...,5
# range(1, 10, 3)
# 1, 4, 7
# list
# 遍历元素
for i in a_list:
print(i)
# 遍历下标
for i in range(len(a_list)):
print(a_list[i])
数据类型常用方法
字符串
代码语言:javascript复制#获取长度
a = len(s)
#返回第一次出现的位置
a = s.find('a')
#判断开头结尾,返回Bool
a = s.startswith('c')
a = s.endswith('n')
#出现次数
a = s.count('a', 2, 5) # [2, 5) 区间参数可加可不加
#替换
s.replace('c', 'd', 3) # old, new, max times
#切割
s = '1#2#3$4'
a = s.split('#') # a -- list
#大写
s2 = s1.upper()
s3 = s1.lower()
#去除 - 只能去除开头和结尾,中间不去
s = s.strip() #去空格
s = s.strip('0')
s = s.strip('12') #'21'也去..
#拼接
a = 'a'
s = a.join('hello')
# s = 'haealalao'
列表
crud
字符串
代码语言:javascript复制# append - 在最后添加
food_list.append('xxx')
# insert - 想要插入的位置
# ['a', 'c', 'd']
char_list.insert(1, 'b')
# ['a', 'b', 'c', 'd']
# extend
# list1->list1 list2
list1.extend(list2)
列表
代码语言:javascript复制# [index] - 修改
city_list[2] = 'xxx'
# in - 判断是否在list中
# not in
if 'apple' in food_list:
print('yes')
# 删除
# del [index]
del aList[2]
# pop 删除最后一个元素
aList.pop()
# 根据元素的值删除
aList.remove(3)
元组
元组的元素不能修改
aTuple = (5) # int
aTuple = (5,) #tuple
aTuple = (1, 2, 3, 4)
#访问, index
print(aTuple[2])
切片
字符串、列表、元组都支持
s = 'hello world'
print(s[0])
# hell [a,b)
print(s[0:4])
print(s[1:]) # 从1开始
print(s[:4]) # 到4结束
print(s[0:6:2]) # step
字典
代码语言:javascript复制#定义
man = {'name':'ming', 'age':28}
#访问
print(man['name'])
#引用不存在的key,报错keyerror
print(man.get('name'))
# 查询不存在的sex返回None
print(man.get('sex'))
# 修改
man['name'] = 'hong'
# 不能用get
# 添加
# new key value
man['sex'] = 'male'
# 删除
# del - 1.删指定某一元素 2. 删字典
del man['age']
del man
# clear - 清空字典,但保留字典对象
man.clear()
# 遍历
# 遍历key
# xxx.keys(),所有key的值
for x in man.keys():
print(x)
# 遍历value
for x in man.values():
print(x)
# 遍历key和value
for key, value in man.items():
print(key,value)
# 遍历项/元素
for x in man.items():
print(x)
函数
代码语言:javascript复制# 定义函数
def f1():
print('hello')
# 调用函数
f1()
# 含参函数
def sum(a, b): # a,b - 形参
c = a b
# 位置传参
sum(1, 2) # 1, 2 - 实参
# 关键字传参
sum(b = 200, a = 100)
# 返回值
def sum(a, b):
return a b
print(sum(1, 2))
局部变量和全局变量
函数内部定义的作用范围只有在函数内部
函数外部定义的作用范围都可以
在满足需求的前提下,选择作用域最小的
文件
代码语言:javascript复制# open(path, mode)
# 不能创建文件夹
# w 可写(覆盖), r 可读, a追加,r 读写(文件指针在文件开头,w 读写(覆盖)
# rb以二进制格式打开只读,类似的wb,ab,rb ,wb ,ab
# 打开
# a.txt, ./a.txt, ../a.txt
open('a.txt', 'w')
fp = open('a.txt', 'w')
# 写数据
fp.write('hhh')
# 读数据
fp = open('a.txt', 'r')
# 默认是一字节一字节的读,效率比较慢
content = fp.read()
# 读取一行
content = fp.readline()
# 读取多行,读完(返回列表)
content = fp.readlines()
# 关闭 - 内存不一样
fp.close()
序列化和反序列化
因为对象无法直接写入到文件中,所以要进行序列化再写入
对象 --> 字节序列 --- 序列化
字节对象 --> 对象 --- 反序列化
代码语言:javascript复制fp = open('a.txt', 'w')
nameList = ['ming', 'hong']
# 序列化1 - dumps()
# 将python对象变为json字符串
# 在时使用scrapy框架时,会返回对象
# 引入json模块
import json
names = json.dumps(nameList) # 字符串
fp.write(names)
# 序列化2 - dump
import json
# 相当于把上面的两部合并了
json.dump(nameList, fp)
# 反序列化1 - loads()
# 将json字符串变为python对象
content = fp.read()
res = json.loads(content)
# 反序列化2 - load
import json
# 读的是文件
res = json.load(fp)
fp.close()
异常
代码语言:javascript复制# try:
# 可能出现异常的代码
# except [异常的类型]:
# 提示
try:
fp = open('a.txt', 'r')
fp.read()
except FileNotFoundError:
print('404 not found')