欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python基础知识总结

程序员文章站 2022-03-23 09:13:23
Python基础知识总结一、变量1.定义变量:a = 10a, b = 10, 20a = b = c = 100#a = 1, b = 2 # 报错a, *b, c = 1, 2, 3, 42.命名规范: a. 只能使用字母数字下划线,且不能以数字开头 b. 不能是关键字 import keyword keyword.kwlist() c. 区分大小 d. 尽量见名知意,多单词情况下: i. 使用...

Python基础知识总结

一、变量

1.定义变量:

a = 10
a, b = 10, 20
a = b = c = 100
#a = 1, b = 2 # 报错
a, *b, c = 1, 2, 3, 4

2.命名规范:

    a. 只能使用字母数字下划线,且不能以数字开头
    b. 不能是关键字
        	import keyword
        	keyword.kwlist()
    c. 区分大小
    d. 尽量见名知意,多单词情况下:
            i. 使用下划线:my_student_name
            ii. 使用小驼峰: myStudentName

3. 删除变量

del name

二、运算符

1.算术运算符:+,-,,/,%,**,//
2.赋值运算符:=,+=,-+,
=,/=,%=,**=,//=
3.关系运算符:>,>=,<,<=,=,==,!=
4.逻辑运算符:and, or ,not
5.成员运算符:in , not in
6.身份运算符:is, is not
7.位运算符:&,|,~,^,<<,>>

三、 分支结构

1、单分支:if
2、双分支:if - else
3、多分支:if - elif - else
4. 类似三目运算符的语法
#if-else
a = 10
b = 11
x = a if a>b else b
print(x)

四、循环结构

1.while循环:
2.for循环:
3.while-else 和 for-else
4.循环相关的关键字
a. break关键字:
i. 在循环中使用;
ii. break之后的代码不会执行;
iii. break只会跳出当前这一次循环
IV. break可以配合for - else /while - else使用
b. continue关键字:结束当次循环直接进入下一次循环
c. pass关键字:空语句,作用就是保证代码的一致性,防止报错
5. range的使用

五、数据类型

1.数据类型:
不可变类型/值类型/基本类型:
number(int,float,complex)
bool: True,False
str: 字符串
tuple: 元组
None: 空值
bytes: 二进制

可变类型/引用类型:
      	list: 列表
      	dict: 字典
		set: 集合(了解)

2.复杂的数据类型详解(list, dict, str)
列表:
定义列表:
ages = [1,2,3,4,5,6]
基本操作:
+: 拼接
*: 重复
len: 列表长度
[:]: 切片
index: 下标
列表的方法:
增:
[重点] append(n): 追加一个元素
extend([]): 追加一个列表中的所有元素
insert(index, n): 在指定的下标位置插入元素
删:
[重点] pop(index): 弹出指定下标的元素, 默认弹出最后一个元素
remove(n): 删除指定的第一个元素
clear(): 清空列表
del ages[1]: 了解
改:
ages[1] = 100
查:
print(ages[1])
count(n): 统计元素出现的次数

    遍历列表:
        for n in ages:
            pass
        for i in range(len(ages)):
            pass
        for i,n in enumerate(ages):
            pass

排序:
升序sort():
sorted(): 升序,不会改变原列表,主要针对元组,字符串的排序
降序: sort(reverse=True)
sorted(list, reverse=True)
倒序/逆序/反转:reverse():
reversed(): 倒序,不会改变原列表,主要针对元组,字符串的排序

   拷贝:
   copy(): 浅拷贝, 一般用于一维列表
        
         import copy
         copy.deepcopy() : 深拷贝,主要用于二维列表或多维列表.

