python笔记

第一天

一.环境准备

​ python运行环境:真正执行代码运行的环境,安装(把当前安装的路径加到环境变量里)
​ 验证:就是Cmd输入python出现python版本信息
​ pycharm:运行代码的环境,他只是GUI工具,便捷的写代码的功能,然而真正运行python Interpreter,配置你本地的python Interpreter到pycharm上。
​ 新建项目:调整你自己放置的项目的路径
​ 记得查看你本地Existing Environment是否是你安装的python interpreter

二.数据类型

1.概念:整型:int 1,2,3,4,5…整数(正整数和负整数,以及0)
浮点型:float float 1.1, 1.2,3.3 小数(正小数,负小数) 0.0
布尔型:bool True or False
字节:bytes
字符:char
字符串:str(序列)
列表:list(序列)
字典:dic
元组:tuple(序列)
集合:set(序列)
空类型:None
复数:complex(a+bj)
空类型:None
复杂数据类型:tuple,list,dict
2.序列:不是python里的数据类型,序列是组织数据的一种类型,存储的时候,他的下标是从零开始的,访问的时候要通过下标去访问。
**那些不可变数据类型:**基础数据类型,元组
元组可变吗?不可变,真的不可变?
3.复杂数据类型:
元组:tuple_data = (元素1,元素2,元素3)
列表:list_data = [元素1,元素2,元素3]
字典:dict_data = {key:value, key:value, key:value} key-唯一的,不可变类型,value-任意类型。
集合:set去重,是因为它里边不可以存在相同的元素。显式的定义形式:{元素1, 元素2, 元素3},无序的

list_data = [1,2,3,3,4,4,5]
p = set(list_data)
print(p)   #input:{1, 2, 3, 4, 5}

第二天

基本单词解释

​ 大于:greater than
​ 小于:less than
​ 大于等于:great than
​ 小于等于:less than equal
等于:equal
​ +:and
​ —:subtract
​ *:multiple
​ / : divide

一.元组的用法

​ count,index,append(extend)追加,remove移除,reverse反转,sort排序

tuple_data = (1,2,3,4,4,4,5)  
print(tuple_data.count(4)) #input:3   统计个数
print(tuple_data.index(4)) #input:3   统计4所在的下标
tuple1 = [1,2,3,4]
tuple2 = [5,6,7,8]
tuple1.append(tuple2)
print(tuple1)   #input[1, 2, 3, 4, [5, 6, 7, 8]]{}
tuple1 = [1,2,3,4]
tuple2 = [5,6,7,8]
tuple1.extend(tuple2)
print(tuple1)   #input:[1, 2, 3, 4, 5, 6, 7, 8]
#可迭代的有:元组,字符串

二.str的用法

a ="alex lnm"
print(a.center(50,"-"))   #给a两边打印—
print(a.count("l",0,5))  #计数
print(a.endswith("m"))  #判断结尾 返回true 或者fasle
print(a.startswith("a")) #判断开头

print(a.find("e"))   #字符查找,如果找到了,就返回索引,没找到就返回-1
print(a.isdigit())

print("23".isdigit())  #判断是否为整数

l = ["alex","jick","tom"]
print("-".join(l)) #拼接字符串 ,alex-jick-tom

a = a.replace("x","1",2)  #字符串替换,后面的2为替换换几个l
print(a)

print(a.split("l"))  #字符串分割 output: ['a', 'e1 ', 'nm']
list_data = [1,2,3,3,4,4,5]
p = set(list_data)
print(p)  #input:{1, 2, 3, 4, 5, 6, 7}
print(tuple(p))  #input:(1, 2, 3, 4, 5, 6, 7)copy:
在常量里面deepcopy和浅copy相同
#浅copy
list_data = [1,2,3]
copy_data = list_data.copy()
print(id(list_data))
print(id(copy_data))
print(id(list_data[0]))
print(id(copy_data[0]))
#input:
    2220683495680
    2220683596480
    2220678277424
    2220678277424
    
#深copy
from copy import deepcopy
list_data = [1,2,3]
copy_list = deepcopy (list_data)
print(id(list_data))
print(id(copy_data))
print(id(list_data[0]))
print(id(copy_data[0]))
#input:
    2220683846784
    2220683596480
    2220678277424
    2220678277424

