python

Python基础

一、基础语法

pip管理包:

查找Python包命令 :sys.path

下载命令:pip  install  包名字
创建虚拟环境:Python  -m  venv  tutorial-env
激活:tutorial-env\Scripts\activate.bat
上传到真实的pypi:
python -m pip install setuptools wheel twine
创建包文件:setup.py
           LICENSE
           README.md
python -m pip install --user --upgrade setuptools wheel
python setup.py sdist bdist_wheel
python -m pip install --user --upgrade twine
twine upload dist/*

注释:#

多行注释:“”“ ”“” ‘’‘ ’‘’

引入:import math import random import sys

输入输出:print() input()
用法:1、传入数据   print(123,456)
      2、传入表达式  print(123,1+2)
      3、混合型   
      4、支持多个参数
      5、格式化输出    %s字符串   %d整型    %f浮点型  %0.3f 小数点位数
      print("我的名字是%s尹晓杰,我的年龄是%d22,我有很多钱%f¥"%("尹晓杰"22200.000))
    6、end可选参数
    print"123",end=""print("456",end="")
    123456
input("请输入您的名字")  参数为提示信息,会阻塞程序
input(arg)  arg提示,   返回类型是str

注意:1、变量不需要声明,直接赋值使用

​ 2、没有自增自减 a+=1 a-=1

​ 3、变量名由数字、字母、下划线构成,数字不能开头,支持中文

​ 4、不能使用特殊字符$ # @ *等

​ 5、不能使用关键字和保留字

​ 6、严格区分大小写

​ 7、变量交换 a,b=10,20 a,b=b,a

数据类型:
数字型(number)  整型int()  浮点型float()  复数
浮点型控制小数点的位数
%0.2f  
roundfloat,位数)

字符串型(str)
列表(数组)(list)
元组 (tuple) 不可变的列表
字典型(对象,json)    (dict)
集合 (set)
布尔类型 (bool)
None
数字型:
进制转换(将十进制转化为其他进制)
bin(num)将十进制转化为二进制
oct(num)将十进制转化为八进制
hex(num)将十进制转化为十六进制
字符串型:
定义:''   ""   """  """  '''  '''
转义字符:\t空格   \\    \'      \"     \n    print("af \daf")
字符串前缀:r 后面字符串是普通字符串
           b 后面的字符串bytes
           u 后面字符串是unicode
字符编码:
ASCII   GBK   gb-2312    unicode   utf-8
切片:
[start:end:step] 开始:结束:步长
str="山西太原小店区开通大厦"
printstr[::1]print(str[0:5:1])
列表:
定义:存储一系列相关数据的集合
注意事项:1、列表可以存储任意数据类型
         2、列表是可变数据
         3、列表可以使用切片
         4、列表可以定义一个元素的列表,空列表,多维列表
arr1=[1,2,3]
arr2=[]
arr3=[1]
arr4=[[1,2],[4,55],[12,4]]
print(arr1,arr2,arr3,arr4)
列表访问:list[index]
列表操作:
list.append() 在末尾插入
list.insert(index,item) 将对象插入到列表中 
list.pop()删除  默认最后一个
del list[index]删除
list.clear()清空
list.copy()浅拷贝 arr5=arr4.copys  print(arr5)
list.deepcopy()深拷贝
list.count(item)计数
list.extend(list)扩展  arr1.extend(arr4)  print(arr1)
list.index(item)返回下标
list.remove(item)删除元素
list.reverse()倒序
list.sort()排序
推导式:

[表达式 for 元素 in list序列 if条件]

arr1=[1,2,3,4,5]
attr2[item*2  for item in arr1 if item<2]
生成式:
(表达式  for 元素  in list  序列  if条件)

遍历:
arr=[1,2,3,4,5]
for item in arr:
    print(item)
for item in arr:
    print(arr.index(item),item)
 输出:   0   1
		1   2
        2   3
        3   4
        4   5
for i,item in enumerate(arr):
    print(i,item)
dict.fromkeys(['英语','数学','语文'],98)
for k in dict1.keys():
    print(k)
for v in dict1.values():
    print(v)
for k,v in dict1.items():
    print(k,v)
 遍历推导   
{k:v for k,v in dict.items() if条件}
{k  for k in dict.keys() if条件}
dict1=dict.fromkeys(['英语','数学','语文'],98)
dict2={"xb_"+k:v-8 for k,v in dict.items()}
print(dict2)  
元组:
不可变的列表    地址不变
tuple1=(12345)
tuple2=([1,2],[3,4])
tuple3=([12345])
tuple4=()
tuple5=(1,)
tuple6=1,2,3,4
内建方法:
tuple.index() 获取元素在元组中的索引值,对于重复的元素,默认获取从左起第一个元素的索引值
tuple.count() 统计元组中某元素的个数
字典型:
创建字典:
dict1={'name':'小白'}
dict2=dict(name='小白',sex='男')
dict3=dict([('name','sex'),('小白','男')])
dict4=dict(zip(['name','sex'],['小白''男']))
快速创建值一样的字典:
dict.fromkeys(list,data)
dict.fromkeys(['英语','数学','语文'],98)
字典的访问方式:
dict[key访问的内容]
常用内建函数:
dict.clear()清空字典
dict.copy()浅拷贝
dict.fromkeys()快速给key赋相同的值
dict.get(key,[default])  获得key的值,如果不存在返回None  dict.get('age',"没有"或者"18")给一个默认值
dict.items()返回键值的序列
dict.keys()返回键序列
dict.values()返回值序列
dict.pop(key) 删除key对应的item
del dict[key]  删除
dict.setdefault(key,default)设置默认值
     dict2=dict(name='小白',sex='男')
     dict2=setdefault('age','18')
     print(dict2)
dict.update()更新    传入可选参数或其他字典进行更新
     dict2=dict(name='小白',sex='男')
     dict2.update(age=18)
     print(dict2)
集合型:元素是唯一的
创建集合:
set1=set("13245")
set2=set("山西优逸客")
set3=set([1,2,3,4,5])
去重:
set4=set([1,1,2,2,])
list1=list(set4)
print(list1)
内建方法:
set.add()添加元素
set.clear()清空集合
set.copy()浅拷贝
set.pop()删除任意一位元素
set.remove()移除
set.update()更新:
    set5={1234}
    set5.update({6789})
    print(set5)
集合的操作:
&交集
|并集
-补集
^对称集
>前包含后
<后包含前
>=
<=
布尔型:
true  false

二、运算符:

算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、成员运算符、身份运算符

算术运算符:
包含:
第一组+ - * /
第二组% ** //
1+ *除了加、乘以外还可以操作字符串、列表、元组
2/结果都为浮点型
print(1/1)
   1.0
**幂运算
//地板除,向下取整
print(10//3)
    3

str1="abc"
print(str1*3)
abcabcabc
print([1,2,3]+[4,5,6])
(1,2,3,4,5,6)
赋值运算符:
+=  -=  *=   /=  %=  //=  **=    =
关系运算符:
>  >=  <  <=   !=
==(JavaScript动态类型、弱类型的语言,所以有===,python动态类型,强类型语言)
逻辑运算符:
andornot
位与运算:
&按位与  有0011
|按位或  有1100
^按位异或 同01
>>右移
<<左移
成员运算符:
in  如果在指定的序列中找到值返回 True,否则返回 False
not in 如果在指定的序列中没有找到值返回 True,否则返回 Falseprint('name' in {'name','xb'})
身份运算符:
is
is not
arr1=[1,2,3]
arr2=arr1
print(arr1 is arr2)
区分is==: is 用于判断两个变量引用对象是否为同一个   == 用于判断引用变量的值是否相等
    相等不一定是同一个

三、流程控制:

分支语句
单路分支:
	if 条件:
       pass
双路分支:
	if 条件:
    	pass
    else:
        pass    
a,b=10,20
if a>b:
    print("a>b")
 else:
    print("a<b")
    
表达式1 if 条件  else 表达式2

多路分支:
	if 条件:
    	pass
    elif 条件:
    	pass
    else:
        pass  
if a>b:
    print("a>b")
elif a==b:
    print("a==b")
else:
    print("a<b")
循环语句:
while 条件:
	pass
for i in 序列:
	pass

for i in range()  开始,结束,步进
干预循环语句:
break 终止循环
continue 终止本次循环
else 循环完成时执行,break语句之后不执行
for i in range(10):
    for j in range(10):
        print(i,j)
    else:
        print("第%s行结束"%i)

四、函数:

函数的语法:
def	函数名[参数]
	"""函数的简介
	
	函数的详细信息
	"""
    函数体
	[return]

    注释
(调用注释)函数名.__doc__
    参数
1、必选参数
2、默认参数
3、可变参数
4、关键字参数
必选参数:
必须要传参
def fn(a,b):
    print("a:",a)
    print("b:",b)
fn(10,20)  #a=10,b=20
fn(b=10,a=20) #b=10,a=20
fn()错误
fn(10)错误
默认参数:
缺省参数
def fn(a,b,c=10):
    print("a:",a)
    print("b:",b)
    print("c:",c)
fn(10,20)	#10   20  10
fn(10,2030)	#10  20  30
fn(c=30,b=10,a=20)
fn(c=30,20,10)错误
参数可以是变量,但是只能挂载一次
num=10
def fn(a,b,c=num):
    print("a:",a) #10
    print("b:",b) #20
    print("c:",c) #10
num=20
fn(10,20)
可变参数:
接收任意个数的参数,内部是元组形式
def fn(*args):
	print(args)
fn(1,2,3,4)

def fn(a,b,c=44,*args):
    print("a:",a) #10
    print("b:",b) #20
    print("c:",c) #30
	print(args)   #40
fn(10,20,30,40)
可变参数实现数据共享
mylist=[]
def fn(a,arr=[]):
	arr.append(a)
    print(arr)
fn(10) #[10]
fn(20) #[10,20]
fn(30) #[10,20,30]
关键字参数:
以键值的形式传参,内容是字典形式,没有顺序
def fn(**kwargs):
    print(kwargs)
fn(name="小白",sex="男")  #字典形式 {'name': '小白', 'sex': '男'}
可变参数、关键字参数的数据解压:
列表和字典数据形式->数据压缩
列表解压
def fn(*args):
    print(args)
list2=[1,2,3]
fn(*list2)   #(1,2,3)
字典解压
xh={'name':'xh','sex':'女'}
def fn(**kwargs):
    print(kwargs)
fn(**xh)
输出:{'name': 'xh', 'sex': '女'}
传参顺序:

必选参数、默认参数、可变参数、关键字参数

返回值:
return 
作用:返回并终止函数
注意:1、可以写多个return语句,最终只执行一个
	 2、不能再return语句之后书写代码
     3return只能返回一个数据,如果想返回多个数据必须list\tuple\dict
def fn():
    return 1,2,3
a,b,c=fn()
print(a,b,c)
匿名函数:

作用:作为参数进行传递,简化程序

语法:
lambda a[,b]: 函数体
参数可以有多个,之间","分割
函数体只有一个表达式,并且自动return
调用方式:
1、作为参数直接传递
2、用变量进行保存(fn=lambda a,b,c:a+b+c)
3、自调用 print((lambda a,b,c:a+b+c)(1,2,3))
fn=lambda a,b,c: a+b+c
print(fn(1,2,3))
#类似于
def fn(a,b,c):
    return a+b+c
高阶函数:

把一个函数名作为参数传递到另外一个函数中(实参高阶函数)

把一个函数名作为返回值返回(返回值高阶函数)

常用的高阶函数:
1map(fn,iter) 
   map(fn,iter1,iter2)
list1=[1,2,3,4,5]
list2=[1,2,3,4,5]
print(list(map(lambda x,y:x+y,list1,list2)))  #[2, 4, 6, 8, 10]
print(list(map(lambda x:x**2,list1)))   #[1, 4, 9, 16, 25]
2filter(fn,iter) 筛选
list1=[1,2,3,4,5]
print(list(filter(lambda x:x%2==0,list1)))  #2,4
3reduce(fn,iter)
from functools import reduce
list1=[1,2,3,4,5]
print(reduce(lambda x,y:x+y,list1))
累乘:
from functools import reduce
list1=[1,2,3,4,5]
def fn(x,y):
    print("x:",x,end=" ")
    print("y:",y,end=" ")
    print("x*y",x*y)
    return x*y
reduce(fn,list1) 
输出:x: 1 y: 2 x*y 2
	  x: 2 y: 3 x*y 6
      x: 6 y: 4 x*y 24
      x: 24 y: 5 x*y 120
局部环境、全局环境
>>函数内称为局部环境,局部环境内的变量就是局部变量
>>整个.py文件中为全局变量,全局变量在整个.py文件中都访问变量
>>通过dir()方法可以查看全局环境中的变量以及局部环境中的变量
1global全局变量声明,不能声明的同时赋值
name='小白'
def fn():
   global name
   name='小红'
   print(name)  #小红
fn()
print(name)  #小红
2nonlocal非局部非全局声明
name='小白'
def fn():
   name='小红'
   def fn1():
      nonlocal name
      name='小爱' 
      print(name)  #小爱
   fn1()
   print(name) #小爱
fn()
print(name) #小白
闭包函数

当俩个函数发生嵌套关系时,内层函数调用了外层函数的变量,当在外部调用内层函数时,此刻就发生了闭包

def fn():
    num=2
    return lambda x:x**num
fn1=fn()
print(fn1(10))
递归函数

自己调用自己

本质,相当于循环

必须有终止

装饰器:
定义:给一个函数增加新的功能
应用场景:当一个应用上线,如果想要增加他的功能,就希望不要过多的改变源代码
条件:
1、不能改变源代码
2、不能改变源代码调用方式
3、满足12的基础上增加新功能
import time 
def fn():
    time.sleep(2)
    print("程序正在运行...")
def timer(fn): #定义装饰器
    def newfn():
        start=time.time()
        fn()
        end = time.time()
        print("运行总时间为%s"%(end-start))
    return newfn
fn=timer(fn)
fn()
4、公式:
<函数+闭包+高阶函数+语法糖=装饰器>
5、装饰器传参
import time
def timer(a,b):#定义装饰器
    def timer1(fn):
        def newfn():
            start=time.time()
            fn()
            end = time.time()
            print("程序已崩溃%s"%(end-start))
            print(a,b)
        return newfn
    return timer1
@timer(10,20)
def fn():
    num=0
    for i in range(10000):
        num+=i
    print(num)
fn()
6、柯里化
def fn(a):
    def fn1(b):
        def fn2(c):
            print(a+b+c)
        return fn2
    return fn1
fn(10)(20)(30) 

五、文件操作

1、核心函数:
open(file,mode)
参数:
file 文件的地址
code 打开文件的模式
encoding 编码方式
errors 错误  ignore 忽略
返回值:文件对象 
2、打开模式
r 只读
w 只写 清空并写入   如果文件不存在会新建文件
a 追加 指针在文件尾,文件内容后追加内容,如果文件不存在会新建文件
r+ 读写
w+ 读写
a+ 读写 
rb  wb ab rb+  wb+  ab+   操作二进制文件
3、文件操作的步骤

打开文件 操作 关闭文件

4、文件读操作
fileobj.read([num])  读取num个字符,如果没有num默认读取文件全部
fileobj.readline([num]) 读取某一行的num个字符
fileobj.readlines() 读取文件全部
5、文件的关闭

fileobj.close()

6、文件写操作
fileobj.write(con) 文件写入
fileobj.writelines(con) 写入列表全部内容
7、文件指针
fileobj.seek(offset,0)  设置指针相对于文件头的偏移量
fileobj.tell()
8、文件操作规范
try:
    f = open("doem.txt", 'r')
    con=f.read()
fianlly:
    if f:
    f.close()
 with open("demo.txt","r") as f:
    f.read()
9、当需要保存数据到文件中时,数据格式转化
import   json
json.dumps() 把json数据转化为str
json.loads() 把符合json格式的字符串数据转化为json格式
eval(str) 将符合python语句的字符串解析成python语句
10、持久化存储pickle
import  pickle
pickle.dump(data,fileobj) 可以将任意类型进行存储到file文件
pickle.load(fileobj) 加载file文件中的数据
11、csv
csv是一种数据保存方式,常用在表格和数据库中
1、四个常用对象:
csv.reader()
csv.DictReader()
csv.write()
csv.DictWrite()
2、写入的方法:
fw.writerow()  写入单行
fw.writerows() 写入多行
fw.writeheader() 写入表头

Python进阶:

一、面向对象

1、类的基本语法:
class 类名 :    不能在全部环境下使用
	def __init__(self)
    	self.属性名=属性值
    def 方法名(self):
        print("class方法")
实例化:
a=类名()

定义:
1、类属性、实例属性
类属性调用:
通过类和实例进行调用,类属性可以共享数据
实例属性调用:
只能通过实例调用
实例属性aa和类属性aa相同时,实例调用优先考虑实例属性aa
2、静态方法、类方法、实例方法
静态方法:只能通过类进行调用,不能调用类的任何属性
类方法:通过类和实例进行调用,可以调用类的属性
实例方法:可以调用静态方法、类方法、实例方法
3、继承:
class A(B,C):
    method...
#继承
class A:
    def say(self):
        print('A类')
class B:
    def tell(self):
        print('B类')
class C(A,B):  #派生  A,B基类
    pass
print(dir(C))
调用方法时采用深度有优先方式搜索
4、派生标准类
迭代器:
class Reverse:
    def __init__(self,data):
        self.data=data
        self.index=len(data)
    def __iter__(self):
        return self
    def __next__(self):
        if self.index<=0:
            raise StopIteration
        self.index -= 1
        return self.data[self.index]
myiter=Reverse([1,2,3,4])
# print(next(myiter))

for i in myiter:
    print(i)
生成器:
特殊的迭代器,只能使用一次,使用的时候才创建
创建方法:函数     生成器表达式()
def fun():
    for i in range(10):
        yield i   #yield 相当于return   记录当前状态
# 方式一
aa=fun()
for i in aa:
    print(i)
for i in aa:
    print(i)
# 方式二
aa=(i*i for i in range(10))
for i in aa:
    print(i)
for i in aa:
    print(i)

模块与包

1、模块:每一个.py文件
如何导入模块:import 模块/路径
from 路径//模块/import  模块/命名
from 路径//模块/import  模块1   模块2
from 路径//模块/import *
为什么要有模块:分开开发
2、包:存放相关模块的文件夹,包内要有__init__.py
为什么要有包:

import 可以在任何位置调用,但要注意作用域
3as
用来更换命名的
 import mymodules.a2 as a2
包和模块常用的方法:
1、绝对路径和相对路径的使用(在组模块中用)
	. 当前   ..上一级
2、__all__用法
__all__用来指定
3、拆分模块
from a1 import say1,say2
4、可以通过字符串导入模块
import importlib
random=immportlib.import_module("random")
5、__main__.py 运行目录  
6、sys.path 可以查看模块的搜索路径

截取内容中的图片

import re
res=re.findall(r'<img alt="" src=".*?">',con)
str=",".join(res)
datetime
#时间戳
time.time()
时间元组
date=time.localtime(time.time())
格式化时间
string=time.strftime("%Y",date) 大小写有区别
time.strftime("%Y-%m-%d %H:%M:%S")当前时间
#time方法:
time.sleep()
time.time()
time.localtime() #将时间转为时间元组
time.strftime() #将时间元组变为字符串
time.mktime(t) #将时间元组转化为时间戳
#datetime模块
1、datetime常用类
datetime.date #年月日
datetime.time #具体时间
datetime.datetime  date和time #结合
datetime.timedelate 时间间隔
2、datetime.date 常用方法:
datetime.date(2018,12,1) 创建时间
datetime.date.today() #获取当前时间
datetime.date.fromtimestamp(time.time())
实例:.strftime() 格式化时间
实例:.timetuple() 转为时间元组
实例:replace(year=2015) 替换
3、datetime.time常用方法
datetime.time() 创建时间
实例:.strftime() 格式化时间 
实例:.replace() 替换
4、datetime.datetime常用方法
datetime.datetime.today() 当前时间
datetime.datetime.now() 当前时间
datetime.datetime.fromtimestamp(timestamp) #将时间戳转化为datetime
datetime.datetime(2018,11,12,12,0,3)
5、datetime.timedelta类
datetime.timedelta() 延时,一个时间段,可以用来加减
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值