字符串:
定义字符串:
s = “hello”
基本操作:
+: 拼接
*: 重复
len: 字符串长度
[:]: 切片
index: 下标

	字符串方法:
    find( ): 查找子字符串在长字符串中第一次出现的下标位置, 如果不存在则返回-1 
    rfind(): 和find功能类似,但是是从右往左
    split(): 根据分隔符取进行分割/拆分
    splitlines(): 按行分割,等价于split('\n')
    replace(old, new): 替换
    join(): 跟split反过来, 拼接列表中的元素
        如: "+".join(['a','b'])
    
    upper(): 变成大写
    lower(): 变成小写
    isupper(): 是否为大写
    islower(): 是否为小写
    isdigit(): 是否为数字
    isalpha(): 是否为字母
    isalnum(): 是否为字母或数字
    
    encode(): 字符串=>二进制
    decode(): 二进制=>字符串
    
    eval(), ord(), chr(), startswith(), endswith()

字典:
定义字典:
d = {“name”: “李小璐”, “age”: 29}
基本操作:
len: 字典长度
字典的方法:
增/改:
d[‘name’] = “PGone”
update(): 拼接另一个字典
如: d.update({“sex”: “男”})
删:
[重点]pop(k): 根据key删除元素
popitem(): 了解, 随机删除一个元素
clear(): 了解, 清空字典
del d[key]: 了解
查:
print(d[‘name’]): 如果key不存在会报错
d.get(‘name’): 如果key不存在不会报错,会返回None
dict.keys:查找所有的key
dict.values:查找所有的值

    遍历字典:
        for k in d:
            pass
        for k in d.keys():
            pass
        for v in d.values():
            pass    
        for k,v in d.items():
            pass

六、 函数

1.函数的创建:函数名,函数体,返回值

def fn(x, y):
print(x + y)
return x + y

2.函数的参数:
a. 位置参数/必须参数,默认参数,关键字参数,不定长参数。
b. 参数的书写顺序:def fn(x, y, *args, z=1, **kwargs):

3.函数的返回值:return 关键字
a、会立即终止函数/退出函数;
b、return后面的代码不会再执行;
c、可以返回指定的值(返回结果)

4.匿名函数:使用lambda来创建匿名函数

f2 = lambda x: x * x
print(f2(3)) #9

f3 = lambda x, y: x + y
print(f3(4, 5)) #9

5.函数的特殊用法:函数名既是函数的名称,也是指向函数的一个变量,也可以作为函数的参数使用。例如,回调函数:

#回调函数
#m1 是普通函数
def m1(x, f):
#print(x, f)
s = f(x)
return s

#m2 是回调函数
def m2(a):
return a + 1

#m2 是函数名,被当作参数传递给了m1
print(m1(3, m2))

6.函数的作用域:
a. 局部变量:在函数内部定义的变量,不可以在函数外部使用。
b. 全局变量:在函数外部定义的变量,可以在函数内被获取,修改全局变量需要用global
c. 局部作用域:L
d. 函数作用域:E nonlocal可以让内部函数修改指定的外部函数中的变量
e. 全局作用域:G
f. 内建作用域:B (Python作用域)

#1.不同作用域变量的定义

num4= int(2.9)
num3 =  3    #G;全局作用域
def outer():
	num2=2#E:函数作用域
	def inner():
		num1=1#L:局部作用域
		print(num4,num3,num2,num1)
	return  inner
f = outer()
f()

#注意:当所有的变量不同名的时候,在闭包中,可以任意访问四种不同作用域对应的变量

7.函数的嵌套和闭包:
如果在一个外部函数中定义一个内部函数,并且外部函数的返回值是内部函数,就构成了一个闭包,则这个内部函数就被称为闭包【closure】

def out():
	p = 10
	def inner():
		nonlocal p
		p += 1
		print('p =', p)
	return inner

8.装饰器:
在代码运行期间,可以动态增加函数功能的方式,被称为装饰器【Decorator】

#通用装饰器
def outer2(f2):
	def inner(*args, **kwargs):
		print('开始唱歌了')
		r = f2(*args, **kwargs)
		print('唱完了', r)
		return r

	return inner