三.列表的用法

​ sort,reverse
reverse只能做降序(不能做升序)

list = [1,2,3,4,5,6]
list.sort(reverse=True)
print(list)
list.sort(reverse=True)
print(list)

四.字典的用法

dict = {1:2,3:4,5:6}
print(dict[1])
print(dict[3])
print(dict[5])       #访问字典中的元素
print(dict.keys())
print(dict.values()) #取字典中的值
print(dict.items())  #访问字典中的所有元素
#update 字典合并
dict1 ={7:8,9:10}
dict.updata(dict1)
print(dict)

​ update的用法

dict_data1 ={"姓名":"张三","年龄":"18","班级":"通信"}
dict_data2 = {"爱好":"玩游戏"}
dict_data1.update(dict_data2)
print(dict_data1.items())
print(dict_data1.keys())
print(dict_data1.values() 

dict_items([('姓名', '张三'), ('年龄', '18'), ('班级', '通信'), ('爱好', '玩游戏')])
dict_keys(['姓名', '年龄', '班级', '爱好'])
dict_values(['张三', '18', '通信', '玩游戏'])

五.集合的用法

discard(用这个不会报错),remove(有就移除元素,没有就报错),add

set_data = {1,2,3}
set_data.discard(2)
set_data.add(4)
print(set_data)

第三天

一.切片

python使用下标访问的时候,可以有正的下标,也可以有负的下标,使用负的下标去访问的时候,从-1开始,正的下标从零开始
一个冒号的时候,相当于是我们两个冒号的缩写,相当于省略了步长step
切片:对序列切片,顾前不顾后 print(list_data[2:9:1]) #>=start,stop<,step

二.赋空值

 dict_data = None
 list_data = []
 list_data = list()
 print(list_data)
 tuple_data = ()
 tuple_data =tuple()
 dict_data = dict()
 set_data = set()

三.for循环语句

  for循环打印列表,元组,字典。enumerate的用法
dict = {1:2,3:4,5:6}
list = [1,2,3,4,5,]
tuple  = (1,2,3,4,5)
for i in dict:
    print(dict)
for i in list:
    print(list)
for i in (tuple):
    print(tuple)

for index,value in enumerate(list):
    print(index,value)    #返回下标和下标对应的元素
list_data = [1,2,3,4,5]
tuple_data = (6,7,8,9,0,)
dict_data = {"姓名":"张三","性别":"男","班级":"1801"}
for i in list_data:
    print(i)
for i in tuple_data:
    print(i)
for i in dict_data.keys():
    print(i)
for i in dict_data.values():
    print(i)
for i in dict_data.items():
    print(i)
	for循环打印99乘法表
  for i in range(1,10):
    for j in range(1,i+1):
        print(i,"*",j,"=",i*j,end = "\t")
    print()

break和continue一般都是配合if使用,达到某个条件的时候,停止或者跳出本次循环

for i in range(10):
    if i ==3:
        break   #停止循环,continue是跳出本次循环
    print(i)   #input: 0  1  2

四.if条件语句

# money = 1000
# mr_liang_value = 1500
# if money >= mr_liang_value:
#     print("购买诸葛亮成功")
# else:
#     print("金币不足")

#打印成绩
# score = 80
# if score<=60:
#     print("C")
# elif 85>=score>60:
#     print("B")
# else:
#     print("A")

五.while循环语句

​ 99乘法表

i = 1
while i < 10:
    j = 1
    while j <= i:
        print(i,"*",j,"=",i*j,end="\t")
        j = j+1
    i = i+1
    print()

六.运算符

算数运算符:+ - * / % // **
较运算符:== != > >= < <=
赋值运算符:= += -= *= /= %= **= //=
位运算符:& | ~ 就是进行1和0的操作, ^(异或,相同位取零,不同位取一)
相同相与的时候等于他本身
逻辑运算符:and(且) or(或) not(非,取反)
身份运算符:is is not
成员运算符:in not in (用来测试数据中是否包含了一系列的成员)
进制的转化
所有非零的数字都是真值

七.读取用户输入

name = input("What is your name?")
print("hello"+ name)

第四天

一.错误和异常(运行中)

ZeroDivisonError
IndexError(出现频率最高)
Exception

IndexError    KeyError   ZeroDivisonError 
LookupError
Exception  #所有错误的父类

建议:做精准的异常捕获,把父类异常放在最后,finally应用场景的时候,一般都是关闭或者清理的操作。
二.读写文件
UTF—8:可变长的字符集编码
gb2312,gbk
打开文件的方式:以读的方式打开,以写的方式打开

def open(file, *(重要) 代表打开(读或者写)那个文件
绝对路径/相对路径
mode=‘r’, *(重要的),代表打开文件的方式
读/写的方式,文本/二进制
buffering=None, 缓存
encoding=None, *(重要的),编码:UTF-8,GBK
errors=None, 错误处理:strict
newline=None, 新起一行
closefd=True): 关闭文件描述符(Linux中用的比较多)

file_obj = open("review.txt",mode='rt',encode="utf-8")
data = file_obj.read()
file_obj_w = open("huyi.txt",mode="w",encoding="utf-8")
file_obj_w.write(data)
file_obj.close()
file_obj_w.close()  
#copy  review.txt 到 huyi.txt
普通copy
file_obj = open("图片.jpg","rb")
data = file_obj.read()
file_obj_w =open("图片_2.jpg","wb")
file_obj_wwrite(data)
file_obj.close()
file_obj_w.close()

with的用法
with open("图片,jpg","rb") as file_obj:
 	 data = file_obj.read()
 	 with open("图片2.jpg","wb") as file_obj_w:
 	 	  file_obj_w.write(data)

Character Meaning


​ ‘r’ open for reading (default)
​ 默认方式:读
​ ‘w’ open for writing, truncating the file first
​ 写的方式打开,写先删除文件然后新建文件
​ ‘x’ create a new file and open it for writing
​ 写:创建新文件,为了写打开
​ ‘a’ open for writing, appending to the end of the file if it exists
​ 写的方式打开,然后追加在文件的末尾
​ ‘b’ binary mode
​ 二进制模式
​ ‘t’ text mode (default)
​ 默认:文本模式
​ ‘+’ open a disk file for updating (reading and writing)
​ 打开磁盘文件更新
​ ‘U’ universal newline mode (deprecated)
rb 2进制只读模式/wb 2进制创建模式,若文件已存在,则覆盖旧文件/ab 2进制追加模式,新数据会写到文件末尾

用python打开.py文件

f = open("3.13.py")
print(f.read())

三.模块

3.1 一个python文件(.py)就是一个模块
可以被其他模块引用
import 模块 (导入模块)
from 模块名 import 函数/变量/类
几个常用的模块:random,sys,os,re,copy

模块的调用
from copy import deepcopy   as  dc 

import copy   #导入多个模块用逗号分隔
copy.deepcopy()

四.包,输入和输出

格式化输出
name = 111
age = 18
print("my name is",name,"my age is",age)
print("my name is %s,my age is %d" % (name,age))
print(f"my name is {name},my age is {age}")
#input:my name is 111 my age is 18

format函数

print("my name is {},my age is {}".format(name,age))
print("my name is {0},my age is {1}".format(name,age))

^:居中对齐 ,<:左对齐,>:右对齐
print("{0:5}{1:15}{2:^30}".format(“姓名”,“13800000000”,“陕西省西安市鄠邑区”))

人类可读(str),python解释器可读(repr)

第五天

一.函数

def function_name(arg-参数列表):
statement1
return values = 需要有返回值,要使用return,可以return多个值
形参:形式参数,定义函数时叫形参
实参:实际参数,实际传递时叫实参
函数也是数据类型

*args:参数的复数arguments: 可以传递多个参数
*args:是将传入的参数打包成一个元组,不确定传入参数的个数,使用 *args
**kwaargs:1个或多个关键字参数,并且把它打包成字典

def test_arg(arg1,arg2=None):
    print(arg1)
    print(arg2)
test_arg("arg1")
test_arg("arg1","arg2")
arg1:位置参数    arg2: 关键字参数

关键字参数必须放在列表的末尾,从第一个关键字参数开始,后边必须都是关键字参数

用函数打印99乘法表

def nine_miu_nine(number):
    if number in (1,2,3,4,5,6,7,8,9):
        for i in range(1,number+1):
            for j in range(1,i+1):
                print(i,"*",j,"=",i*j,end = "\t")
            print("\n")
    else:
        print("不合法")
nine_miu_nine(9)
# /前面是位置参数  *后面必须是关键字参数
def test_get(value1,value2,/,*,kwd1,kwd2,):
    print("test_get")
test_get(1,2,kwd1 = 5,kwd2 = 6)

文档字符串
怎么去对函数进行注解:参数的注解返回值的注解

list_data = [2,3,4,5,0,8,6,9]
list_data.sort()
print(list_data)

def function_sort(element):
    return element%2
list_data.sort(key=function_sort)

lambda表达式 定义格式:lambda argument:expression

list_data.sort(key = lambda element : element % 2)

python高阶函数
map,reduce,filter,zip
map的结果:取决于你最短的里面有几个元素,取决于你有几个列表
每个元素里有几个值,取决于返回值

list_data_1 = [1,2]
list_data_2 = [3,4,5]
list_data_3 = [6,7,8,9]

def function_test(i,j,x):
    return i + 1, j + 1,x + 1
for i in map(function_test,list_data_1,list_data_2,list_data_3):
    print(i)
#input:	(2, 4, 7)
		 (3, 5, 8)

map的返回值可以通过list转换,所以map obj是一个序列。
list_data = list(map(function_test,list_data_1,list_data_2,list_data_3))
filter:过滤
data = list(filter(lambda x : x % 2,[1,2,3,0])) #input:[1, 3]

reduce:迁移到functools这个模块中,将序列中的元素应用到两个参数的函数进行累积操作
from functools import reduce
data = reduce(lambda x,y : x*y ,[1,2,3,4,5])
print(data) #input:120
zip:输入的是可迭代的对象,输出:多个元组
结束的条件:其中最短的耗尽了
最后返回:zip object
zip obj有几个元素,取决于最短的可迭代对象长度
每个元素有几个值,取决于传了几个可迭代对象
chr:把数字转成字符
ord:把字符转成数字

import sys #我们和python解释器进行交互用的
for path in sys.path:
    print(path)

import os #operation system 是我们和操作系统进行交互的

#正则表达式:用特殊的字符去匹配你的字符

第六天

类里面可以包含那些东西
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1qOX8KA-1620912256487)(F:%5Cpython%5Cnotbook%5Cpython%E7%AC%94%E8%AE%B0.assets%5Cimage-20210411212914691.png)]

