【学习笔记】Python基础

Python
471
0
0
2022-11-30
标签   Python基础

关于

该学习笔记为本人学习Bilibili上尚硅谷的教程的记录.

注释

单行注释

# 注释内容

快捷键 : ctrl + /

多行注释

  '''
      注释内容
  '''

变量

常用变量

int

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

类型转化

float --> int 只取整数部分
True ---> 1
False --> 0
字符串有非法字符转不了,如:
    a = '1.64'
    b = int(a) # NO
    c = float(a) # Yes
    
    z = str(y)

结果转为Bool是False:

  1. 0
  2. 0.0
  3. ''
  4. []
  5. ()
  6. {}

格式

x = int(a)

运算符

算数运算符

+, -, *, /
// 整除
%  取余
** 幂

** > */%// > +-

字符串的+为拼接 字符串的乘法, 将字符串重复几次 +号两端格式一样

赋值运算符

b = c = 20
d, e, f = 3, 4, 5 # 逗号分隔

复合赋值运算符

a += 3
# *=, -=, /=, //=, %=, **=

比较运算符

# 返回bool
# ==, != (<> -- python2), <, <=, >, >=

逻辑运算符

and, or, not

# 性能优化

# and(短路与)
36 > 10 and print('111')#输出111
36 < 10 and print('111')#不输出
# 前面是false,后面就不执行了

# or(短路或)
# 同理,or前面是true,后面就不执行了

输入输出

输出

#普通输出
print('xxx')
print('xxx' + str(xx))

#格式化输出
# %s, %d
name = '小明', age = 18
print('aaaa%s, bbbb%d' % (name,age))

输入

# 读入的是字符串
account = input('请输入账号‘)

流程控制

if - else - elif

a = 2
if a > 18:
    print('Yes')
elif a > 5:
    print('No')
else:
    print('error')

for

# 字符串
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])

数据类型常用方法

字符串

#获取长度 
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

字符串

# 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)

列表

# [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

字典

#定义
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)

函数

# 定义函数
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))

局部变量和全局变量

函数内部定义的作用范围只有在函数内部 函数外部定义的作用范围都可以 在满足需求的前提下,选择作用域最小的

文件

# 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()

序列化和反序列化

因为对象无法直接写入到文件中,所以要进行序列化再写入

对象 --> 字节序列 --- 序列化

字节对象 --> 对象 --- 反序列化
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()

异常

# try:
#      可能出现异常的代码
# except [异常的类型]:
#      提示

try:
    fp = open('a.txt', 'r')
    fp.read()
except FileNotFoundError:
    print('404 not found')