@outer2   #@语法糖
def sing2(singer, song, a):
	print(singer, '小红唱:', song, a)
	return 'nice'

print(sing2('小玲', '老女孩', a=10))

9.函数递归:
一个会调用自身的函数【在一个函数的内部,自己调用自己】

a、找临界值,递归终止的条件
b、找规律,相邻两次循环的关系,用公式表达出来

#求阶乘
#临界值:f(1) = 1
#公式:f(n) = n*f(n-1)
def f(n):
	if n == 1:
		return 1
	return n * f(n - 1)

七、包和模块

1.包:
包含__init__.py文件的文件夹, 一般用来存储模块

2.模块:
模块就是python文件

3.包和模块的命名规范:
和变量命名规范一致

4.导入包和模块
a, import
格式:
import package
示例:
import math
import os, random
b, from-import
格式:
from package import module
from package.module import variable/function
from module import variable/function
示例:
from package import module
from package.module import sex, login

八、系统模块

1.os模块
os.listdir(): 获取指定目录下的所有文件和文件夹名称
os.mkdir(): 创建一个目录
os.makedirs(): 可以创建多层目录
os.rmdir(): 删除空目录
os.rename(): 重命名文件或目录
os.remove(): 删除文件
os.getcwd(): 获取当前路径
os.curdir(): 获取当前路径,得到的是一个点.
. 表示当前目录
… 表示父目录

2.os.path模块
os.path.abspath(): 获取到绝对路径
os.path.join(): 拼接路径
os.path.split(): 拆分路径/分割路径
os.path.splittext(): 拆分文件名,比如: hello.py
os.path.isdir(): 判断是否为目录
os.path.isfile(): 判断是否为文件
os.path.exists(): 判断是否存在
os.path.getsize(): 获取文件大小
os.path.dirname(): 父目录
os.path.basename(): 文件名

3. time模块
概念:
UTC: 国际标准时间
时间戳: 从1970年1月1日到指定时间的秒数
time模块中的方法
time.time() : 获取当前时间的时间戳
time.sleep(): 让程序暂停
time.gmtime(secs):时间戳=>时间元组, UTC
time.localtime(secs): 时间戳=>时间元组, 本地时间
time.mktime(t): 时间元组=>时间戳
time.strftime(): 时间元组=>时间字符串
time.strptime(): 时间字符串=>时间元组
time.asctime()
time.ctime()

4.datetime模块[掌握]
a. 创建日期对象
d = datetime.datetime.now() : 当前时间的日期对象
d = datetime.datetime(2020, 1, 2, 10, 10, 10) : 创建指定的日期对象
b. 日期对象的方法和属性
d.year, d.month, d.day : 年, 月, 日
d.hour, d.minute, d.second: 时,分,秒
d.date(): 年月日
d.time(): 时分秒
d.strftime(): 输出一个格式化的时间字符串
d.timestamp(): 时间戳
datetime.timedelta(days=8, hours=10): 时间差

5.calendar模块
c = calendar.calendar(2020, w=2, l=1, c=6)
c = calendar.month(2020, 7)
calendar.isleap(2020)
calendar.leapdays(1900, 2020)
calendar.monthcalendar(2020, 7)
calendar.monthrange(2020, 6)

6.hashlib模块
md5加密:
m = hashlib.md5()
m.update(“hello”.encode())
m2 = m.hexdigest()

九、第三方模块

安装第三方模块
1.使用pycharm去安装
2.使用pip命令
pip -V : 查看pip版本
pip install numpy : 安装包
pip uninstall numpy: 卸载包.
pip list : 查看所有的包
pip freeze: 查看自己安装的包
pip show numpy: 查看包详情

十、遍历目录

import os

#遍历目录p
def search_dir(path):
	filename_list = os.listdir(path)
	for filename in filename_list:
		#file_path: 每个子文件或子文件夹的绝对路径
		file_path = os.path.join(path, filename)

		#如果是文件
		if os.path.isfile(file_path):
			print("文件名:", filename)
		#如果是目录
		elif os.path.isdir(file_path):
			print("目录名:", filename)