类的组成:类属性,实例方法,类方法,静态方法
属性:数据属性,方法属性
数据属性:变量
方法属性:函数
继承:inherit

多继承:

class Animals(object):
    def __init__(self,name):
        self.name = name

    def run(self):
        print(f"{self.name} is running")

class Lion(Animals):
    pass
class Tiger(Animals):
    pass

lion = Lion("狮子")
tiger = Tiger("老虎")
print(lion.name)
print(tiger.name)
lion.run()
tiger.run()

单继承:
多态:

class Animals(object):
    def __init__(self,name):
        self.name = name
    def run(self):
        print(f"{self.name} is runing")

class Lion(Animals):
    pass
class Tiger(Animals):
    pass
class Elephant(Animals):
    pass
def play(animals):
    animals.run()
lion = Lion("Lion")
tiger = Tiger("Tiger")
elephant = Elephant("Elephant")
play(lion)
play(tiger)
play(elephant)

函数重载:根据参数的个数去调用

def test(arg1):
    print("test1")
def test(arg1,arg2):
    print("test2")
test(1,2)

第七天

super关键字:超级

闭包:能够读取其他函数内部变量的函数,函数里嵌套了一个函数
一定是嵌套函数
内层函数可以引用外层函数的变量(自由变量)

def outer():
    data = "data"
    def inner():
        print(data)
    return inner

