Python基础学习记录(带思维导图)

本文详细介绍了Python的基础语法,包括基本数据类型如数字、字符串、列表、元组、集合和字典,以及命名规范、运算符、流程控制。深入探讨了面向对象编程中的类和继承,并涉及正则表达式、高级语法如内置类函数、装饰器以及多线程的概念。Python广泛应用于爬虫、大数据分析、自动化运维、Web开发和机器学习等领域。
摘要由CSDN通过智能技术生成

Python

Life is short, I use python

  • 缺点

相对于其他语言(c++, c, java)来说

  • 功能
  1. 爬虫
  2. 大数据与数据分析(Spark)
  3. 自动化运维与自动化测试
  4. web开发: Flask, Django
  5. 机器学习: Tensor Flow
  6. 胶水语言, 混合其它(C++, Java)来编程, 其它语言制作的各种模块(尤其是C/C++)很轻松联结在一起

回归编程语言的本质, 基础! 基础! 基础! 数据结构与算法


语法

基本类型

Number 数字
  1. 整数 int
  2. 浮点数 float
  3. 布尔型 bool 关键字Ture, False值为1, 0
  4. 复数 complex
type(2/2) // float
type(2//2) // int '//' 表示整除
  • 进制表示与转换(2, 8, 10, 16)
    0b11 // 3 0b表示2进制
    0o11 // 9 0o表示8进制
    0x11 // 17 0x表示16进制
    
    bin(10) // bin方法可以将任意其它进制数转换为二进制
    int(0o11) // int方法可以将任意其它进制数转换为十进制
    oct(0xA) // oct方法可以将任意其它进制数转换为八进制
    hex(0b1000) // hex方法可以将任意其它进制数转换为十六进制
    
String 字符串
  • 在python中 字符串 使用双引号(建议)
  • 多行字符串使用三引号或者\n
  • print(r'c:\north\Njava') // 所见所得
  • 字符串操作方法
# 不能修改元素
"Hello" * 3 // HelloHelloHello
// 字符串 * n, 字符串出现n次

"Hello, world"[2] // l
// [n] 取到第n+1个的字符

"Hello, world"[-3] // r
// [-n] 取到反序的第n个字符

"Hello, world"[0:4] // Hell
// [m, n] 从m+1个到n-1个字符

"Hello, world"[0, -2] // Hello, wor
// [m, -n] 从m+1个到length-n个字符

"Hello, world"[6:] // world
// [m:] 从m到最后一个

ord('w') // ord()返回ASCll值
% 格式化操作
  • 与C语言中的类似
  • %d %s %f %c 整数, 字符串, 浮点数, 字符
name = '张三'
print('欢迎你, %s' % name)

# 1981.212
num = 81.212
print('%d' % num)
print('%.2f' % num)

# %04d 占4位, 空的用0补充, %4d 占四位, 没有空出来
print('%4d' % num)
format 格式化操作
  • 很强大, 有很多格式表现形式, 但是也有限制

    # 位置
    print('欢迎你, {0}, {1}'.format('张三', '好久不见'))
    
    # 名称
    print('你好, {username}, 你的编号是{number}'.format(username="xiaoming", number=12345))
    
    # 传入字典, 使用format需要加上**
    a = {'user': 'xiaoming', 'num': 12098}
    print('你好{user}, 你的编号{num}'.format(**a))
    
    # 序列的格式化, 带入format的参数没有加上*, 就需要0[1]选取
    point = (9, 10)
    array = [1,2,3,4]
    print('x:{0[0]},y:{0[1]}'.format(point))
    print('x:{0},y:{1}'.format(*point))
    
    print('第3个元素是 {0[2]}'.format(array))
    print('第3个元素是 {2}'.format(*array))
    
    # 格式化类
    class User:
    
    	def __init__(self, name, age):
    		self.name = name
    		self.age = age
    
    	def __str__(self):
    		return self.show()
    
    	def show(self):
    		return ('姓名{self.name},年龄{self.age}'.format(self=self))
    
    user = User('小王', 10)
    print(user)
    
    # 数字格式化, 浮点型不能强制转化为整数型
    num = 3
    Pi = 3.1415926
    print('{:.2f}'.format(Pi))
    print('{:+.2f}'.format(-Pi))  # +表示带符号
    print('{:0>3d}'.format(num))
    print('{:x<5d}'.format(num))  # > < 在大的在右小的在左 x
    print('{:,}'.format(100000))  # 100,000
    print('{:.1%}'.format(0.2))  # 25%
    


List 列表
// 可以存放任意类型的数据, 可以修改元素
[1,"sx", False, True]

// 嵌套列表
[1, 2, [False, True]]

// 如果带冒号的话, 还是返回一个列表
["hasx", "s", 1, "wa"][-1:] // ["wa"]

// 列表相加
[1, 2, 4]+[13, 10] // [1, 2, 4, 13, 10]

//[1, 3, 4] * 2 // [1, 3, 4, 1, 3, 4]

// 反转
[1, 2, 4][-1::-1] // [4, 2, 1]

// 判断一个元素是否在其中
3 in [1, 2, 3, 4] // True

// 不在其中
3 not in [1, 2, 3, 4] // False

// 总长度
len([1, 2, 3]) // 3

// 最大
max([1, 2, 3, 4]) // 4 // 最小 min
Tuple 元组
// 操作方法与列表类似, 不能修改元素
(1, 2, 3)[1] // 2 

// 元组只含有一个元素的时候, ()会被认为一个运算符
type((1)) // int
type(("jee")) // string

// 只有一个元素的元组
type((1,)) // tuple

// 空元组
type(()) //tuple
set 集合
  • 无序
  • 不重复
  • {}表示
# - 集合相减, 求差集
{1, 2, 3, 4} - {3, 4} // {1, 2}

# & 求集合中相同的, 求交集
{2, 3, 1} & {1, 2, 3, 4} // {2, 1, 3}

# | 求两个集合的1和, 求并集
{1, 2, 3} | {1, 2, 4, 5, 10} // {1, 2, 3, 4, 5, 10}

# 判断空集合的类型, 使用type(set())
type({}) // dict 
Dictionary 字典
  • (不可变类型)

    {key: value, key1: value}


基本类型总结
  • List, Tuple, String属于Sequence(序列)
  • 切片: 序列的[m:n] 的取值
  • int , string, tuple不可变类型
list
a = [1, 2, 4, 4]
b = a
a[0] = 9
a // [9, 2, 4, 4] 
b // [9, 2, 4, 4]

# list, set, dict 属于引用类型的
# number, str, tupule 属于值类型的

a = [1, 2, 3, 4]
id(a)
>>> 46603048
a[0] = "nihao"
id(a)
>>> 46603048
b = "ss"
id(b)
>>> 49301216
b = "aa" + b
id(b)
>>> 53333056

命名规范

  • 有意义, 使用原生单词

  • 字母,数字,下划线组成, 不能以数字开头

  • 不能使用保留关键字

运算符

  • +, -, *, / 可以进行数字运算
  • 0被认为false, 非0被认为true
  • and, x and y, 其中一个为false返回false, x 为真返回 y
  • or, x or y, 其中一个为false, 另一个不为false, 就返回不为false, 都为真返回前面的
  • not 取反, not True -> False
成员运算符
  • in
  • not in

  • 对象的三个特征

type, id, value

流程

  • pass 空白语句

包, 模块, 类, 函数,变量

  • 包以文件夹的形式表示, 模块就是一个.py文件, 类编写在模块中

  • 模块与模块之间通过import导入

# import n.py 都会执行n.py文件

# 同一级目录下
# A.py
a = [1, 2, 3]
b = 1
# B.py
import B
print(B.a)
---
from B import a
from B import a, b
from B import (a, b)
from B import *
print(a) // [1, 2, 3]

# __init__.py的用法
# 让文件夹变成包, __init__.py模块的名字就是包的名字, 导入该包下的模块会自动执行__init__.py文件, 可以用来初始化

# 内置变量__all__的用法
# 指定导出
# C.py
c = 1
d = 2
e = 3
f = 4
g = 5
__all__ = ['c', 'd', 'e' ,'f']
# 也可以在__init__中使用, 让其指定模块导出
__all__ = ['A', 'B']
# 'A', 'B'表示与__init__.py同级的A.py, B.py

函数

  • def func(*arg, **kw):

*arg 不定长参数, 以tuple类型存入, **kw, 不定长关键字参数, 以dict类型存入

  • 序列解包
# 函数的定义
def funcname(argumentlist):
	pass

def add(x, y):
	return x+y, y*x
result1, result2 = add(9, 10)

a, b, c = 1, 2, 3
print(a, b, c) # 1, 2, 3
d = 4, 5, 6
e, f, g = d
print(e, f, g) # 4, 5, 6

x = y = z = 1

面向的对象

  1. 类变量
  2. 类方法
  3. 实例变量
  4. 实例方法
  5. 静态方法
  6. 构造函数
class Human():
	# 类变量
	num = 0
	
	# 构造函数
	def __init__(self ,name, age):
		# 实例变量
		self.name = name
		self.age = age

	# 实例方法
	def Walk(self):
		print(self.name + "在行走")
		
	# 类方法
	@classmethod
	def Total(cls):
		return cls.num += 1
		
	# 静态方法
	@staticmethod
	def run():
		print('people is running')
		
# 调用
human1 = Human('xiaowang', 20)
继承
class Student(Human):
	
	def __init__(self, name, age, school):
		# 调用父类的构造函数
		super(Student, self).__init__(name, age)
		self.school = school
	
	def doHomeWork(self):
		print(self.name + ' 在' + self.school + '做作业')

Json和正则表达式

  • re
    import re
    
    language = 'javascriptc#PHP'
    # re.I 表示不区分大小写
    result = re.findall('(c#){1, 2}', language, re.I)
    
    print(result)
      
    
    # re.sub函数, 字符串的替换
    # 字符串自带的 replace 函数替换
    
    import re
    
    language = 'PythonC#\\nJavaPHPC#C#'
    
    result = re.sub('C#', 'Javascript', language, 1)
    result1 = language.replace('C#', 'HH', 2)
    
    # re.sub 0是全部替换, 而replace 0则只是替换0次(不替换)
    
    # print(result)
    # print(result1)
    
    # sub 的第二参数可以是一个函数, 参数需要用group转化下
    
    def convert(value):
        match = value.group()
        return '!!' + match + '!!'
    
    result3 = re.sub('C#', convert, language)
    
    print(result3)
    

高级语法

内置类和函数
  • map
  • filter
  • reduce
列表推导式
a = [1, 2, 3, 4, 5]
b = [i*2 for i in a] # [2, 4, 6, 8, 10]
三元表达式

x if x > y else y 与其它语言不同, 用if else表示, 为真在前

装饰器
  • 用来给已经定义好的函数添加功能, 用@符号
  • 对修改是封闭的, 对扩展是开放的
import time
# 带参数

def decorator(func):
	def wrapper(*args, **kw):
		print(time.time())
		return func(*args, **kw)
	return wrapper

@decorator
def func_1(func_Name):
	print('show func_Name: ' + func_Name)

@decorator
def func_2(func_Name, func_Name1, **func_Name2):
	print('show ' + func_Name + ', ' + func_Name1 + " " + 	str(func_Name2['w']))

func_2('func_1', 'func_2', w = 1)

File

  • 内置函数open()

open(file, mode…)

"""使用with来进行文件的操作"""

with open('./static/test.txt', encoding='utf-8') as file_object:
    content = file_object.read()
    print(content)

多线程

  • python中的多线程有锁, 一定程度上保证线程的安全性
  1. 在部署到服务器上响应请求的, 不是用框架自带开启的服务器, 因为它是一个单进程单线程的应用
  2. 就像node.js一样他本身是一个单进程单线程的语言, expresskoa开启的服务都是单进程和单线程
  3. 假如有10个请求同时访问, 只会依次返回响应
  • werkzeug 线程隔离的包
  • 使用线程隔离的 意义在于:是当前线程能够正确引用到他自己所创建的对象, 而不是引用到其他线程所创建的对象

提取码:52jj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值