#递归遍历当前目录的子目录
search_dir(file_path)

search_dir(r'C:\Users\ijeff\Desktop\Python2003\day11\code\newdir')

十一、 面向对象

1.面向对象和面向过程
面向过程: 侧重解决问题的步骤, 按顺序一步一步执行, 亲力亲为.
面向对象: 侧重问题中的对象, 以指挥官的身份去使用这些对象做事情.

2.类和对象
类: 封装属性和方法, 创建类的目的是用来创建对象, 类是对象的抽象
对象: 是类的一个具体, 我们要使用类来创建对象

3.构造函数和析构函数

构造函数:
class A:
	def __init__(self, name):
		self.name = name
i.	创建对象时会自动调用构造函数
ii.	作用是对属性进行初始化

析构函数:
class B:
	def __del__(self):
		print("析构函数")

4.self
a. self存在于类中的函数里面的形参
b. self不是关键字
c. self是指向当前类的对象, 哪个对象调用了该函数,则self就是这个对象

5.slots
限制属性的名称
slots = (“name”, “age”)

6.封装
a. 私有化
使用双下划线开头: __name
私有化的特点: 只能在当前类内部使用
i. 属性私有化
ii. 方法私有化
b. property装饰器
作用: 让方法可以当成属性来使用
条件: 必须要写返回值

7.继承
a. 单继承
定义: 只有一个父类

#父类

class Father:
	def __init__(self, name, age):
		self.name = name
		self.age = age

#子类

class Son(Father):
	def __init__(self, name, age, sex):
		super().__init__(name, age)
		#Father.__init__(self, name, age)
		self.sex = sex

b. 多继承
定义: 有2个或2个以上的父类

#父类
class Father:
	def __init__(self, name):
	self.name = name

#父类
class Mother:
	def __init__(self, age):
	self.age = age

#子类
class Son(Father, Mother):
	def __init__(self, name, age, sex):
	#Father.__init__(self, name)
	#Mother.__init__(self, age)
	super(Son, self).__init__(name)
	super(Father, self).__init__(age)
	self.sex = sex

c. 私有属性和私有方法不可以继承

d. 重写
定义: 在继承的基础上, 子类有和父类相同的方法, 则子类重写了父类的方法

8.str__和__repr
作用: 让打印的对象值为我们__str__函数中的返回值(字符串)
条件: 必须返回字符串类型(一般返回属性值)

9.多态:
在继承的基础上,而且需要用重写. 要在父类中定义一个方法,让所有子类重写该方法,那么我们可以使用父类对象去指向不同的子类来调用同一个方法名,则有不同的状态或结果

10.isinstance和type
isinstance: 判断某个对象是否是某个类(父类)创建的, 返回bool值
type: 打印某个对象的类型

11.对象属性和类属性的区别
对象属性:
调用: 对象.对象属性
赋值: 如果属性存在则修改, 如果属性不存在则会动态添加新属性
内存: 独立的, 每个对象的对象属性是独立的内存
类属性:
调用:
1.对象.类属性
2.类.类属性(推荐)
赋值:
要使用类.类属性的方式赋值
内存:
共享的内存

12.类方法和静态方法

类方法:
@classmethod
静态方法:
@staticmethod
 
class Person:
	age = 10

#构造方法/构造函数
	def __init__(self, name):
		self.name = name

#成员方法(常用)
	def sleep(self):
		print("睡觉:", self)

#私有方法
	def __run(self):
		print("跑步")

#类方法:
#1. 可以使用类和对象调用,但是建议使用类来调用,可以节省内存
#2. 可以使用类属性和其他类方法, 但是不能使用对象属性和成员方法和私有方法
#3. 一般用在功能比较单独,和类中其他属性和方法无关的情况下
#cls: class
	@classmethod
	def eat(cls):