test = outer()
test()   #input:data

global():显示全局变量
locals():显示一个局部变量
绑定操作七种
1.变量定义:a = 3
2.函数定义:def test()
3.函数的参数: def test(arg1,arg2)
4.类定义:将类名绑定到一个class对象上
5.import modulenname
6.for temp_variable in iterable: temp_variable是绑定操作
7.try except

自由变量:i就在闭包中
outer:全局变量,function,是绑定操作
data:局部变量,有绑定操作
inner:局部变量,有绑定操作
print(data):inner函数中,data没有没有在inner中绑定

装饰器:在不改变原函数的情况下,对原函数的功能进行增强
装饰器的使用:@装饰器名称,放在被装饰函数上面
一次定义多次使用

import time
def log_time(func):
    def log_wrapper():
        print(time.ctime())
        func()
        print(time.ctime())
    return log_wrapper

@log_time
def func_test():
    time.sleep(3)
    print("123")

@log_time
def func_test2():
    time.sleep(2)
    print("456")

func_test2()
print("****************************************")
func_test()

列表推导式:for后面跟的是过滤的表达式,而不是对结果进行修改的
for循环前边是对我想要的结果

list_data_3 = [i for i in range(10)]
print(list_data_3,type(list_data_3))

list_data_3 = [i for i in range(10) if i % 2 ==1]
print(list_data_3)