#print(cls.name)  # 在类方法中不能使用对象属性和成员方法,因为没有self
		print("吃饭:", cls==Person)  # True

#静态方法:
#1. 可以使用类和对象调用,但是建议使用类来调用,可以节省内存
#2. 不可以使用对象属性,成员方法和私有方法,一般也不用类属性和类方法
#3. 就是一个非常普通的函数,只是写类里面
	@staticmethod
	def sing():
		print("唱歌")

13.特殊属性

__name__ : 得到类名
__class__: 打印对象所属类
__dict__: 得到所有属性组成的字典
__module__: 所在模块
__bases__: 所有父类
__mro__: 继承链

14.运算符重载
可以让对象使用运算符

class Girl:
	def __init__(self, name, age):
		self.name = name
		self.age = age
	# + 加法
	def __add__(self, other):
		return self.age + other.age


# 对象
p1 = Girl('杨超越', 22)
p2 = Girl('关晓彤', 20)

print(p1.age + p2.age)
print(p1 + p2)

15.单例模式

# 方法一: 使用new
class Person(object):

# 构造函数: 用来对属性初始化
	def __init__(self, name):
		print("__init__")
		self.name = name

	# 类属性
	instance = None

	# new方法:用来创建对象
	@classmethod
	def __new__(cls, *args, **kwargs):
		print("__new__")
		if not cls.instance:
			print("---创建新对象---")
			cls.instance = super().__new__(cls)  # 新建对象
		return cls.instance

# 方法二: 使用装饰器
	def outer(cls):
		instance = None
		print("instace初始化为None")
		def inner(*args, **kwargs):
			nonlocal instance
			if not instance:
				print("---创建了新对象---")
				instance = cls(*args, **kwargs)
			print('--返回对象--')
			return instance

		return inner

@outer
class Person:
	pass

# 方法三: 使用类方法

class Singleton:
	instance = None

	@classmethod
	def get_instance(cls):
		if not cls.instance:
		cls.instance = cls()
		return cls.instance
	
s1 = Singleton.get_instance()
s2 = Singleton.get_instance()
print(s1 is s2)  # True

十二、 异常处理

1.异常: 代码运行时可能报错
2.捕获异常

# 第一种写法
try:
	a =  9 / 0
except:
	print("报错了")

# 第二种写法
try:
	a = a + 1
except NameError as e:
	print("报错了:", e)

# 第三种写法
try:
	a = a + 1
except Exception as e:
	print("报错了:", e)

# 第四种写法
try:
	a = a + 1
except Exception as e:
	print("报错了:", e)
else:
	print("没有出错")

# 第五种写法
try:
	a = a + 1
except Exception as e:
	print("报错了:", e)
finally:
	print("不管有没有错误, 这里的代码都会执行")

3.抛出异常

raise NameError(“hello”)

4.自定义异常

class MyException(Exception):
pass

5.断言

def fn(n):
assert n!=0, “错误,除数不能为0”
a = 1/n
fn(0)

十三、文件操作

1.文件打开模式

r 只读, 如果文件不存在则报错
rb 只读二进制, 如果文件不存在则报错
w 清空写, 如果文件不存在则创建该文件
wb 清空写二进制, 如果文件不存在则创建该文件
a 追加写, 如果文件不存在则创建该文件
ab 追加写二进制, 如果文件不存在则创建该文件

2.文件操作流程
a. 打开文件
fp = open(‘file’, mode, encoding)
b. 文件操作
fp.read()
fp.read() 所有内容
fp.read(1024) 指定长度的内容
fp.readline() 一行行读取
fp.readlines() 读取所有行,返回列表
fp.write()
c. 关闭文件
fp.close()

3. 编码,解码
encode() : 编码 (字符串=>二进制)
decode() : 解码 (二进制=>字符串)

4. csv文件读写

本文地址:https://blog.csdn.net/Lonely_Fishes/article/details/107874322