字典推导式:

装饰器 类里面的

第八天

迭代器:实现迭代协议的对象
python什么叫实现迭代协议

__inter__:返回对象本身,这个意义在于让调用他的人知道他是一个迭代器,要		  使用return		
__next__:返回迭代器的下一个元素,这个是实现迭代器真正的过程
		如果到迭代器结尾,怎么去知道迭代器结束了,要抛出一个异常:StopIteration。
		这个用意:for循环的,判断循环结束是否捕获StopIteration异常来判断,如果有这个异常,循环结束,如果没有,循环继续执行

如果要用下标去访问迭代器的话,要实现__getitem__方法
next(iterator):本质就是调用__next__

class MyIterator:
    def __init__(self,stop):
        self.start = -1
        self.stop = stop
    def __iter__(self):
        return self

    def __getitem__(self,item):
        return self.start + item + 1

    def __next__(self):
        self.start = self.start + 1
        if self.start < self.stop:
            return self.start
        else:
            raise StopIteration

data =  MyIterator(10)
# for i in data:
#     print(i)   #input:0 1 2 3 4 5 6 7 8 9
print(data[1])  #input:1

生成器(generator)
特点:每次产生一个元素
yield表达式:yield experssion_list(表达式列表)
生成器函数:定义了一个函数,,且函数有使用yield
生成器:当一个生成器函数被调用的时候,它返回一个迭代器,称为生成器。然后这个生成器来控制生成器函数的执行。

#生成器函数:yield_test
def yield_test():
    yield"yield"
#生成器:data
data = return_test()
next(data)

正则表达式
用特殊字符去匹配字符串中的内容

import re
str_test = "AbcD"
pattern = "abcd"
print(re.match(pattern,str_test,re.I))
str_test = "aaabbbcccaaaddd"
pattern = "aaa"
print(re.search(pattern,str_test)) 

input:
<re.Match object; span=(0, 4), match='AbcD'>
<re.Match object; span=(0, 3), match='aaa'>
import re
str_test = "计算机,软件,网络,大数据"
print(re.subn(",","|",str_test,count=2))

input:('计算机|软件|网络,大数据', 2)

pattern

第九天

nt(i) #input:0 1 2 3 4 5 6 7 8 9
print(data[1]) #input:1


**生成器(generator)**:
特点:每次产生一个元素
yield表达式:yield experssion_list(表达式列表)
生成器函数:定义了一个函数,,且函数有使用yield
生成器:当一个生成器函数被调用的时候,它返回一个迭代器,称为生成器。然后这个生成器来控制生成器函数的执行。

#生成器函数:yield_test
def yield_test():
yield"yield"
#生成器:data
data = return_test()
next(data)


正则表达式
用特殊字符去匹配字符串中的内容

import re
str_test = “AbcD”
pattern = “abcd”
print(re.match(pattern,str_test,re.I))
str_test = “aaabbbcccaaaddd”
pattern = “aaa”
print(re.search(pattern,str_test))

input:
<re.Match object; span=(0, 4), match=‘AbcD’>
<re.Match object; span=(0, 3), match=‘aaa’>


import re
str_test = “计算机,软件,网络,大数据”
print(re.subn(",","|",str_test,count=2))

input:(‘计算机|软件|网络,大数据’, 2)


pattern


# **第九天**

正则表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值